2013-02-17 61 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可以简单地变更为

和你的方法。

相关问题