Python初学者开发Steal/Deal博弈游戏时if语句无法正常执行如何解决?
问题分析与代码修正
现有代码存在3个核心错误:
- 电脑选择赋值逻辑错误:
print()函数返回值为None,当前写法会导致computer变量存储空值,无法拿到电脑的实际选择用于后续判定。 - 用户输入未归一化:用户输入的是
s/d/q或全拼小写字符串,和电脑生成的Steal/Deal首字母大写的标准格式不统一,直接对比必然匹配失败。 - 判定条件逻辑错误:
sd是存储选项的列表,拿用户输入字符串和整个列表对比永远不成立,也缺少胜负判定的分支逻辑。
修正后可运行代码
import random selection = 'Steal Deal or Quit' sd = ["Steal", "Deal"] # 处理用户输入并归一化 human = input('Steal, Deal or Quit [s|d|q]?:').lower() print(" ") human_choice = "" if human in ('steal', 's'): human_choice = sd[0] elif human in ('deal', 'd'): human_choice = sd[1] elif human in ('quit', 'q'): human_choice = selection.split(" ")[3] print(f'You chose: {human_choice}') if human_choice == 'Quit': exit() # 生成电脑选择 computer_choice = random.choice(sd) print(f'Comp chose: {computer_choice}') # 胜负判定 if human_choice == computer_choice: if human_choice == 'Steal': print('双方都选择Steal,双双落败!') else: print('双方都选择Deal,平局双赢!') else: if human_choice == 'Steal' and computer_choice == 'Deal': print('你选择Steal,电脑选择Deal,你获胜!') else: print('你选择Deal,电脑选择Steal,你落败!')
逻辑说明
- 先对用户输入做归一化处理,无论用户输入缩写还是全拼、大写还是小写,都统一转为和电脑输出一致的标准格式
Steal/Deal/Quit - 先生成电脑的选择存储到变量中再打印,确保后续判定能拿到正确的电脑选项
- 按照给出的规则实现了全场景的胜负判定逻辑
内容的提问来源于stack exchange,提问作者McFez
相关产品推荐
相关产品推荐

