(新手小白必學!)用Python設計和實現聰明的尼姆遊戲(人機對戰)!!!!

題目:python

  • 尼姆遊戲是個著名的遊戲,有不少變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家能夠自由選擇拿走多少物品,可是必須至少拿走一個而且最多隻能拿走一半物品,而後輪到下一個玩家。拿走最後一個物品的玩家輸掉遊戲。web

  • 在聰明模式中,計算機每次拿走必定數量的物品使得堆的大小是2的冪次方減1————也就是三、七、1五、3一、63等。若是有必定數量的剩餘物品,計算機就隨機拿走一些。app

  • 編寫程序,模擬聰明版本的尼姆遊戲。dom

Code:svg

from math import log2                 #導入基礎的模塊 
from random import randint,choice
def everyStep(n):       #定義一個函數
    half = n/2       
    m = 1
    #儘量知足條件的取法
    possible = []
    while True:   #無限循環
        rest = 2**m - 1   #計算使得堆的大小是2的冪次方減1
        if rest >= n:   
            break
        if rest >= half:      
            possible.append(n - rest)    #在列表中添加元素
    m += 1
    #若是至少存在一種取法使得剩餘物品數量爲2^n - 1
    if possible:    #判斷possible是否爲空列表
        return choice(possible)
    #沒法使得剩餘物品數量爲2^n - 1,隨機取走一些
    return randint(1,int(half))   #用randint取隨機數
def smartNimuGame(n):  
    while n > 1:  
        #人類玩家先走
        print('It is your turn,and we have {0} left,'.format(n))
        #確保人類玩家輸入合法的整數值
        while True:
            try:                           #經過try和except來處理可能出現的錯誤
                num = int(input('How mang do you want to take:'))
                assert 1 <= num <= n//2
                break    #跳出循環
            except:
                print('Must be between 1 and {0}'.format(n//2))
        n -= num
        if n == 1:
            return 'I fail'
        #計算機玩家拿走一些
            n -= everyStep(n)
        else:
            return 'You fail'
print(smartNimuGame(randint(1,100)))

本文分享 CSDN - Kinght_123。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。函數

相關文章
相關標籤/搜索