0

请告诉我出了什么问题,以及需要改进的其他方式

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: name 'yearout' is not defined”- 请给我解决方案和您发现的任何其他问题的答案,以及可以简化和/或改进的方法。

4

2 回答 2

1

yearoutyearc 是仅在函数中定义的名称;当您调用finalcalc()该名称时,该名称不可见,并且您收到错误消息。

dayout和有同样的问题monthout

您需要在调用之前确定值是什么yearoutdayout并且monthout应该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 教程

于 2013-02-17T10:59:54.597 回答
1

与其从其他方法顺序调用方法,不如从每个方法返回值,然后调用下一个方法来获取下一个值。

由于您似乎想将在这三个方法中计算的值传递给您的finalcalc方法,因此您需要更改方法以返回这些值 - yearoutdayoutmonthout,并将返回值存储在某个变量中。然后您可以将这些返回值用作finalcalc方法的参数:

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

print(finalcalc(yearout, dayout, monthout))

您的方法daysimp可以简单地更改为:

def daysimp(d):
    return d % 7

同样修改其他2个方法。

于 2013-02-17T11:02:55.073 回答