2021-06-19

本文介绍了一个实现聪明版尼姆游戏的Python程序,玩家与计算机按规则轮流拿走物品,目标是避免拿走最后一个。程序使用了while循环、异常处理和递归函数,计算机采取特殊策略使堆大小为2的幂次方减1,增加了游戏的挑战性。通过这个游戏,读者可以理解尼姆游戏规则、循环结构和异常处理在编程中的应用。

聪明的尼姆游戏

聪明的尼姆游戏(人机对战)
实验目的:
(1)理解尼姆游戏规则
(2)了解并熟练使用while循环
(3)理解带else子句的循环结构执行流程
(4)理解循环语句的break语句的作用
(5)了解使用循环和异常处理结构对用户输入进行约束的用法
实验内容:
尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1——也就是3,7,15,31或63.除了堆的大小已经是2的幂次方减1,在其他情况下这样走都是符合游戏规则。在那种情况下,计算机就按游戏规则随机拿走一些。
编写程序,模拟聪明版的尼姆游戏。


from math import log2
from fandom import randint

def ever_step(n):
    num = n - (2 ** int(log2(n)) - 1)
    half = n // 2
    if num <= half:
        return num
    return randin(1,half)
def smart(n):
    while n < 1:
        print("你的回合,还剩下{}物品".format(n))
        while True:
            try:
                num = int(input("你要拿走的数量:"))
                assret 1 <= num <= n//2
                break
            except:
                pass
        n -= num
        if n == 1:
            return "我输了"
        n -= every_step(n)
    else:
        return"你输了"
print(smart(randint(1,100)))

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值