python的尼姆游戏(人机对决)

请问我要怎么修改这个代码,我一直运行不出不出来,谢谢

img

from math import log2
from random import randint

def ever_step(n):
num = n - (2 ** int(log2(n)) - 1)
half = n // 2
if num <= half:
return num
return randint(1,half)

n=randint(1,101)
print(smart(n))
def smart(n):
while n > 1:
print("你的回合,还剩下{}物品".format(n))
while True:
try:
num = int(input("你要拿走的数量:"))
1 <= num <= n // 2
break
except:
pass
n = n-num
if n == 1:
return "我输了"
n = n- every_step(n)
if n==0:
return "电脑输了"

你这个代码结构和逻辑有点问题,我帮你改了一下,你看看:

from math import log2
from random import randint

def ever_step(n):
    num = n - (2 ** int(log2(n)) - 1)
    half = n // 2
    if num <= half:
        return num
    return randint(1,half)

def smart(n):
    while n > 1:
        print("你的回合,还剩下{}物品".format(n))
        while True:
            try:
                num = int(input("你要拿走的数量:"))
            except:
                pass
            if 1 <= num <= n // 2:
                n = n-num
                if n == 1:
                    return "你输了"
                pcn = ever_step(n)
                print(f'电脑拿走{pcn}个')
                n = n - pcn
                if n==0:
                    return "电脑输了"
                break
            else:
                print('最多只能拿走一半物品')
    print("你的回合,还剩下{}物品".format(n))
    return "你输了"
n=randint(1,101)
print(smart(n))

img

1 <= num <= n // 2
这是要干啥,不得if判断么,直接break啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632