「已注销」 2022-04-21 14:53 采纳率: 79.3%
浏览 193
已结题

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 "电脑输了"

  • 写回答

3条回答 默认 最新

  • 溪风沐雪 2022-04-21 15:29
    关注

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

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 4月21日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测