Do điều kiện trong mệnh đề if
của bạn bị thiếu sót; phương pháp isupper
trả True
nếu tất cả ký tự trong chuỗi nhất định được chữ hoa:
>>> "UPPER".isupper()
True
>>> "UPPEr".isupper()
False
Xem documentation for str.isupper
:
Return True
nếu tất cả các ký tự cased trong str
được chữ hoa và có ít ít nhất một ký tự được gắn trong str
, False
nếu không.
(tôi nhấn mạnh)
Kể từ khi bạn đang kiểm tra trên message
với message.isupper(()
này sẽ trở lại False
tất cả các thời gian dẫn đến một khoản 0
.
Thay vì kiểm tra trên thông báo đầy đủ với message.isupper()
, sử dụng if
của bạn trên một cơ sở cho mỗi nhân vật với if c.isupper()
cho mỗi c
trong message
:
print("Capital Letters: ", sum(1 for c in message if c.isupper()))
Bạn cũng có thể tận dụng thực tế là True
hành vi như 1
và False
như 0
để hơi cắt bớt nếu bạn muốn:
print("Capital Letters: ", sum(c.isupper() for c in message))
hoặc, nếu bạn thích cách tiếp cận chức năng, map
chức năng đầu vào của bạn:
print("Capital Letters: ", sum(map(str.isupper, message)))
Mặc dù những có thể, một cách chủ quan, nhìn đẹp hơn; chúng thường bí ẩn hơn cách tiếp cận ban đầu (và cũng kém hiệu quả hơn một chút).
Nguồn
2017-01-12 18:30:45
Có lẽ vì séc của bạn là 'if message.isupper()' bạn có muốn kiểm tra: 'if c.isupper()'? – alfasin
'tổng (bản đồ (str.isupper, thư))' –