吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 826|回复: 3
收起左侧

[学习记录] Python:谁能赢得最后的糖块?

[复制链接]
fcz1116 发表于 2023-3-17 14:52
​第一步:
如果现在有10块糖,两人轮流拿,每人只能拿1到2块糖,谁拿到了最后的糖块,谁胜出。请设计一个程序进行人机游戏,保证机器每次都赢。
第二步:
继续完善上面的案例,要求1)可以通过屏幕输入设置糖块的个数;2)对人为输入的糖块进行合理性判断,如果不是1块或者2块,要求重新输入。根据输入糖块的总数判断机
器先拿还是人先拿,总之最终保证经过多轮游戏之后,机器胜出。
问题分析:
决定赢取决于最后,最后机器拿即可,因此,最后拿1或2,所以过程就是补全3的过程,即1+2,因此,人拿2,机器拿1,人拿1,机器拿2,开始的时候如果是3的倍数,人先拿,这样最后就是机器拿,不是3的倍数就机器先拿,使其成为3的倍数,这样无论如何都可以使机器获胜。
为了防止人的输入错误,因此列出如下代码:


[Python] 纯文本查看 复制代码
choice=eval(input("请输入是否选择输入糖果数量(1-输入 0-默认10)"))
if(choice):
    n=eval(input("请输入糖果数量,一个大于0的整数"))
    while(n<=0 or not isinstance(n, int)):
        n=eval(input("格式错误,请重新输入糖果数量,一个大于0的整数"))
else:
    n=10
t=int(n%3)
if(t):
    print("机器先拿糖,拿走%d块"%t)
else:
   t=eval(input("你先拿糖,请拿走糖果数量(1或2):"))
n-=t
print("剩余%d块"%n)
t=n%3
if(t):
    print("机器拿糖,拿走%d块"%t)
    n-=t
    print("剩余%d块"%n)
while(n):
   t=eval(input("请输入拿走糖果数量(1或2):"))
   while(t!=1 and t!=2):
       t=eval(input("输入错误,请重新输入拿走糖果数量(1或2):"))
   n-=t;
   print("剩余%d块"%n)
   t=3-t
   print("机器拿糖,拿走%d块"%t)
   n-=t
   print("剩余%d块"%n)
print("机器获胜")



内师大
20计科汉一
指导老师:希闰高娃

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
jstar + 1 + 1 用心讨论,共获提升!
languor + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dleo 发表于 2023-3-17 18:14
这个难道不是一个奥数题? 海盗金币
hc1jy 发表于 2023-3-19 00:17
本帖最后由 hc1jy 于 2023-3-19 00:20 编辑

eval这个函数还是建议不要让用户可以控制输入,因为这个函数可以进行命令执行,有些安全隐患
你可以试试在你的第一个输入里输入  __import__(“os”).system(“dir”)
612.png
 楼主| fcz1116 发表于 2023-3-20 17:10
hc1jy 发表于 2023-3-19 00:17
eval这个函数还是建议不要让用户可以控制输入,因为这个函数可以进行命令执行,有些安全隐患
你可以试试 ...

感谢提醒
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表