堆里有 16 颗豆子,有两个玩家(假设一个玩家是电脑) 。每个玩家都可以从堆中的 16 颗豆子中取出 1 颗, 2 颗或者 3 颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最后 一颗豆子的玩家是输家。 思路: 写一个人取豆子的函数 ; 帮电脑设计一个算法,实现取豆子的函数 ; 在主程序中进行输流调用,谁 最后拿到 1 粒豆子谁就输。
算法设计:
取出的豆子设为变量beans
电脑取出记为bean1
玩家取出记为bean2
每次完成取豆,beans+,并且返回beans结果,传递给下一个玩家
当beans为16时,游戏结束
(一)玩家开挂,简单模式
电脑先取,玩家后取
电脑完全随机,玩家手动输入
代码:
1 | import random |
(二)电脑开挂,困难模式
- 玩家先来,电脑后取
- 电脑在beans<12时随机,否则使beans逼近15
代码:但是如果取出的豆子为11,遇上聪明玩家电脑必输1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import random
# beans为取出的豆子数
beans = 0
def computer(beans):
#bea1 = (16-beans)%4
#将取出的豆子数逼近15
if(beans < 12):
bean1 = random.randint(1, 3)
if(beans == 12):
bean1 = 3
if(beans == 13):
bean1 = 2
if(beans >= 14):
bean1 = 1
print("电脑取出",bean1)
beans += bean1
print("现在已经取出",beans)
return beans
def play(beans):
bean2 = int(input("请玩家取豆,只能取1,2,3"))
print("玩家取出",bean2)
beans += bean2
print("现在已经取出", beans)
return beans
while(int(beans) < 16):
# 要想电脑赢,电脑应该后取
beans = play(beans)
if(int(beans) >= 16):
print("玩家输了")
break
beans = computer(beans)
if (int(beans) >= 16):
print("电脑输了")
取出11 电脑 1 玩家 3 电脑 1—–》电脑输了
取出11 电脑 2 玩家 2 电脑 1—–》电脑输了
取出11 电脑 3 玩家 1 电脑 1—–》电脑输了