2012-09-10 128 views
4

我想写一个比较两个字符串的代码,并返回字符串,如果找到匹配除大写以外的区分大小写的条件。这是我写的函数,我已经知道==对于区分大小写比较好。但它仍然打印1月份的最后一个测试线,这不是预期的。那么你能帮我吗?如何在Python中进行区分大小写的字符串比较?

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") 
+1

你打电话给大写传入的字符串使其成为“资本” –

回答

5

如何:

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

这将测试与区分大小写相等 - 第一个字符除外。

2

capitalize将您的字符串为小写但成为大写的第一个字母。所以,"jaNuary".capitalize()变成"January",你的测试是正确的。

很明显,这不是正确的做法。你可以检查,但第一个任意字母是否是大写:

any(t.isupper() for t in month[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 
+0

但我想他想匹配'january' –

+0

@JoranBeasley我想我错过了,我认为在这种情况下'如果月和月[0] .capitalize()+ month [1:]在几个月内:'会做得很好。 –

+1

是的,它很容易解决......但值得一提 –

相关问题