- 实验目的
学会使用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()方法返回结果可以当作集合使用,支持使用减法计算差集,得到一个为羊的门,让用户纠结是否需要改变答案。