2015-04-04 116 views
0

我不斷得到一個NameError雖然我已經定義的術語,問題是與「天」上線28NameErrors和功能蟒蛇

def today(): 
    day = input("What day is it?") 

    if "sunday" in day: 
     day = 0 
    elif "monday" in day: 
     day = 1 
    elif "tuesday" in day: 
     day = 2 
    elif "wednesday" in day: 
     day = 3 
    elif "thursday" in day: 
     day = 4 
    elif "friday" in day: 
     day = 5 
    elif "saturday" in day: 
     day = 6 

    else: 
     today() 
today() 

days_on_vacation = int(input("How many days will you be on vacation? ")) 

days_to_add_to_day = days_on_vacation % 7 

day += days_to_add_to_day 

我已經在功能today()了一天的值對?爲什麼我被告知它沒有被定義?分配給一個函數

回答

3

名稱是當地人;它們在功能之外是不可見的。

分享這一結果,最好的辦法是回報從函數的值,這樣就可以把它分配給一個變量作爲調用的結果:

def today(): 
    # ... 
    return day 

result = today() 

result變量然後保存函數返回的值。您可以自由使用名稱day,但那是一個與函數內部單獨的變量。

您通過使用遞歸函數調用使事情變得複雜化;那麼你還需要確保你通過在遞歸調用的結果一起鏈回:

def today(): 
    # ... 
    else: 
     return today() 
    return day 

然而,最好不要在這裏依靠遞歸;一個簡單的無限循環會做得更好;從函數返回將自動結束循環:

def today(): 
    while True: 
     day = input('...') 
     # ... 
     else: 
      # not valid input, restart the loop 
      continue 

     # input was valid, return the result 
     return day 
+0

完整的規則是,你分配給任何地方的名稱是局部的,當前的局部範圍之外不可見的,除非'global'或'nonlocal'另有規定。對於類體和exec()編碼也是如此。出現一些混淆,因爲模塊本地人也是模塊的全局變量 – 2015-04-04 20:58:14