由两个人玩“抢30”游戏,游戏规则是:第一个人先说“1”或“1,2”,第二个人要接着往下说一个或两个数,然后又轮到第一个人,再接着往下说一个或两个数。
这样两人反复轮流,每次每个人说一个或两个数都可以,但是不可以连说三个数,谁先抢到30,谁得胜。
在大家不知情的情况下,不管先说后说,都有赢的可能性,但游戏里潜藏着人为可控的必胜因素。还可以发现,失败者报1个数,获胜者就报2个数;失败者报2个数,获胜者就只报1个数。所以获胜者总能迅速报数。
结论:如果有人利用数学规律掌握了必胜的秘诀,巧妙设计,就可以做到每战必赢,这个游戏其实是不公平的。
下面直接上代码:
########################
import random
def input_num(t):# 定义输入函数
a = int(input("请开始输入1或者2:"))
while a > 2 or a < 1 or a + t > 30:
if a > 2 or a < 1 or a + t > 30:
print("输入错误,请重新输入!")
else:
print("你输入的是 %d" % (t + a))
a = int(input("请输入:"))
print("你输入的是: %d" % (t + a))
return t + a # 返回当前已经取走的数的累加和
def copu(s):# 计算谁会胜利
c = 0
print("电脑输入: ", end="")
if (s + 1) % 3 == 0: # 若剩余的数的模为1,则取1
s = s + 1
print(s)
else:
if (s + 2) % 3 == 0:
s = s + 2 # 若剩余的数的模为2,则取2
print(s)
else:
c = random.randint(1, 2) # 否则随机取1或2
s = s + c
print(s)
return s
if __name__ == "__main__":
tol = 0
print("***********抢30游戏开始 **************")
# 取随机数决定机器和人谁先走第一步。若为1,则表示人先走第一步
if (random.randint(1, 2) == 1):
tol = input_num(tol)
while tol != 30: # 游戏结束条件
tol = copu(tol)
if tol == 30: # 计算机取一个数,若为30则机器胜利
print("机器胜利!")
else:
tol = input_num(tol)
if tol == 30: # 人取一个数,若为30则人胜利
print("人胜利 !")
print("************游戏结束********************")
########################
执行结果如下:
***********抢30游戏开始 **************
电脑输入: 2
请开始输入1或者2:3
输入错误,请重新输入!
请输入:2
你输入的是: 4
电脑输入: 6
请开始输入1或者2:1
你输入的是: 7
电脑输入: 9
请开始输入1或者2:2
你输入的是: 11
电脑输入: 12
请开始输入1或者2:1
你输入的是: 13
电脑输入: 15
请开始输入1或者2:2
你输入的是: 17
电脑输入: 18
请开始输入1或者2:1
你输入的是: 19
电脑输入: 21
请开始输入1或者2:2
你输入的是: 23
电脑输入: 24
请开始输入1或者2:1
你输入的是: 25
电脑输入: 27
请开始输入1或者2:2
你输入的是: 29
电脑输入: 30
机器胜利!
************游戏结束********************
________________END______________
网友评论