预防老年痴呆,写个小游戏来锻炼大脑

简介: 预防老年痴呆,写个小游戏来锻炼大脑

游戏规则


珠玑棋的规则非常简单。它分为两方:攻击方和防守方。具体流程如下:


  1. 防守方写一个4位数字,每位数字不能重复


  1. 攻击方有10次猜测的机会,在每次机会里面,攻击方可以说出一个4位数,让防守方检查。


  1. 定义两个字母 A 和 B


  1. 攻击方说出的4位数里面,每有任何一位或者多位的数字和位置都对,则 A+1。例如防守方的答案是1234,攻击方的答案是6274,那么就是2A


  1. 在第4步检查以后,如果攻击方剩下的数字里面,有一位或者多位数字,在防守方剩下的数字里面,但位置不对,则 B+1。例如防守方的数字是1234,攻击方的数字是4190,就是2B。


  1. 防守方给出 A 和 B 的值,攻击方根据这两个值修正自己的猜测数。如果10次内猜对了,那么攻击方胜利。如果超过10次都猜不对,则防守方胜利。


  1. 特别说明,在匹配数字的时候,首先检查数字和位置都对的情况。检查完成以后,再检查数字对位置不对的情况。并且这个时候,是攻击方的剩余数字从左至右依次到防守方的剩余数字中检查。每检查一个数字,就把这个数字从攻击方和防守方的数字里面同时剔除。所以对于防守方的数字1234,如果攻击方的数字为4437,那么检查结果应该是1A1B。因为一开始把数字3剔除了,攻击方剩余447,防守方剩余124.然后攻击方的第一个4和防守方的4匹配上了以后也会剔除。变成攻击方剩余47,防守方剩余12.此时防守方已经没有4了。


在这个游戏规则里面,防守方的作用仅仅是检查结果而已,并没有攻防对抗,所以我们可以用程序来代替防守方。



Python 实现


首先我们来生成防守方的4位数字。由于4位数字不相等,所以我们使用 Python 的随机数来生成:


import random
data = [str(x) for x in range(10)]
random.shuffle(data)  # shuffle 会直接修改列表本身,所以不用赋值
if data[0] == '0':  # 如果首尾为0,那么取后四位
    answer = data[-4:]
else: # 首尾不为0,取前4位
    answer = data[:4]


由于要检查的数据通过 input 输入,所以为了保持类型一致,我们都使用字符串来表示。


运行效果如下图所示:


1.png


接下来,让玩家连续进行10次尝试,每次输入一个4位数:


for i in range(1, 11):
    while True:
        guess = input(f'进行第{i}次尝试,请输入一个4位数:')
        if len(guess) == 4:
            break
        print('请输入4位数。')


运行效果如下图所示:


2.png


接下来,首先检查位置和数字都正常的情况:


def match_num_and_position(guess, answer):
    A = 0
    for guess_num, answer_num in zip(guess, answer): # 逐位检查攻击方和防守方的答案数字
        if guess_num == answer_num:
            A += 1
        else:
            guess_left_num.append(guess_num)
            answer_left_num.append(answer_num)
    return guess_left_num, answer_left_num


这里,使用zip来同时迭代guessanswer,从而实现逐位一一对应检查。


接下来,我们来寻找数字对,但位置不对的情况:


def match_num(guess, answer):
    B = 0
    for num in guess:
        if num in answer:
            B += 1
            answer.remove(num)  # .remove 是一个原地操作,不需要赋值
    return B


这个代码就比较简单了。把guess剩下的数字一个一个到答案剩下的数字里面去查询,如果找到了,B 就加1.然后从答案里面删除这个数字。接着查找 guess 的下一个数字。

完整的代码如下图所示:


3.png


如果10次猜测都失败了,运行效果如下图所示:




如果才对了,运行效果如下图所示:

5.png

计算过程如下图所示:


6.jpg


至此,珠玑棋的命令行版本就完成了。希望这个小游戏能帮助大家锻炼一下大脑。



参考资料

[1]

“珠玑棋”: https://www.bilibili.com/video/BV1Zg411j7PM?from=search&seid=12099065957511854031



请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
自我反思和毒汤
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/81836711   定期的自我反思,可以在短时间内,调整自己的心态和方向。
1517 0
|
传感器 人工智能 自动驾驶
机器人大牛Rodney Brooks体验Cruise无人车:避开「可怕」街区,难以应对施工场景
机器人大牛Rodney Brooks体验Cruise无人车:避开「可怕」街区,难以应对施工场景
114 0
职场人伤害了“上司” 怎样弥补
        由于工作中的失误,或者平时不注意自己的言行“伤害”、“得罪”了自己的上司,怎么办呢?   在职业生涯中这种问题尽量不要发生。
745 0
|
2月前
|
人工智能 自然语言处理 算法
“幽灵职位”泛滥:招聘广告背后的真相与求职者的困境
“幽灵职位”泛滥:招聘广告背后的真相与求职者的困境
|
7月前
|
存储 供应链 安全
安全人士可以从CrowdStrike事件中汲取的五点教训
CrowdStrike错误更新导致全球范围Windows蓝屏事件已经发酵数日,该事件被业内人士看作是“历史上最大规模系统崩溃事件”,震惊了整个世界。 这次事件并非是某个国家级黑客组织或大师级黑客的杰作,而是CrowdStrike更新文件的一个错误,导致包括机场、银行、政府甚至紧急服务在内的大量关键基础设施系统因蓝屏死机而瘫痪。 以下是安全专业人士从这次事件中可以汲取的五点重要教训:
|
1月前
|
人工智能 前端开发 架构师
2025年前端局势分析,我该不该转行?
2024年,前端领域经历了快速变化,AIGC的兴起和市场HC减少使得前端工程师面临挑战。尽管AI工具如通义灵码和Cursor能高效生成代码,但AI无法完全取代前端工程师,因其缺乏逻辑、沟通和创新能力。前端工作不仅限于编码,还包括需求分析、代码评审等。未来,前端不会“死亡”,而是持续演变。面对大环境的压力,提升综合能力、拥抱变化、持续学习和保持身心健康是关键。转型方向包括升管理、做架构师或转讲师等。稳住2025年,需适应变化、不断学习并探索更多可能性。
252 16
|
人工智能 iOS开发 黑灰产治理
冲破90天教育“黑盒”,是在线教育们自己的高考
都说教育行业是逆周期发展的,但今年的在线教育却也在遭遇“倒春寒”。

热门文章

最新文章