2017-01-12 9 views
5

शोध के अच्छे समय के बाद, मैं यह नहीं ढूंढ पाया कि यह कोड कैपिटल अक्षरों को वाक्य में कैपिटल अक्षरों की गणना क्यों करता है, लेकिन "0" पूंजी अक्षरों की गणना करेगा यदि मैं कोई वाक्य दर्ज करना चाहता हूं जिसमें कोई लोअरकेस है पत्र, जैसे: "Hello World"यह कोड केवल तभी काम करता है जब इनपुट सभी पूंजी अक्षरों में होता है?

message = input("Enter your sentence: ") 

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

शायद आपकी जांच के बाद से 'if message.isupper()' का मतलब है: 'यदि c.isupper() '? – alfasin

+0

'योग (मानचित्र (str.isupper, संदेश))' –

उत्तर

9

क्योंकि आपके if खंड में स्थिति त्रुटिपूर्ण है; isupper विधि रिटर्न Trueयदि दिए गए स्ट्रिंग में सभी वर्ण अपरकेस रहे हैं:

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

documentation for str.isupper देखें:

वापसी Trueअगर str में सभी मामलों पात्रों अपरकेस जाता है और वहाँ पर है str, False में कम से कम एक cased चरित्र।

(जोर मेरा)

जब से तुम message.isupper(() साथ message पर जाँच कर रहे हैं इस False हर समय 0 की राशि में जिसके परिणामस्वरूप वापस आ जाएगी।

message.isupper() के साथ पूर्ण संदेश की जाँच कर के बजाय, अपने if एक प्रति चरित्र के आधार पर if c.isupper() के साथ हर message में c के लिए उपयोग करें: तथ्य का लाभ

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

तुम भी लग सकता है कि True कृत्यों की तरह 1 और False0 की तरह थोड़ा नीचे ट्रिम करने के लिए है कि अगर आप चाहते हैं:

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

या, यदि आप कार्यात्मक दृष्टिकोण, map अपने इनपुट के लिए समारोह की तरह:

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

यहां तक ​​कि इन हो सकता है, हालांकि, आत्मगत, अच्छे लग रहे; वे मूल दृष्टिकोण (और थोड़ा कम कुशल भी) से अधिक रहस्यमय होते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे