python 聰明的尼姆遊戲

2022-10-09 19:57:10 字數 1675 閱讀 3829

兩個玩家輪流從一堆物品中拿走一部分,在每一步中,玩家可以自由選擇拿走多少物品,

但是必須至少拿走乙個並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。

在聰明模式中,計算機每次拿走足夠多的物品使得堆的大小是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

inmi:

print("

root取走{}

".format(rootnum))

break

else

:

continue

num -=rootnum

print("

目前有{}

".format(num))

if num == 1: #

如果機器取走後剩1,則機器勝

print("

you loss.

")

實現效果

搜尋複製

python實現尼姆遊戲

尼姆遊戲,這是乙個著名的遊戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須拿走一部並且最多只能拿走一半物品,然後輪到下乙個玩家。拿走最後乙個物品的玩家輸掉遊戲。先手隨機。sur bin nve python coding utf 8 impo...

Python 尼姆遊戲 人機對戰

實驗目的 實驗內容 n 目的數運算元x n目的數 運算元x11 失敗17152 21118 1533 ran19154 43120 15553 221156 63322 1577 ran23158 87124 15997 2251510107 3261511117 4271512127 528151...

取石子遊戲之尼姆博弈

尼姆博弈 有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝 這種情況與二進位制有著很大的關係,我們用 a,b,c 來表示某種局勢,那麼 0,0,0 必然為奇異局勢,最後乙個面對這個局勢的必敗。0,n,n 也是種奇異局勢。因為如果對手在其中一堆取m個石...