这篇文章主要为大家介绍Python经典算法——常胜将军的实现过程。常胜将军就是取火柴游戏,题目描述如下:甲、乙两人玩抽取火柴的游戏,一共有21根火柴。两个人轮流取火柴,每人每次最少取1根火柴,最多可以取4根火柴,不可多取,也不能不取,谁取到最后一根火柴谁就输了。甲让乙先取火柴,结果每次都是甲获胜,甲即为“常胜将军”。
该问题可以这样思考:火柴一共有21根,甲让乙先取火柴,每次乙都会输。要让甲成为“常胜将军”,就需要每次都让乙取到最后一根火柴。因为21除以5的余数是1,所以,在甲乙双方每次取火柴的时候,甲只要保证抽取火柴的数量和乙抽取火柴的数量之和为5,就可以让自己成为“常胜将军”。
根据上面的分析,编写程序实现游戏玩家双方抽取火柴的过程,代码如下:
01 import random
02 def take_match(match):
03 id = 0 # 根据id切换玩家
04 take_num = 0 # 保存抽取火柴的数量
05 while match >= 1: # 火柴全部取完时结束循环
06 id += 1 # id值加1
07 if id % 2 == 1: # 如果id值是奇数
08 gamer = "乙" # 当前玩家为乙
09 if match > 5: # 如果火柴数多于5个
10 take_num = random.randint(1,4) # 随机抽取火柴数量
11 else:
12 take_num = 1 # 抽取最后一根火柴
13 else:
14 gamer = "甲" # 当前玩家为甲
15 take_num = 5 - take_num # 玩家甲抽取火柴数量
16 match -= take_num # 还剩多少火柴
17 # 格式化输出玩家名称、抽取火柴数量和剩余火柴数量
18 print("{:>2s}{:>11d}{:>15d}".format(gamer, take_num, match))
19 print("玩家{:3s}抽取火柴数量{:3s}剩余火柴数量".format("", ""))
20 print("-" * 34)
21 take_match(21) # 调用函数
运行结果如图所示。
以上就是“python经典教程(Python经典算法常胜将军)”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/11057/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取