2017-01-12 28 views
5

經過一段時間的研究之後,我一直無法找到爲什麼這些代碼在大寫時都會計算大寫字母,但如果要輸入包含任何小寫字母的句子,則會計算大寫字母"0"字母,如:"Hello World"爲什麼只有當輸入全部是大寫字母時,這段代碼纔會起作用?

message = input("Enter your sentence: ") 

print("Capital Letters: ", sum(1 for c in message if message.isupper())) 
+7

可能因爲你的檢查是'如果message.isupper()'你的意思是檢查:'如果c.isupper()'? – alfasin

+0

'sum(map(str.isupper,message))' –

回答

9

由於您的if子句中的條件存在缺陷;該isupper方法返回True如果給定的字符串中的所有字符大寫:

>>> "UPPER".isupper() 
True 
>>> "UPPEr".isupper() 
False 

documentation for str.isupper

返回True如果str所有套管字符大寫並沒有在str中至少有一個裝入字符,否則爲False

(重點煤礦)

既然你在message檢查與message.isupper(()這將返回False導致0總和的所有時光。

而是與message.isupper()上完整的郵件檢查,對每個字符爲基礎使用ifif c.isupper()爲每cmessage:的事實

print("Capital Letters: ", sum(1 for c in message if c.isupper())) 

你也可以利用該True行爲像1False0稍微減少下來,如果你想要:

print("Capital Letters: ", sum(c.isupper() for c in message)) 

或者,如果你喜歡功能性的方法,map功能您輸入:

print("Capital Letters: ", sum(map(str.isupper, message))) 

即使這些可能,主觀上看起來更好;他們通常比原來的方法更神祕(而且效率也稍低)。