2016-04-25 76 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

相關問題