如何在Python中进行区分大小写的字符串比较?

时间:2012-09-10 22:37:02

标签: python string

我正在尝试编写一个比较两个字符串的代码,如果找到匹配除了大写字母的区分大小写的条件,则返回字符串。这是我写的函数,我已经知道==非常适合比较区分大小写。然而,它仍然打印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")

3 个答案:

答案 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:])

如果是这样则会失败。