Python中的日期验证布尔错误?

时间:2014-04-18 19:01:25

标签: python

我决定给Python一个旋转,并建立一个虚假的数据验证器。好像我的代码总是输出错误,我认为这是因为我滥用了布尔值。

'''
Date_Validation_Testing
'''
year_conditional = False
day_conditional = False

def valid_year(year):
    if (year.isdigit()):
        year = int(year)
        if (year < 2030 and year > 1899):
            year_conditional = True
            return year_conditional


def valid_day(day):
    if (day.isdigit()):
        day = int(day)
        if (day <= 31 and day > 0):
            day_conditional = True
            return day_conditional


day = raw_input("Enter a day: ")
year = raw_input("Enter a year: ")

valid_day(day)
valid_year(year)


if (year_conditional and day_conditional):
    print("woooo!") 
else:
    print("boooo!")

3 个答案:

答案 0 :(得分:2)

您的valid_dayvalid_year函数正在返回一个值,但您从未将其分配给任何内容。您已将验证day_conditionalyear_conditional命名为与根级别相同,但它们不同,因为它们位于不同的范围内。

你有两个选择,一个比另一个好得多。更糟糕的选择是定义global day_conditional中的valid_dayglobal year_conditional中的valid_year。然后,您可以忽略return次调用,因为它会修改您已构建的条件。

你真正应该做的是:

day_conditional = valid_day(day)
year_conditional = valid_year(year)

而不是

valid_day(day)
valid_year(year)

当您致电day_conditional = valid_day(day)时,它会将day_conditional设置为valid_day返回的任何内容。

答案 1 :(得分:0)

您没有分配返回的值。你的代码应该是

day_conditional = valid_day(day)
year_conditional = valid_year(year)

这是因为命名空间在python中的工作方式。在大多数编程语言中,当找不到局部变量时,会在全局命名空间中查找它。但是在python中,如果要更改全局变量,则必须首先声明它:

def valid_day(day):
    global day_conditional
    ...

然而,这通常被认为是不好的做法。通过使用例如return来避免这种情况会更加方便和有效。

方便 - 因为在代码中清楚地知道全局变量何时以及如何被更改,而不通读函数声明。

高效 - 因为堆栈和全局变量的工作方式。访问全局变量通常比访问本地变量要长一点。

答案 2 :(得分:0)

使用全球关键字。 您必须先声明变量global才能使用它。
Global Python

year_conditional= False
day_conditional= False
def valid_year(year):
    if (year.isdigit()):
        year = int(year)
        if (year < 2030 and year > 1899):
            global year_conditional
            year_conditional = True
            return year_conditional


def valid_day(day):
    if (day.isdigit()):
        day = int(day)
        if (day <= 31 and day > 0):
            global day_conditional
            day_conditional = True
            return day_conditional


day = raw_input("Enter a day: ")
year = raw_input("Enter a year: ")

valid_day(day)
valid_year(year)


if (year_conditional and day_conditional):
    print("woooo!") 
else:
    print("boooo!")