实验三 聪明的尼姆游戏(人机对战)
实验目的:
(1)理解尼姆游戏规则
(2)了解并熟练使用while循环
(3)理解带else子句的循环结构执行流程
(4)理解循环语句的break语句的作用
(5)了解使用循环和异常处理结构对用户输入进行约束的用法
实验内容:
尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1——也就是3,7,15,31或63.除了堆的大小已经是2的幂次方减1,在其他情况下这样走都是符合游戏规则。在那种情况下,计算机就按游戏规则随机拿走一些。
编写程序,模拟聪明版的尼姆游戏。
from math import log2
from random import randint
def ever_step(n):
num = n - (2 ** int(log2(n)) - 1)
half = n // 2
if num <= half:
return num
return randint(1,half)
def smart(n):
while n > 1:
print("你的回合,还剩下{}物品".format(n))
while True:
try:
num = int(input("你要拿走的数量:"))
assret 1 <= num <= n // 2
break
except:
pass
n -= num
if n == 1:
return "我输了"
n -= every_step(n)
else:
return "你输了"
print(smart(randint(1,100)))
实验三 猜单词游戏
实验内容:编写程序模拟猜单词游戏。程序运行时,系统随机生成一个单词,然后将产生后的单词中字母的顺序进行打乱,组成新的一个单词。然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了,猜错了),如果猜错了,则提示用户继续猜,每一个用户有三次猜测的机会。猜对了则提示用户,“猜对了,恭喜过关”,然后询问用户是否要继续下一关。
import random
WORDS = ('ErenYeager','ArminArlert',' MikasaAckerman','JeanKirstein','Annie','Sasha','improve','Krista','Connie','Marco')
isGo_on = 'Y'
while isGo_on == 'Y' or isGo_on == 'y':
randomWord = random.choice(WORDS)
correctWord = randomWord
jumbleWord = ''
while randomWord:
position = random.randrange(len(randomWord))
jumbleWord += randomWord[position]
randomWord = randomWord[:position] + randomWord[(position + 1):]
print('乱序后单词:',jumbleWord)
guessWord = input('\n请您猜猜看:')
while guessWord != correctWord and guessWord != '':
print("猜错了")
guessWord = input("继续您猜:")
if guessWord == correctWord:
print("猜对啦,恭喜过关!\n")
isGo_on = input("\n\n是否要继续下一关?(Y/N):")
实验六
实验要求:输入若干学生的成绩,计算所有这些学生成绩的平均分、及格率以及优秀率。其中学生成绩的个数由第一行输入的整数控制的,60分及以上者为成绩合格,85分及以上者为优秀。
例如输入:4
89
95
56
74
输出:
平均分为:78.50
及格率为:75%
优秀率为:50%
if __name__ == '__main__':
score_list = list()
n = int(input())
count_1 = 0
count_2 = 0
for _ in range(n):
tmp = int(input())
if tmp >= 60:
count_1 += 1
if tmp >= 85:
count_2 += 1
score_list.append(tmp)
total_score = sum(score_list)
print("平均分: {:.2f}".format(sum(score_list) / len(score_list)))
print("及格率: {:.0f}%".format((count_1 / len(score_list)) * 100))
print("优秀率: {:.0f}%".format((count_2 / len(score_list)) * 100))