提问人:Jace Barnett 提问时间:3/22/2022 更新时间:3/22/2022 访问量:958
如何将变量从一个函数传递到另一个函数并在 python 的条件语句中使用它们?
How do I pass variables from one function to another and use them in conditional statements in python?
问:
我是一般编程的新手,甚至是 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 的东西,并且至少从这里尝试了相同的数量。
答:
你缺少的是函数的“返回值”的概念。首先将任务分解为离散的单元。以你的示例为例,程序将首先运行该函数,并将该函数的结果设置为变量 entree_choice。但要使其正常工作,该函数需要有一个(或多个)或类似的类型语句。这就是程序的不同部分相互“通信”的方式:通过参数和函数的返回值。your_meal
entree()
entree
return 'steak'
另请注意,如果您调用 entrée,然后 entrée 调用 side_dish 然后调用 side_dish 然后调用 entrée,那么程序将永远不会停止循环(这是您描述的问题)。
函数 A 正在重复,因为在函数 A 结束时,您调用函数 B,而在函数 B 开始时,您调用函数 A。这将重新启动您的循环。
函数 B 始终在运行,它只是永远无法完成,因为您已请求函数 B 始终重新运行函数 A。
为了不重复,您不能请求重新运行 .side_dish
entree
def side_dish():
entree_choice = entree() # this is the problem
print(f"You chose {entree_choice}.")
print("Now choose your side.")
相反,将 as 变量传递到您的 .entree_choice
side_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}')
为了实现这一点,有两件事:
- 修改您的底层函数,使其不询问侧面选择。相反,让控制器询问。
entree
- 返回他们选择的主菜。
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
评论
上一个:在 python 中使用 globals() 操作变量
下一个:重新同化变量
评论
return your_meal()
return dessert()
side_dish