尼姆游戏(人机对战)的Python实现

尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。

在smart模式中,计算机每次拿走一定数量的物品使得堆的大小是2的幂次方减1—也就是2,7,15,31,63等。如果有一定数量的剩余物品,计算就随机拿走一些。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 编写程序,模拟聪明版及非聪明版的尼姆游戏
# 并进行两种的比较及分析,给出聪明版比非聪明版的胜算结论
from random import randint
from math import floor


def nim_silly(n):  # 愚钝版本随机取数
    if n <= 3:
        return 1
    return randint(1, floor(n / 2))


def nim_smart(n):  # 聪明版本自动选择最佳数
    if n <= 3:
        return 1
    x = 0
    while (True):
        if pow(2, x) <= n < pow(2, x + 1):
            break
        x += 1

    num = n - pow(2, x) + 1
    if 1 <= num <= n / 2:
        return num
    else:  # 若最佳数不在范围内,则选取随机数
        return randi
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值