Python程序求助:统计姓名列表中字母'a'出现次数异常
嘿,别着急,我来帮你揪出问题所在!
你的代码核心问题是没有累加字母'a'的总数量,而且完全没必要用position变量手动索引列表——咱们一步步来修正:
问题分析
看你这段循环代码:
for t in name_list: tally = name_list[position].count('a') position = position + 1
每次循环都会把tally重新赋值为当前索引元素的'a'数量,而不是把这个数加到之前的总数上。比如第一个名字有2个'a',第二个有1个,循环结束后tally只会是1(最后一个元素的数量),而不是总和3。另外,你已经用for t in name_list遍历列表了,直接用t.count('a')就能拿到当前元素的'a'数,根本不需要手动维护position。
修正后的完整代码
terminate = False name_list = [] while not terminate: name = input('Please enter name: ') # input本身就是字符串,不用额外转str() name_list.append(name) response = input('Add more names? y/n: ') if response.lower() == 'n': # 兼容大写N的输入,更友好 terminate = True print(name_list) tally = 0 # 先初始化总数为0 for name in name_list: tally += name.count('a') # 累加每个名字里的'a'数量 # 如果要区分大小写(同时统计'A'),可以改成:tally += name.lower().count('a') print("The number of 'a' is: ", tally)
关键修改点说明
- 初始化累加变量:把
tally初始化为0,这样每次循环都能把当前名字的'a'数量加到总数上 - 简化遍历逻辑:直接用
for name in name_list遍历每个名字,不用手动维护position索引 - 优化终止判断:用
response.lower() == 'n',用户输入'N'也能正常终止程序 - 去掉冗余转换:
input()返回的本来就是字符串,不需要str()转换
更简洁的写法(可选)
如果想让代码更紧凑,还可以用生成器表达式一行算出总数:
tally = sum(name.count('a') for name in name_list)
效果和循环累加完全一样,代码更简洁。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

