python - 尝试评估大写和小写字母的短语
问题描述
我正在尝试创建一个检查短语中大小写字母数量的函数。
这是我正在使用的代码:
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)
推荐阅读
- r - 抑制 R 中的 rgdal 警告
- java - 通过 XML 配置 Spring Ehcache 3.x
- scala - 扫描系统 PATH 以获取可执行文件
- python-3.x - 分配元素后的scrapy xpath提取文本
- c# - 在 listview winform c# 中列出 S3 Bucket 键
- javascript - 在下拉列表中的 0 索引上插入值
- java - OnTouchListener webview 总是循环
- javascript - React-Native Javascript 搜索过滤功能
- python - 如何在数据框中纠正拼写错误的单词?
- r - 以最小距离连接矩阵的两个坐标