python实验

  • 实验目的

学会使用python完成一些简单的程序

  • 实验环境

Visual Studio code

三、实验内容、步骤和结果分析

题目一:编写函数Rate,模拟打字练习程序的成绩评定。假设origin为原始内容,userInput为用户练习时输入的内容,要求用户输入的内容长度不能大于原始内容的长度。如果对应位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始字符串长度,按百分制输出,要求保留两位小数。

源码:

import random

order='y'

while(order=='y' or order=='Y'):

    print('----------模拟打字练习程序----------')

    original=''.join(random.sample('abcdefghijklmnopqrstuvwxyz',20))#随机生成由20个小写英文字符构成的字符串,字符数可改变

    print('输出:'+original)

    user_Inputs=input('输入:')

    combination=list(zip(original,user_Inputs))

    true_word=0.0#记录正确的字符数

    #统计正确字符数

    for word in combination:

        if word[0]==word[1]:

            true_word+=1

     #评定等级

    score=round(true_word/len(original),3)*100

    print('分数:'+str(score)+'分\n')

    order=input('\n是否继续练习(输入Y(y)orN(n)):')

   

print('退出程序!')

运行结果截图:

实验过程分析:先随机生成20个随机英文字符,之后将生成的结果打印出来,之后用input函数接收用户输入的字符串,之后将zip函数将两个字符串合起来,转换成list列表,之后逐一比对每个元素是否相同,同时记录正确的个数。

题目二:编写程序:编写函数Hannoi模拟汉诺塔游戏的过程:塔内有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个盘子。游戏的目标是把A杆上的盘子全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

源码:

steps = 0

def hanoi(src, des, mid, n):

    global steps

    if n == 1:

        steps += 1

        print("[STEP{:>4}] {}->{}".format(steps, src, des))

    else:

        hanoi(src,mid,des,n-1)

        steps += 1

        print("[STEP{:>4}] {}->{}".format(steps, src, des))

        hanoi(mid,des,src,n-1)

N = eval(input())

hanoi("A", "C", "B", N)

运行结果截图:

实验过程分析:要把n个盘子由A到C,就要先把N-1个盘子由A移动到B,之后把剩下的那个盘子移动到C,之后,再把N-1个盘子由B移动到C经过A.

题目三:编写程序:你正参加一个有奖游戏节目,前方有3道门可以选择,其中一个后面是汽车,另外两个后面是山羊。如果你选择一个门(例如1号门),主持人此时会打开你所选门以外的另一个门(这里主持人已经知道每个门后面的物品)例如3号门,后面是一只山羊。此时主持人问你:”你想改选门吗?”,然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。编写程序,模拟这个游戏。

源码:

from random import randrange

 

def init():

    '''返回一个字典,键为3个门号,值为门后面的物品'''

    result = {i: 'goat' for i in range(3)}

    r = randrange(3)

    #在某个随机的门后面放一辆汽车,其他两个门后面仍然是山羊

    result[r] = 'car'

    return result

def startGame():

    #获取本次游戏中每个门的情况

    doors = init()

    #获取玩家选择的门号

    while True:

        try:

            firstDoorNum = int(input('Choose a door to open:'))

            assert 0<= firstDoorNum <=2

            break

        except:

            print('Door number must be between {} and {}'.format(0, 2))

 

    #主持人查看另外两个门后的物品情况

    #字典的keys()方法返回结果可以当作集合使用,支持使用减法计算差集

    for door in doors.keys()-{firstDoorNum}:

        #打开其中一个后面为山羊的门

        if doors[door] == 'goat':

            print('"goat" behind the door', door)

            #获取第三个门号,让玩家纠结

            thirdDoor = (doors.keys()-{door, firstDoorNum}).pop()

            change = input('Switch to {}?(y/n)'.format(thirdDoor))

            finalDoorNum = thirdDoor if change=='y' else firstDoorNum

            if doors[finalDoorNum] == 'goat':

                return 'I Win!'

            else:

                return 'You Win.'

while True:

    print('='*30)

    print(startGame())

    r = input('Do you want to try once more?(y/n)')

    if r == 'n':

        break

运行结果截图:

实验过程分析:先随机生成三个门,其中一辆车,两只羊,之后获取用户猜的门号,如果输入的值不在0-2之间,则直接退出,否则继续,用字典的keys()方法返回结果可以当作集合使用,支持使用减法计算差集,得到一个为羊的门,让用户纠结是否需要改变答案。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huaaay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值