如何将变量从一个函数传递到另一个函数并在 python 的条件语句中使用它们?

How do I pass variables from one function to another and use them in conditional statements in python?

提问人:Jace Barnett 提问时间:3/22/2022 更新时间:3/22/2022 访问量:958

问:

我是一般编程的新手,甚至是 python 的新手。我才开始几天。我正在研究一个我知道很简单的问题,但我越是修补它,它似乎就越糟糕。

从本质上讲,我正在尝试做的是从函数 a 中的条件创建一个变量,我可以将其传递给其他函数。我一直在尝试这样做,以便在世界上最简单的角色扮演游戏中创建类似的角色创建屏幕。然而,尽管游戏很简单,但我很快就陷入了困境。我决定保持我所追求的精神,但有一个更简单的例子。

现在,我只是想把一顿饭放在一起。

def entree():
    options = "1) steak\n2) burger"
    print(options)
    entree_selection = int(input("Pick one."))
    if entree_selection == 1:
        entree_choice = "steak"
        side_dish()
    elif entree_selection == 2:
        entree_choice = "burger"
        side_dish()


def side_dish():
    entree_choice = entree()
    print(f"You chose {entree_choice}.")
    print("Now choose your side.")
    options = "1) baked potato\n2) green beans"
    print(options)
    side_selection = int(input("Pick one."))
    if side_selection == 1:
        side_choice = "baked potato"
        dessert()
    elif side_selection == 2:
        side_choice = "green beans"
        dessert()


def dessert():
    entree_choice = entree()
    side_choice = side_dish()
    print(f"So far we have {entree_choice} and {side_choice}.")
    print("How about dessert?")
    options = "1) cake\n2) ice cream"
    print(options)
    dessert_selection = int(input("Pick one."))
    if side_selection == 1:
        dessert_choice = "cake"
        your_meal()
    elif side_selection == 2:
        dessert_choice = "ice cream"
        your_meal()


def your_meal():
    entree_choice = entree()
    side_choice = side_dish()
    dessert_choice = dessert()
    print(
        f'You will be having {entree_choice} with {side_choice} and {dessert_choice}')


entree()
side_dish()
dessert()
your_meal()

对我来说,问题是函数 a 一遍又一遍地重复,而从未运行过函数 b

老实说,我已经忘记了我尝试过的所有事情。我已经尝试了至少 10 种来自 YouTube 的东西,并且至少从这里尝试了相同的数量。

python 函数 变量 条件语句 参数传递

评论

0赞 spen.smith 3/22/2022
您需要返回您的值。您目前没有退回任何内容。实际上,添加 或 。目前它们都不是。return your_meal()return dessert()
0赞 spen.smith 3/22/2022
此外,您还在 .如果你要“逐步完成”你的程序,你会问他们的主菜,然后你会得到他们的答案。伟大!然后你会问他们的side_dish,但你会再次问他们的主菜。您只需要执行此操作一次。side_dish
0赞 Jace Barnett 3/22/2022
@spen.smith 你能指定在哪里放置退货,因为我已经使用过它们,而且它根本没有改变我的结果。显然,我在错误的地方或错误的方式使用它们。请记住,我在这里有几个小时的编码经验。至于“在side_dish中重新运行您的顶级函数”评论,我假设您指的是“entree_choice = entrée()”这一行,我认为这看起来很奇怪,但这就是我在 YouTube 上看到的一些人这样做的方式。如果我没有在那里指定,side_dish如何从函数主菜中获得“entree_choice”?
0赞 spen.smith 3/22/2022
嘿@Jace,我在下面改写了。如果有帮助,请告诉我。
0赞 Jace Barnett 3/22/2022
@spen.smith 这正朝着正确的方向前进,并且有点增强信心,因为这是我在 YouTube 带我走上另一条路之前乘坐的火车。我遇到的问题,并且仍然在您的选择中遇到,是当尝试传递给多个函数或从多个其他函数接收函数时。

答:

0赞 Chad S. 3/22/2022 #1

你缺少的是函数的“返回值”的概念。首先将任务分解为离散的单元。以你的示例为例,程序将首先运行该函数,并将该函数的结果设置为变量 entree_choice。但要使其正常工作,该函数需要有一个(或多个)或类似的类型语句。这就是程序的不同部分相互“通信”的方式:通过参数和函数的返回值。your_mealentree()entreereturn 'steak'

另请注意,如果您调用 entrée,然后 entrée 调用 side_dish 然后调用 side_dish 然后调用 entrée,那么程序将永远不会停止循环(这是您描述的问题)。

0赞 spen.smith 3/22/2022 #2

函数 A 正在重复,因为在函数 A 结束时,您调用函数 B,而在函数 B 开始时,您调用函数 A。这将重新启动您的循环。

函数 B 始终在运行,它只是永远无法完成,因为您已请求函数 B 始终重新运行函数 A。

为了不重复,您不能请求重新运行 .side_dishentree

def side_dish():
    entree_choice = entree() # this is the problem
    print(f"You chose {entree_choice}.")
    print("Now choose your side.")

相反,将 as 变量传递到您的 .entree_choiceside_dish

def side_dish(entree_choice):
    print(f"You chose {entree_choice}.")
    print("Now choose your side.")

为了继续这个例子,你将创建一个甜点函数,它接受你之前的两个选择。


def dessert(entree_choice, side_choice):
    print(f"So far we have {entree_choice} and {side_choice}.")
    print("How about dessert?")

这自然而然地将我们带到了最终功能:


def your_meal(entree_choice, side_choice, dessert_choice):

    print(
        f'You will be having {entree_choice} with {side_choice} and {dessert_choice}')


综上所述,我建议采用略有不同的实现方式。基本上,有一个“控制器”。这个东西在一个层面上控制着所有的逻辑。

entree_choice = entree()
side_choice = side_dish()
dessert_choice = dessert()
print(f'You will be having {entree_choice} with {side_choice} and {dessert_choice}')

为了实现这一点,有两件事:

  1. 修改您的底层函数,使其不询问侧面选择。相反,让控制器询问。entree
  2. 返回他们选择的主菜。
def entree():
    options = "1) steak\n2) burger"
    print(options)
    entree_selection = int(input("Pick one."))
    if entree_selection == 1:
        entree_choice = "steak"
        return entree_choice
    elif entree_selection == 2:
        entree_choice = "burger"
        return entree_choice

评论

0赞 Jace Barnett 3/22/2022
这确实对一些人有所帮助。我实际上是在等待您的善意回应时这样做的,因为这是我在 YouTube 上看到的另一种方式。这就是我最初在游戏中尝试的方式。但是这种方法让我卡住的地方是当我们到达第三个和/或第四个函数时。如何将变量从多个函数传递到一个函数。即甜点如何从主菜和side_dish接收?
0赞 spen.smith 3/22/2022
嘿 Jace,为了让它按照你编写的方式运行,你将继续传递这些值,增加“arity”,即提供给函数的参数数量。
0赞 Jace Barnett 3/22/2022
非常好。我能够追踪到这一点。它现在在我这边工作得很好。这意味着我已经准备好回到我更复杂的游戏代码并应用这些概念。谢谢你不居高临下,乐于助人,灌输信心。非常感谢。
0赞 spen.smith 3/22/2022
你敢打赌杰斯。这就是我们来这里的原因!
1赞 Jace Barnett 3/22/2022
我很高兴地说,我能够成功地编辑我的代码,并结合了你的“控制器”。最棒的是,我现在可以同时使用这两种方法。耶!