You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:06:08