Python實(shí)現(xiàn)聰明的尼姆游戲
尼姆游戲是個著名的游戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須至少拿走一個并且最多只能拿走一半物品,然后輪到下一個玩家。拿走最后一個物品的玩家則輸?shù)粲螒?br /> 在聰明模式中,計(jì)算機(jī)每次拿走一定數(shù)量的物品使得堆的大小是 2 的冪次方減 1—也就是 3、7、15、31、63 等。如果有一定數(shù)量的剩余物品,計(jì)算機(jī)就隨機(jī)拿出一些。編寫程序,模擬聰明版本的尼姆游戲。
先創(chuàng)建兩個函數(shù),一個用于玩家拿走商品,另一個用于電腦拿走商品。題目要求電腦要隨機(jī)挑選,因此我們用到了random庫中的choice方法,用法為random.choice(iterable),就是從序列中隨機(jī)挑選一個元素。
import random
# 玩家拿走物品
def play(num):
while True:
try:
if num == 1:
print('請輸入要拿走物品的數(shù)量(1)')
take_num = int(input())
assert take_num == 1
else:
print('請輸入要拿走物品的數(shù)量(1-%d)' % (num / 2))
take_num = int(input())
assert 1 <= take_num <= num // 2
except(ValueError, AssertionError):
print('請正確輸入數(shù)量!')
else:
break
num -= take_num
print('玩家拿走了', take_num, '個,還剩', num, '個')
return num
# 電腦拿走物品
def computer(num):
take_max = num // 2
lst = []
for i in range(1, num):
temp = 2 ** i - 1
if temp <= num - 1:
lst.append(temp)
else:
break
lst = list(filter(lambda y: num - y <= num // 2, lst))
if lst:
temp_lst = []
for i in lst:
x = num - i
temp_lst.append(x)
take_num = random.choice(temp_lst)
num -= take_num
print('電腦拿走了', take_num, '個,還剩', num, '個')
return num
else:
take_num = random.randint(1, take_max)
num -= take_num
print('電腦拿走了', take_num, '個,還剩', num, '個')
return num
while True:
try:
initial_value = int(input('請輸入起始數(shù)量堆的大?。?))
except(ValueError, AssertionError):
print('請正確輸入數(shù)量!')
else:
break
player = 1
computer_player = 1
# 依次循環(huán)玩家和電腦那走物品,若玩家先拿完則提前跳出循環(huán),若電腦先拿完則正常退出循環(huán)
while computer_player and player:
initial_value = play(initial_value)
player = initial_value
if player == 0 or player == 1:
break
initial_value = computer(initial_value)
computer_player = initial_value
if player == 0:
print('\n電腦勝利!')
else:
print('電腦拿走了 1 個,還剩 0 個')
print('\n玩家勝利!')
以上代碼純本人想法,若有更好的想法可留言一起探討

到此這篇關(guān)于Python實(shí)現(xiàn)聰明的尼姆游戲的文章就介紹到這了,更多相關(guān)Python尼姆游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python機(jī)器學(xué)習(xí)入門(三)之Python數(shù)據(jù)準(zhǔn)備
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)入門知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
python str()如何將參數(shù)轉(zhuǎn)換為字符串類型
這篇文章主要介紹了python str()如何將參數(shù)轉(zhuǎn)換為字符串類型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
python中實(shí)現(xiàn)定時任務(wù)的幾種方案
本文呢給大家總結(jié)以下幾種方案實(shí)現(xiàn)定時任務(wù),可根據(jù)不同需求去使用不同方案,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴可以參考下2023-10-10
Python爬蟲實(shí)例——爬取美團(tuán)美食數(shù)據(jù)
這篇文章主要介紹了Python爬蟲如何爬取美團(tuán)美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
python實(shí)現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法
這篇文章主要介紹了python實(shí)現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法,涉及Python操作csv文件的相關(guān)技巧,需要的朋友可以參考下2015-06-06
用python按照圖像灰度值統(tǒng)計(jì)并篩選圖片的操作(PIL,shutil,os)
這篇文章主要介紹了用python按照圖像灰度值統(tǒng)計(jì)并篩選圖片的操作(PIL,shutil,os),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

