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语句?这是"如果检查者是假的:"
答案 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"