Python代码统计大写字母及索引数异常问题求助
问题分析与代码修正
原代码的核心错误
命令行参数处理错误
sys.argv[1:]返回的是参数列表,直接转字符串会把列表的结构符号(方括号、逗号、单引号)都包含进统计范围。比如输入Hello World时,str(sys.argv[1:])会生成"['Hello', 'World']",这次统计结果巧合正确,但本质逻辑错误,遇到复杂输入必然出问题。函数逻辑完全失效
c_upper函数中return upper写在循环之前,导致循环代码从未执行,直接返回初始值0。你提到的异常输出19、57应该是混淆了两次统计的结果,实际这个函数根本不会产生非0输出。冗余重复统计
代码里做了两次逻辑相同的统计,完全没必要。
修正后的代码
import sys # 将命令行参数拼接为完整的输入文本 input_text = ' '.join(sys.argv[1:]) def count_upper_chars(s): upper_count = 0 for char in s: if char.isupper(): upper_count += 1 return upper_count # 统计并输出大写字母数量 print(count_upper_chars(input_text))
修正说明
- 用
' '.join(sys.argv[1:])替代str(sys.argv[1:]):把所有命令行参数用空格连接,还原用户输入的原始文本,避免统计列表结构符号。 - 调整函数结构:将
return语句移到循环之后,确保循环能遍历所有字符并统计大写字母。 - 移除冗余代码,让逻辑更清晰。
测试验证
- 输入
Hello:输出1,符合预期。 - 输入
Hello World. Its a great day!:输出3,符合预期。 - 输入
aAe_0Ia eIaoeUYQ!:输出6,符合预期。
如果你原本想统计大写字母的索引位置(而非数量),可以用以下代码:
import sys input_text = ' '.join(sys.argv[1:]) def get_upper_indices(s): return [idx for idx, char in enumerate(s) if char.isupper()] upper_indices = get_upper_indices(input_text) print(f"大写字母数量:{len(upper_indices)}") print(f"大写字母索引:{upper_indices}")
内容的提问来源于stack exchange,提问作者Kdoyle73
相关产品推荐
相关产品推荐

