问题描述
这是我正在使用的代码:
def letter_counter(a):
'''A function to sort the letters in a string'''
print('The phrase "' + a + '" has: \n')
upper_case = []
lower_case = []
string_to_list = list(a)
for ltr in string_to_list:
if ltr == ltr.lower():
string_to_list.remove(ltr)
lower_case.append(ltr)
elif ltr == ltr.upper():
string_to_list.remove(ltr)
upper_case.append(ltr)
else:
pass
print('Lower Case Letters: ' + str(len(lower_case)))
print('Upper Case Letters: ' + str(len(upper_case)))
letter_counter('My name is Earl.')
这是结果:
The phrase "My name is Earl." has:
Lower Case Letters: 7
Upper Case Letters: 1
我做错了什么?
解决方法
您可以使用 sum,一个生成器表达式,也可以使用 str.islower 和 str.isupper:
print("Lower Case Letters",sum(1 for ch in phrase if ch.islower()))
print("Upper Case Letters",sum(1 for ch in phrase if ch.isupper()))
无论如何,如果你想让你的代码工作,你应该改变你的循环。 首先,您应该避免同时在您正在浏览的列表中执行删除操作。 此外,您应该检查 ltr 是否真的是一个字母,而不是例如空格或点。
for ltr in string_to_list:
if ltr == ltr.lower() and ltr.isalpha():
lower_case.append(ltr)
elif ltr == ltr.upper() and ltr.isalpha():
upper_case.append(ltr)