python 中的名称错误和函数

NameErrors and functions in python

我不断收到 NameError 虽然我已经定义了一个术语,但问题出在第 28 行的 "day"。

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() 中给了 day 一个值,对吧?为什么我被告知它没有定义?

您在函数中分配的名称是 locals;它们在函数之外是不可见的。

共享该结果的最佳方法是 return 函数的值,这样您就可以将其作为调用结果分配给变量:

def today():
    # ...
    return day

result = today()

result 变量然后保存函数 returned 的值。您也可以在那里自由使用名称 day,但那是一个独立于函数内部变量的变量。

你在这里使用递归函数调用确实使事情复杂化;然后您还需要确保沿链传递递归调用的结果:

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

不过,这里最好不要依赖递归;一个简单的无限循环会做得更好; return从函数中调用会自动结束循环:

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

        # input was valid, return the result
        return day