​第一步:
如果现在有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计科汉一
指导老师:希闰高娃 |