Python石头剪刀布——知乎上的交互练习
- 编程知识
- 2023-09-10
- 2
Python石头剪刀布是一种简单的Python交互式练习,通过向用户展示石头、剪刀、布三个选项,要求用户选择一种选项,然后与计算机进行比较,最后根据胜负情况输出结果。本文从功能实现、代码解析和优化三方面详细阐述Python石头剪刀布。
一、功能实现
Python石头剪刀布主要实现以下三个功能:
1. 展示选项并提示用户选择
在程序开始运行时,需要展示出三个选项:石头、剪刀、布。代码如下:
option = ['石头', '剪刀', '布']
for i in range(len(option)):
print(f"{i + 1}. {option[i]}")
input_str = input("请输入选项的编号:")
运行结果如下图所示:
图1:运行结果
用户需要输入选项的编号,程序接收到输入后,需要进行检查,必须是1到3的数字,代码如下:
if input_str.isdigit() and 1 <= int(input_str) <= 3: # 输入合法
option_user = option[int(input_str) - 1]
else: # 输入不合法
print("您的输入有误,请按照提示重新输入!")
continue
如果输入不合法,则需要返回上一步并重新执行。
2. 随机生成计算机的选项
当用户确定了自己的选项后,程序需要生成计算机的选项。代码如下:
computer = random.choice(option)
print(f"计算机选择了:{computer}")
运行结果如下图所示:
图2:运行结果
3. 根据胜负情况输出结果
最后需要根据用户和计算机的选项比较结果,输出胜负情况。代码如下:
if option_user == computer: # 平局
print("平局")
elif (option_user == '石头' and computer == '剪刀') or (option_user == '剪刀' and computer == '布') or (option_user == '布' and computer == '石头'): # 用户胜利
print("恭喜你,你赢了!")
else: # 计算机胜利
print("很遗憾,你输了!")
运行结果如下图所示:
图3:运行结果
二、代码解析
Python石头剪刀布的代码其实非常简单,主要包括以下几个部分:
1. 导入模块
使用随机数生成计算机的选项需要用到random模块,代码如下:
import random
2. 定义选项
石头、剪刀、布三个选项,可以使用列表进行定义,代码如下:
option = ['石头', '剪刀', '布']
3. 展示选项并提示用户选择
使用for循环遍历选项列表,并输出选项的编号和对应的字符串。使用input函数等待用户输入,并进行校验,代码如下:
for i in range(len(option)):
print(f"{i + 1}. {option[i]}")
input_str = input("请输入选项的编号:")
if input_str.isdigit() and 1 <= int(input_str) <= 3:
option_user = option[int(input_str) - 1]
else:
print("您的输入有误,请按照提示重新输入!")
continue
4. 随机生成计算机的选项
使用random模块的choice函数,从选项列表中随机选择一个选项,作为计算机的选项,代码如下:
computer = random.choice(option)
5. 根据胜负情况输出结果
通过比较用户的选项和计算机的选项,判断胜负情况,根据胜负情况输出结果,代码如下:
if option_user == computer:
print("平局")
elif (option_user == '石头' and computer == '剪刀') or (option_user == '剪刀' and computer == '布') or (option_user == '布' and computer == '石头'):
print("恭喜你,你赢了!")
else:
print("很遗憾,你输了!")
三、优化策略
虽然Python石头剪刀布是一个简单的程序,但是也可以运用一些优化策略来提高程序的可读性和运行效率。
1. 使用枚举类型的形式定义选项
使用枚举类型来定义选项,可以使代码更加清晰明了,避免出现不合法的选项编号。代码如下:
from enum import Enum
class Option(Enum):
STONE = 1
SCISSORS = 2
CLOTH = 3
之后在输出选项列表时,可以使用enum类中的values()函数来进行遍历输出,代码如下:
for opt in Option:
print(f"{opt.value}. {opt.name}")
2. 使用字典来判断胜负情况
使用字典可以避免出现过多的if判断,提高代码的可读性。代码如下:
wins = {'石头':'剪刀', '剪刀':'布', '布':'石头'}
computer = random.choice(list(wins.keys()))
if wins[option_user] == computer:
print("恭喜你,你赢了!")
elif wins[computer] == option_user:
print("很遗憾,你输了!")
else:
print("平局")
3. 添加用户选择的次数和胜利次数
添加用户选择的次数和胜利次数的统计,可以使程序更加完善。代码如下:
option_user_total, option_user_win = 0, 0 # 用户选择的次数和胜利的次数
while True:
# 展示选项
for opt in Option:
print(f"{opt.value}. {opt.name}")
# 提示用户选择
input_str = input("请输入选项的编号:")
if input_str.isdigit() and 1 <= int(input_str) <= 3:
option_user_total += 1
option_user = Option(int(input_str))
else:
print("您的输入有误,请按照提示重新输入!")
continue
# 随机生成计算机的选项
computer = random.choice(list(Option))
# 比较用户和计算机的选项
if option_user == computer:
print("平局")
elif wins[option_user.name] == computer.name:
print("恭喜你,你赢了!")
option_user_win += 1
else:
print("很遗憾,你输了!")
# 输出胜利率
print(f"您已经进行了{option_user_total}局游戏,胜率为:{option_user_win/option_user_total:.2%}")
四、完整代码示例
import random
from enum import Enum
# 定义选项
class Option(Enum):
STONE = 1
SCISSORS = 2
CLOTH = 3
# 获胜情况
wins = {'石头':'剪刀', '剪刀':'布', '布':'石头'}
# 初始化统计数据
option_user_total, option_user_win = 0, 0
# 游戏开始
while True:
# 展示选项
for opt in Option:
print(f"{opt.value}. {opt.name}")
# 提示用户选择
input_str = input("请输入选项的编号:")
if input_str.isdigit() and 1 <= int(input_str) <= 3:
option_user_total += 1
option_user = Option(int(input_str))
else:
print("您的输入有误,请按照提示重新输入!")
continue
# 随机生成计算机的选项
computer = random.choice(list(Option))
# 比较用户和计算机的选项
if option_user == computer:
print("平局")
elif wins[option_user.name] == computer.name:
print("恭喜你,你赢了!")
option_user_win += 1
else:
print("很遗憾,你输了!")
# 输出胜利率
print(f"您已经进行了{option_user_total}局游戏,胜率为:{option_user_win/option_user_total:.2%}")