如何统计输入单词的字母数并找出最长单词?附代码求助
问题分析与修正方案
你的代码核心问题是字母数统计逻辑错误,以及退出指令被误统计,以下是具体修正:
核心错误点
count = name.index(name)完全错误:str.index()是查找子串在字符串中的起始位置,查找自身永远返回0,导致所有单词计数都是0,根本没统计到真实字母数。- 输入'E'时会把'E'加入字典,最终统计最长单词时会包含这个退出指令,不符合需求。
正确实现方式
统计单词字母数直接用Python内置的 len() 函数即可,它会返回字符串的长度(即字母个数)。同时调整循环逻辑,避免把退出指令计入统计:
names = {} while True: name = input("Enter a name. Enter E to end. ").strip() # 先判断是否退出,不区分大小写 if name.upper() == 'E': break # 处理空输入,避免无效数据 if not name: print("请输入有效的单词,不要留空") continue # 统计字母数并存入字典 letter_count = len(name) names[name] = letter_count # 处理未输入任何单词的情况 if not names: print("你没有输入任何单词") else: print("你输入的单词及其字母数:", names) # 找到字母数最多的单词(按值排序取最大) longest_word, max_count = max(names.items(), key=lambda item: item[1]) print(f"最长的单词是:{longest_word.upper()},有 {max_count} 个字母")
关键修改说明
- 用
len(name)替代错误的索引查找,这是获取字符串长度的标准方法。 - 把退出判断放在最前面,输入'E'或'e'直接退出,不会将其加入统计字典。
- 增加空输入过滤,避免空字符串被误统计。
- 使用
names.items()直接遍历键值对,通过max()的key参数指定按字母数排序,简洁高效。 - 增加空字典判断,防止未输入单词时调用
max()报错。
内容的提问来源于stack exchange,提问作者jjk
相关产品推荐
相关产品推荐

