我正在尝试编写一个比较两个字符串的代码,如果找到匹配除了大写字母的区分大小写的条件,则返回字符串。这是我写的函数,我已经知道==非常适合比较区分大小写。然而,它仍然打印1月的最后一个测试线,这是预期的。你能帮帮我吗?
months = ['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
def valid_month(month):
for x in months:
if x==month.capitalize() :
print x
测试代码:
valid_month("january")
valid_month("January")
valid_month("foo")
valid_month("")
valid_month("jaNuary")
答案 0 :(得分:5)
这个怎么样:
def valid_month(month):
for x in months:
if x[1:] == month[1:] and x[0].capitalize() == month[0].capitalize():
print x
这将测试与区分大小写的相等性 - 第一个字符除外。
答案 1 :(得分:3)
因为"janUAry".capitalize()
等于"January"
In [4]: "January"=="janUAry".capitalize()
Out[4]: True
更好的代码版本可以是:
def valid_month(month):
if month and month[0].capitalize()+month[1:] in months:
print(month)
else:
print(month,"is not found")
<强>输出:强>
>>> valid_month("january")
january
>>> valid_month("January")
January
>>> valid_month("foo")
foo is not found
>>> valid_month("")
is not found
>>> valid_month("jaNuary")
jaNuary is not found
答案 2 :(得分:2)
capitalize
将您的字符串转换为小写,但是第一个字母变为大写字母。因此,"jaNuary".capitalize()
变为"January"
并且您的测试是正确的。
显然,这不是正确的做法。您可以检查是否有任何字母,但第一个字母是大写:
any(t.isupper() for t in month[1:])
如果是这样则会失败。