4

我正在尝试编写一个比较两个字符串的代码,如果找到匹配区分大小写的条件(大写除外),则返回该字符串。这就是我编写的函数,我了解到 == 非常适合区分大小写。但是,它仍然会为最后一个测试行打印一月,这不是预期的。那你能帮帮我吗?

  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")
4

3 回答 3

5

这个怎么样:

def valid_month(month):
    for x in months:
        if x[1:] == month[1:] and x[0].capitalize() == month[0].capitalize():
            print x

这将测试区分大小写的相等性 - 除了第一个字符。

于 2012-09-10T22:43:17.930 回答
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
于 2012-09-10T22:41:20.677 回答
2

capitalize将您的字符串转换为小写,但第一个字母变为大写。因此,"jaNuary".capitalize()成为"January"并且您的测试是正确的。

显然,这不是正确的做法。您可以检查除第一个以外的任何字母是否为大写:

any(t.isupper() for t in month[1:])

如果是这样,就会失败。

于 2012-09-10T22:40:09.197 回答