python 聰明的尼姆遊戲
阿新 • • 發佈:2022-04-10
兩個玩家輪流從一堆物品中拿走一部分,在每一步中,玩家可以自由選擇拿走多少物品,
但是必須至少拿走一個並且最多隻能拿走一半物品,然後輪到下一個玩家。拿走最後一個物品的玩家輸掉遊戲。
在聰明模式中,計算機每次拿走足夠多的物品使得堆的大小是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.")
實現效果
搜尋
複製