2016-04-25 127 views
1
def set_values(): 
    cycle_num = input("Cycle Amount: ") 
    probability = input("Probability: ") 
    main_menu() 
    return cycle_num, probability 
def display_values(cycle_num, probability): 
    print(cycle_num) 
    print(probability) 
def main_menu(): 
    user_choice = input("Choose option 1 or 2") 
    if user_choice == "1": 
     set_values() 
    else: 
     display_values(cycle_num, probability) 
if __name__ == main_menu(): 
    main_menu() 

我很努力地使用另一个函数中设置的变量。我必须指出我是python的新手。我怎么能做这个工作。提前致谢。如何使用另一个函数中设置的变量

+3

想想你可能想了解变量作用域。 http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules - 不会伤害阅读有关返回变量。 –

+0

您正在调用set_values(),它返回两个值,但不存储这些值。他们被丢弃。我第二@ ChristopherSchneider的建议是你做一些阅读。 –

+0

感谢您的评论 - 我花了一些时间以前查找过类似的问题,但似乎无法让我们在我的实际代码中工作(比我提供的例子复杂得多) – Matt

回答

3

有没有一些错误:

  • 应该if __name__=='__main__'
  • 你让一个递归在set_values
  • 正如在评论中提到调用main_menu()当你set_values返回两个值,但不使用他们
  • 你将不得不使用global关键字来得到这个工作,这在很多时候是一个坏主意
  • 也许你需要退出程序以适当方式(如选择“3”)

尝试是这样的:

def set_values(): 
    cycle_num = input("Cycle Amount: ") 
    probability = input("Probability: ") 
    return cycle_num, probability 

def display_values(cycle_num, probability): 
    print("Cycle Amount: ", cycle_num) 
    print("Probability: ", probability) 

def main_menu(): 
    cycle_num=0 
    probability=0 

    while True: 
    user_choice = input("Choose option 1, 2 or 3") 
    if user_choice == "1": 
     cycle_num, probability=set_values() 
    elif user_choice == "2": 
     display_values(cycle_num, probability) 
    else: 
     break 

if __name__ == '__main__': 
    main_menu() 
+0

'if __name__ == main_menu():'工作 – Matt

+1

Python 3中没有'raw_input'。 – Blender

+0

@Blender:谢谢,忘记我说的。编辑我的回答 –

2

您遇到的scope概念的问题。当您调用函数​​时,您将分配两个变量并将它们返回到它们从中调用的原始函数。这部分是正确的。

你遇到问题的地方在于你的main_menu()函数没有对这些值做任何事情。既然你不存储它们,它们就会消失。一个简单的解决方案是:

def set_values(): 
    cycle_num = input("Cycle Amount: ") 
    probability = input("Probability: ") 
    return cycle_num, probability 

def display_values(cycle_num, probability): 
    print(cycle_num) 
    print(probability) 

def main_menu(): 
    while True: 
     user_choice = input("Choose option 1 or 2 (ctrl-c exits): ") 

     if user_choice == "1": 
      cycle_num, probability = set_values() 
     elif user_choice == "2": 
      display_values(cycle_num, probability) 

if __name__ == '__main__': 
    main_menu() 
+0

我以前试过,它重新运行选项1,我不想它做。 – Matt

+0

这给出了一个错误 – Matt

+0

@Matt:我的道歉,我没有注意到你没有循环代码。现在应该更好,我的机器上没问题。 – Jacobm001

相关问题