Python如何将函数输出作为另一函数输入?附游戏代码问题排查
问题解答
基础问题答复
可以将函数的输出作为另一函数的输入参数,你的实现思路是正确的,当前代码存在几处语法和逻辑错误导致无法正常运行。
现有代码问题汇总
- 循环计数语法错误:
inserimento函数中plays =-1是将-1直接赋值给plays,而非逐次减1,正确写法为plays -= 1,该错误会导致你输入任意游戏次数都只会执行1次就结束 - 参数传递不匹配:
choices()返回的是二元元组,直接传入game()会被识别为单个参数,和game(a,b)要求的2个位置参数不匹配,会触发参数数量错误,需对返回的元组做解包处理 - 平局逻辑无效:
game函数中判定平局后调用的choices()获取的新出拳没有参与后续判断,等于直接丢弃了输入,无法实现平局重赛的效果 - 胜负判断逻辑错误:多组胜负场景判定错误,比如a出rock、b出paper时,原代码会错误判定A获胜
- 无输入合法性校验:用户输入非rock/scissor/paper内容时,程序无任何提示也没有重新输入的逻辑
修正后完整代码
def inserimento(): plays = int(input("how many games do you want to play? \n")) while plays > 0: general() plays -= 1 return plays def general(): a, b = choices() game(a, b) def choices(): choice_a = input("A: rock, scissor or paper? \n").lower() # 输入合法性校验 while choice_a not in ["rock", "scissor", "paper"]: choice_a = input("A输入无效,请重新输入rock, scissor or paper? \n").lower() choice_b = input("B: rock, scissor or paper? \n").lower() while choice_b not in ["rock", "scissor", "paper"]: choice_b = input("B输入无效,请重新输入rock, scissor or paper? \n").lower() return choice_a, choice_b def game(a,b): # 平局处理 if a == b: print("平局,重新出拳") a, b = choices() game(a, b) return # 胜负判断 win_map = { ("rock", "scissor"): "A", ("rock", "paper"): "B", ("scissor", "paper"): "A", ("scissor", "rock"): "B", ("paper", "rock"): "A", ("paper", "scissor"): "B" } print(f"{win_map[(a,b)]} won!") inserimento()
补充说明
如果不想单独定义变量接收choices()的返回值,也可以用解包语法直接传参,写法为game(*choices()),效果和分开赋值后传参完全一致。
内容的提问来源于stack exchange,提问作者Maurizio De Poli
相关产品推荐
相关产品推荐

