2013-02-17 59 views
0

請告訴我,什麼是錯的,而其他方面,它需要改進NameError:名字「yearout」沒有定義

def finalcalc(y, d, m): 
    end = (y + d + m) % 7 
    return end 
def monthlook(m): 
    if m == 1: 
     monthout = 6 
    elif m == 2: 
     monthout = 2 
    elif m == 3: 
     monthout = 2 
    elif m == 4: 
     monthout = 5 
    elif m == 5: 
     monthout = 0 
    elif m == 6: 
     monthout = 3 
    elif m == 7: 
     monthout = 5 
    elif m == 8: 
     monthout = 1 
    elif m == 9: 
     monthout = 4 
    elif m == 10: 
     monthout = 6 
    elif m == 11: 
     monthout = 2 
    elif m == 12: 
     monthout = 4 
print(finalcalc(yearout, dayout, monthout))  
def daysimp(d): 
    dayout = d % 7 
    monthlook(monthin) 
def yearc(y): 
    y = y % 100 
    yearout = y + (y // 4) 
    yearrem = y % 4 
    if yearrem >= 2: 
     yearout += 1 
    yearout = yearout % 7 
    daysimp(dayin) 
dayin = int(input("What day in the Month?")) 
monthin = int(input("What Month Number? - Eg. January is 1")) 
yearin = int(input("What Year?")) 
yearc(yearin) 

的錯誤說:「NameError:名字‘yearout’沒有定義」 - 請給我的解決方案並解答您找到的任何其他問題,以及可以簡化和/或改進的方法。

回答

1

yearout是函數中定義的名稱yearc只有;當你打電話給finalcalc()這個名字是不可見的,你會得到你的錯誤。

您有和dayoutmonthout相同的問題。

你需要決定什麼yearoutdayoutmonthout值應該你打電話之前finalcalc()。也許你想將這些名稱設置爲其他函數的結果?那些功能則需要使用return來使這些值可供調用者使用。

例如,改變yearc函數返回新yearout值:

def yearc(y): 
    y = y % 100 
    yearout = y + (y // 4) 
    yearrem = y % 4 
    if yearrem >= 2: 
     yearout += 1 
    yearout = yearout % 7 
    return yearout 

然後存儲功能的新名稱的結果:

yearout = yearc(yearin) 

,並做了同樣的其他名稱和功能。

您確實想要再次閱讀Python tutorial on functions

+0

我該怎麼改變?就像我說的我是Python的新手。 – 2013-02-17 11:03:33

+1

@ user2080262:這裏有很多錯誤;也許你需要再仔細一點仔細閱讀你的教程? – 2013-02-17 11:06:40

1

而不是從其他方法順序調用您的方法,而應該返回每個方法的值,然後調用下一個方法來獲取下一個值。

因爲,好像你要在這三個方法計算的值傳遞到您的finalcalc方法,你需要改變你的方法返回的價值觀 - yearoutdayout,並monthout和返回值存儲在一些變量。然後你就可以使用這些返回值作爲參數傳遞給finalcalc方法:

def daysimp(d): 
    return d % 7 

同樣修改其他2種方法:

yearout = yearc(yearin) 
monthout = monthlook(monthin) 
daysout = daysimp(dayin) 

print(finalcalc(yearout, dayout, monthout)) 
daysimp可以簡單地變更爲

和你的方法。

相關問題