石头剪刀布
项目说明
本项目我们尝试用Python语言设计一个计算机程序来模拟“石头剪刀布”的双人对决游戏。对垒的甲乙双方同时任意喊“石头剪刀布”中的一种(名称或代码),然后按照游戏规则“石头打剪刀,布包石头,剪刀剪布”来判定哪边玩家赢。假如我们用数字代码0、1、2分别表示石头、剪刀、布,则甲乙双方对决的结果也可以用对应数字代码的差值来表示,
我们注意到:甲方-乙方的差为2或-1时甲方获胜;当差为0时,双方打成平手;当差为1或-2时乙方获胜。
该游戏的程序文件名称为RockScissorsPaper.py,程序将用到import、def、if/elif/else、return等Python关键词,也会用到print( )、random.randrange( )等Python函数,还会用到变量、数学表达式、逻辑表达式、字符串表达式、自定义函数、代码格式、注释等Python语言的一些特性。
通过该项目你可以获得以下能力:
窥视计算机的工作原理
问题分解并分而治之的技巧
缜密的逻辑推理
用数字代码映射具体事物使之便于计算的技巧
解决问题的步骤
下面是完整代码
"""
石头剪刀布游戏
该程序的关键点是把“石头”、“剪刀”、“布”映射为以下数字:
石头 - 0
剪刀 - 1
布 - 2
"""
import random # 包含random.randrange(start, stop)函数的模块
# 定义辅助函数
def name_to_number(name):
# 用if/elif/else将name转换为对应数字代码,-1表示name无效
if name == "石头":
return 0
elif name == "剪刀":
return 1
elif name == "布":
return 2
else:
return -1 # 无效的name返回-1
def number_to_name(number):
# 用if/elif/else将数字代码number转换为对应的字符名称,number无效时返回"无效"
pass
# 代码写在这里
if number==0:
return'石头'
elif number==1:
return'剪刀'
elif number==2:
return'布'
else:
return'无效'
# 程序从此执行
while True:
print("石头剪刀布游戏开始!")
print("输入'石头'、'剪刀'或'布',输入'结束'游戏结束。")
cmd = input("请出拳: ")
if cmd == '结束':
print("游戏结束。")
break
player_number = name_to_number(cmd)
if player_number == -1:
print("出拳无效,游戏重新开始。")
print("--------------------------------------\n")
continue
print("你出的拳是:" + cmd)
computer_number = random.randrange(0, 3) # 电脑随机出拳
print("电脑出的拳是:" + number_to_name(computer_number))
# 计算player_number和computer_number之差对3的模
diff_mod_three = (player_number - computer_number) % 3
# 用if/elif/else判定输赢结果,并输出结果信息
if diff_mod_three == 0:
print("你和电脑平手!")
print("--------------------------------------\n")
elif diff_mod_three == 1:
print("电脑获胜!")
print("--------------------------------------\n")
else:
print("你获胜!")
print("--------------------------------------\n")