Python调用user_win()缺少player、opponent位置参数报错如何解决?
问题根源
- 你的
user_win()函数定义时要求传入player(玩家选择)、opponent(对手选择)两个参数,但你在script()里调用user_win()时没有传入任何值,所以触发参数缺失报错 - 另外你的
play()函数目前只返回了电脑选择的提示文本,没有把玩家输入值、电脑选择值两个核心数据传出来,你就算想给user_win()传参也拿不到对应的值 - 除此之外你的代码还有几处逻辑错误会导致运行不符合预期:
user_win()返回值末尾多加了逗号,会让返回结果变成元组而非普通字符串,打印时会带多余的括号和引号- 玩家输入合法性的判断逻辑错误:
player is not 'rock' or 'paper' or 'scissors'无论玩家输入什么都会判定为真,完全无法实现输入校验效果 - 输入校验的判断顺序放错了位置,就算逻辑写对也会先走输赢判断,无法触发非法输入提示
- 递归调用
script()时套了print(),会打印多余的None值
修复后可正常运行的代码
import random def play(): user = input("Enter 'rock', 'paper', or 'scissors': ").lower() computer = random.choice(['rock', 'paper', 'scissors']) # 同时返回玩家输入、电脑选择、提示文本三个值 return user, computer, f'\nThe computer randomly entered "{computer}".' def user_win(player, opponent): # 先判断输入是否合法 if player not in ['rock', 'paper', 'scissors']: return 'Oops, enter a correct word.' if (player == 'rock' and opponent =='scissors') \ or (player == 'scissors' and opponent == 'paper') \ or (player == 'paper' and opponent == 'rock'): return 'Game result: you won!\n' elif player == opponent: return 'Game result: it\'s a tie!\n' else: return 'Game result: you lost!' def script(): user_choice, com_choice, play_tip = play() print(play_tip) # 把拿到的玩家、电脑选择传入user_win print(user_win(user_choice, com_choice)) restart = input("Would you like to try again?") if restart == "yes": # 直接调用即可,不用套print script() if restart == "no": print("Thank you for playing.") # 启动游戏 script()
核心修改说明
- 调整
play()函数的返回值,同时输出后续判断输赢需要的玩家、电脑选择数据 - 修正输入合法性的判断逻辑,同时调整判断顺序优先校验输入
- 移除返回值末尾多余的逗号,保证返回字符串格式正确
- 在
script()中接收play()返回的两个选择值,传入user_win()完成调用 - 优化递归调用逻辑,避免打印多余内容
内容的提问来源于stack exchange,提问作者maud
相关产品推荐
相关产品推荐

