设计和实现聪明的尼姆游戏(人机对战)
实验目的
(1)理解尼姆游戏规则。
(2)了解多个函数的定义与调用。
(3)理解并熟练运用w h i l e循环。
(4)理解带e l s e子句的循环结构执行流程。
(5)理解循环语句中的b r e a k语句的作用。
(6)了解使用循环和异常处理结构对用户输入进行约束的用法。
(7)养成时刻注意各级代码缩进级别的习惯。
实验内容
尼姆游戏是个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。在聪明模式中,计算机每次拿走一定数量的物品使得堆的大小是2的幂次方减1–也就是3.7,15,31,63等,如果有一定数量的剩余物品,计算机就随机拿走一些,编写程序,模拟聪明版本的尼姆游戏。
from math import log2
from random import randint,choice
def everystep(n):
half = n / 2
m = 1
possible = []
while True:
rest = 2**m - 1
if rest >= n:
break
if rest >= half:
possible.append(n-rest)
m=m+1
if possible:
return choice(possible)
return randint(1,int(half))
def smartNimuGame(n):
while n>1:
print("Now it's your turn, and we have {0} left.".format(n))
while True:
try:
num = int(input('How many do you want to take:'))
assert 1 <= num <= n//2
break
except:
print('Error. Must be between 1 and {0}'.format(n//2))
n-=num
if n==1:
return 'I fail.'
n -= everystep(n)
else:
return 'Ýou fail'
print(smartNimuGame(randint(1,100)))
转至:https://blog.csdn.net/qq_45242225/article/details/102810037