Ponieważ warunek w Twojej klauzuli if
jest wadliwy; metoda isupper
zwraca True
jeśli wszystkie znaków w danym ciągu są wielkie litery:
>>> "UPPER".isupper()
True
>>> "UPPEr".isupper()
False
Zobacz documentation for str.isupper
:
Return True
jeśli wszystkie obudowane znaków str
są wielkie litery i nie ma na przynajmniej jedna z postaci z kodami w innym przypadku.
(Kopalnia nacisk)
Skoro sprawdzania message
z message.isupper(()
ten powróci False
cały czas wynikający z sumy 0
.
Zamiast sprawdzania pełnej wiadomości z message.isupper()
, użyj if
na podstawie na charakter z if c.isupper()
dla każdego c
w message
:
print("Capital Letters: ", sum(1 for c in message if c.isupper()))
Można również skorzystać z faktu, że True
działa jak 1
i False
jak 0
lekko przyciąć, że w dół, jeśli tylko chcesz:
print("Capital Letters: ", sum(c.isupper() for c in message))
lub, jeśli chcesz podejść funkcjonalne map
funkcję na swoim wejściu:
print("Capital Letters: ", sum(map(str.isupper, message)))
Chociaż te mogą, subiektywnie, wyglądają ładniej; na ogół są bardziej tajemnicze niż oryginalne podejście (i nieco mniej wydajne).
Prawdopodobnie od kiedy twój check to 'if message.isupper()' miałeś zamiar sprawdzić: 'if c.isupper()'? – alfasin
'suma (mapa (str.isupper, wiadomość))' –