Python学习(2)(猜拳小游戏)
是对于基本数据类型和分支的简单应用
import random # 使用字典保存数字与手势之间的对应关系 choices = { 1: "石头", 2: "剪刀", 3: "布" } # 电脑随机选择 1、2、3 中的一个数字 pc = random.randint(1, 3) # 获取玩家输入 pl = int(input("请输入你的选择(1:石头,2:剪刀,3:布):")) # 判断输入是否有效 if pl not in choices: print("输入错误,请输入 1、2 或 3。") else: print(f"电脑出了:{choices[pc]}") print(f"你出了:{choices[pl]}") # 判断玩家是否获胜 if ( (pl == 1 and pc == 2) or (pl == 2 and pc == 3) or (pl == 3 and pc == 1) ): print("你赢了!") # 玩家和电脑选择相同 elif pl == pc: print("平局!") # 其他情况都是玩家失败 else: print("你输了!")1. 导入随机数模块
import randomrandom是 Python 提供的随机数模块。
在这个小游戏中,我们需要让电脑随机选择石头、剪刀或布,因此要先导入它。
2. 建立数字和手势的对应关系
choices = { 1: "石头", 2: "剪刀", 3: "布" }这里定义了一个字典choices:
- 数字
1对应“石头”; - 数字
2对应“剪刀”; - 数字
3对应“布”。
有了这个字典,我们就可以通过数字获得对应的手势名称:
print(choices[1]) # 石头 print(choices[2]) # 剪刀 print(choices[3]) # 布3. 让电脑随机选择
pc = random.randint(1, 3)random.randint(1, 3)会随机生成一个从1到3的整数,并且包含1和3。
生成的结果被赋值给变量pc。这里的pc表示电脑的选择。
4. 获取玩家输入
pl = int(input("请输入你的选择(1:石头,2:剪刀,3:布):"))input()用来接收玩家输入,但它得到的内容默认是字符串。
例如,玩家输入1时,实际得到的是字符串"1"。因此需要使用int()将它转换成整数1:
"1" → 1转换后的结果被赋值给变量pl,表示玩家的选择。
5. 检查输入是否有效
if pl not in choices: print("输入错误,请输入 1、2 或 3。")如果玩家输入的数字不在choices字典中,说明玩家没有输入1、2或3。
例如输入5,程序就会提示输入错误。
6. 显示双方的选择
print(f"电脑出了:{choices[pc]}") print(f"你出了:{choices[pl]}")这里使用了 Python 的 f-string 格式化字符串。
假设:
pc = 2 pl = 1那么输出就是:
电脑出了:剪刀 你出了:石头7. 判断玩家是否获胜
if ( (pl == 1 and pc == 2) or (pl == 2 and pc == 3) or (pl == 3 and pc == 1) ): print("你赢了!")玩家获胜有三种情况:
pl == 1 and pc == 2玩家出石头,电脑出剪刀。
pl == 2 and pc == 3玩家出剪刀,电脑出布。
pl == 3 and pc == 1玩家出布,电脑出石头。
其中:
and表示两个条件必须同时成立;or表示多个条件中只要有一个成立即可。
8. 判断是否平局
elif pl == pc: print("平局!")如果玩家和电脑选择的数字相同,就表示双方出了相同的手势,因此是平局。
9. 判断失败
else: print("你输了!")如果不属于获胜和平局的情况,就说明玩家输了。
四、原代码中的问题
原来的获胜判断是:
if pl == 1 and pc == 2 or pl == 2 and pc == 3or pl == 3 or pl == 1:主要有两个问题。
第一个问题是3or中间没有空格,可能导致语法错误,应写成:
pc == 3 or第二个问题是最后的判断写成了:
pl == 3 or pl == 1这意味着只要玩家出布或者石头,就可能直接判定获胜,没有正确判断电脑出了什么。
正确写法应该是:
pl == 3 and pc == 1完整的获胜条件是:
if ( (pl == 1 and pc == 2) or (pl == 2 and pc == 3) or (pl == 3 and pc == 1) ):五、运行示例
请输入你的选择(1:石头,2:剪刀,3:布):1 电脑出了:剪刀 你出了:石头 你赢了!通过这个小游戏,我们练习了:
input()获取用户输入;int()转换数据类型;random.randint()生成随机数;- 字典保存对应关系;
if、elif和else判断条件;and和or组合多个条件;- f-string 格式化输出内容。
