2012-09-10 131 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

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

相關問題