两个玩家轮流从一堆物品中拿走一部分,在每一步中,玩家可以自由选择拿走多少物品,
但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2 的幂次方减1——也就是3,7,15,31 或63。
除了堆的大小已经是2 的幂次方减1,在其他情况下这样走都是符合游戏规则的。在那种情况下,计算机就按游戏规则随机拿走一些。
import random
num = random.randint(3, 100) # 函数返回3和100之间的任意整数
print("初始数为{}".format(num))
while num > 1:
# 人类回合
while True:
userNum = int(input("请输入你取走的个数:"))
if 1 <= userNum <= num//2: # 至少取走一个且最多只能拿走一半 求商://
break
else:
print("输入的数字不合法!")
num -= userNum
print("目前有{}".format(num))
if num == 1: # 如果玩家取走后剩1,则玩家胜
print("YOU WIN.")
break
# 机器回合
mi = [3, 7, 15, 31, 63]
while True:
if num == 2:
RootNum = 1
print("Root取走{}".format(RootNum))
break
t = random.choice(mi) # 机器随机抽取预计余数
RootNum = num - t
if num in mi: # 余数本来就是2的幂次方-1
RootNum = random.randint(1, num//2) # 机器随机抽取
print("Root取走{}".format(RootNum))
break
elif 0 <= RootNum <= num//2 and num not in mi:
print("Root取走{}".format(RootNum))
break
else:
continue
num -= RootNum
print("目前有{}".format(num))
if num == 1: # 如果机器取走后剩1,则机器胜
print("YOU LOSS.")
实现效果