Python检查布尔值

时间:2016-04-28 14:23:15

标签: python

months = ['January',
      'February',
      'March',
      'April',
      'May',
      'June',
      'July',
      'August',
      'September',
      'October',
      'November',
      'December']
checker = False
def valid_month(month):
    for mon in months:
        if mon.lower() == month.lower():
            print mon
            checker = True

    print "out of the loop, checker = " + str(checker)
    if checker is False:
      print None

print valid_month("jaNuary")

这应该只打印一月。 但由于某种原因,输出看起来像这样:

January
out of the loop, checker = True
None

检查器是真的,那为什么它会传递if语句?这是"如果检查者是假的:"

6 个答案:

答案 0 :(得分:3)

您不会从valid_month返回值。在函数结束时,添加

def valid_month(month):
    #existing code here

    return checker

您还应该将checker = False带入您的功能。

答案 1 :(得分:1)

请注意,您可以使用calendar模块创建小写月份名称 - >正确月份名称的映射,然后将其用作打印的查找,例如:

from calendar import month_name

VALID_MONTHS = {m.lower(): m for m in month_name[1:]}

def valid_month(month):
    return VALID_MONTHS.get(month.lower())

print valid_month('JaNuary')

答案 2 :(得分:1)

整个事情可以简化为一行,没有需要列表理解,就像在其他答案中一样。

print "jaNuary".capitalize() in months

答案 3 :(得分:0)

您不需要所有这些循环。使您的valid_month方法看起来像这样:

def valid_month(month):
    return month.lower() in [m.lower() for m in months]

if valid_month("jaNuary"):
    print("jaNuary")

答案 4 :(得分:0)

当其他答案陈述时,您需要从函数中返回一些内容,以便打印Pdf以外的其他内容。

您目前正在打印无,因为None返回None,因此最终valid_month语句将打印返回值。

话虽如此,这里还有另一个问题:

在全局范围内初始化函数外部的变量时,不能对函数中的变量执行任何操作。

如果要修改或访问全局变量,则需要使用

启动函数
print

其中global var_name 是变量名。

或者您可以将变量放入函数中,因为在其他任何地方都不需要它,并且应该从函数返回,作为一般的最佳实践。

答案 5 :(得分:0)

您可以使用一行替换整个内容。说month = jaNuaRY

status = "valid" if month.lower() in months else "invalid"

因此months中的条目应如上所述。如果您不确定,那么,

status = "valid" if month.lower() in (m.lower() for m in months) else "invalid"