Python程序报错:求字符串大写字母数量及索引和功能修复
问题分析与代码修正
你的代码存在三个核心问题,导致运行报错或逻辑异常:
- 函数内部变量引用错误:函数
string的参数是s,但内部生成索引列表时用了外部的val,函数作用域内没有定义val,会触发NameError。 - 输入逻辑冲突:你既用
input()获取了字符串val,又调用函数时传入sys.argv[1](命令行参数),两者只能选其一,且如果运行程序时未传递命令行参数,sys.argv[1]会触发IndexError。 - 冗余的字典计数:用字典统计大写字母数量完全没必要,普通变量就能完成,增加了代码复杂度。
修正后的代码(使用控制台输入)
def count_upper_info(s): # 统计大写字母数量 upper_count = 0 # 收集大写字母的索引 upper_indices = [] for idx, char in enumerate(s): if char.isupper(): upper_count += 1 upper_indices.append(idx) print(f"No. of Upper case characters : {upper_count}") print(sum(upper_indices)) # 从控制台获取输入字符串 input_str = input("请输入字符串:") count_upper_info(input_str)
修正说明
- 变量作用域修复:函数内部使用传入的参数
s,通过enumerate同时遍历索引和字符,更高效地收集大写字母的索引。 - 统一输入方式:使用
input()获取用户输入,避免命令行参数的索引错误问题,更适合交互式场景。 - 简化计数逻辑:用普通变量
upper_count统计数量,同时用列表upper_indices收集索引,一次遍历完成两个任务,提升效率。
可选:使用命令行参数的版本
如果需要通过命令行传递字符串参数,可以修改为以下代码(添加参数判断,避免索引错误):
import sys def count_upper_info(s): upper_count = 0 upper_indices = [] for idx, char in enumerate(s): if char.isupper(): upper_count += 1 upper_indices.append(idx) print(f"No. of Upper case characters : {upper_count}") print(sum(upper_indices)) # 判断是否传入命令行参数 if len(sys.argv) >= 2: count_upper_info(sys.argv[1]) else: print("请在命令行后输入目标字符串,例如:python script.py \"HelloWorld\"")
内容的提问来源于stack exchange,提问作者Rose Rose
相关产品推荐
相关产品推荐

