1. 程式人生 > 其它 >python 聰明的尼姆遊戲

python 聰明的尼姆遊戲

兩個玩家輪流從一堆物品中拿走一部分,在每一步中,玩家可以自由選擇拿走多少物品,
但是必須至少拿走一個並且最多隻能拿走一半物品,然後輪到下一個玩家。拿走最後一個物品的玩家輸掉遊戲。
在聰明模式中,計算機每次拿走足夠多的物品使得堆的大小是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.")

實現效果

 

 

搜尋

複製