You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python程序报错:求字符串大写字母数量及索引和功能修复

问题分析与代码修正

你的代码存在三个核心问题,导致运行报错或逻辑异常:

  1. 函数内部变量引用错误:函数string的参数是s,但内部生成索引列表时用了外部的val,函数作用域内没有定义val,会触发NameError。
  2. 输入逻辑冲突:你既用input()获取了字符串val,又调用函数时传入sys.argv[1](命令行参数),两者只能选其一,且如果运行程序时未传递命令行参数,sys.argv[1]会触发IndexError。
  3. 冗余的字典计数:用字典统计大写字母数量完全没必要,普通变量就能完成,增加了代码复杂度。

修正后的代码(使用控制台输入)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:01:08