背景
学以致用,这一直是对自己的要求,技术自叹不如人,还是好好搬砖吧。
对于【石头剪子布】的游戏,大家肯定不陌生,之前住在一起的小伙伴,每次决定谁去给大家带饭的时候,就选的是石头剪子布,为了防止作弊,我们用的是微信里的【石头剪子布】。
本次主要是实现判断逻辑,图形界面的,本人对Web之类的不了解,暂时在需求之外。
实现
需求如下:
os: windows10
python:3.4.3
代码如下:
# -*— encoding = utf-8 -*-
import sys
import string
import random
# date: 2016-9-28
menuDict = {1:"剪子", 2:"石头", 3:"布"}
# compare both choice
def cpmResult(opt):
print("-" * 10)
print("你的选择: {}".format(menuDict[opt]))
computer_choice = random.randrange(1, 4)
print("电脑的选择: {}".format(menuDict[computer_choice]))
if opt == computer_choice:
print("-->比赛结果: 平局")
elif (opt>computer_choice and opt - 1 == computer_choice) or (opt+2==computer_choice):
print("-->比赛结果: 你赢")
else:
print("-->比赛结果: 电脑赢")
print("-" * 10)
# make sure game is continue
def isContinuePlay():
replay = input("是否继续[Y/y,N/n]: ").strip()
if replay in ("Y", "y", "N", "n"):
if replay.lower() == "n":
print("-->你选择结束游戏!")
sys.exit(0)
else:
RSFGame()
else:
print("Invalid choice, try again.")
isContinuePlay()
# game construcation
def RSFGame():
while True:
propt = input("""
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: """).strip()
if propt in ("0", "1", "2", "3"):
opt = int(propt)
if opt == 0:
print("-->你选择结束游戏!")
sys.exit(0)
else:
cpmResult(opt)
isContinuePlay()
else:
print("Invalid option. try again.")
if __name__ == '__main__':
RSFGame()
测试结果:
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: df
Invalid option. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: fg
Invalid option. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: f
Invalid option. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: e
Invalid option. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 4
choose number out of range. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 34
choose number out of range. try again.
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 3
----------
你的选择: 布
电脑的选择: 剪子
-->比赛结果: 电脑赢
----------
是否继续[Y/y,N/n]: df
Invalid choice, try again.
是否继续[Y/y,N/n]: y
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 2
----------
你的选择: 石头
电脑的选择: 布
-->比赛结果: 电脑赢
----------
是否继续[Y/y,N/n]: y
是否继续[Y/y,N/n]: y
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 3
----------
你的选择: 布
电脑的选择: 剪子
-->比赛结果: 电脑赢
----------
是否继续[Y/y,N/n]: df
Invalid choice, try again.
是否继续[Y/y,N/n]: sdf
Invalid choice, try again.
是否继续[Y/y,N/n]: y
这是一个石头剪子布的游戏,请根据提示选择:
1.剪子
2.石头
3.布
0.退出游戏
请选择[0--3]: 2
----------
你的选择: 石头
电脑的选择: 石头
-->比赛结果: 平局
----------
是否继续[Y/y,N/n]: n
-->你选择结束游戏!
问题点总结:
1. 对于python,刚开始自学,查看API的能力还是比较弱,意识不足。
2.此次代码调试中,关于S.isdigit(),刚开始写成了【propt.isdigit】,输入字符就一直报错。最后查看了API,原来是自己少了括号导致的。
不加的场合,当输入字母的话,会抛出如下异常: python ValueError: invalid literal for int() with base 10: '***'
--- over ---