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

Python代码统计大写字母及索引数异常问题求助

问题分析与代码修正

原代码的核心错误

  1. 命令行参数处理错误
    sys.argv[1:]返回的是参数列表,直接转字符串会把列表的结构符号(方括号、逗号、单引号)都包含进统计范围。比如输入Hello World时,str(sys.argv[1:])会生成"['Hello', 'World']",这次统计结果巧合正确,但本质逻辑错误,遇到复杂输入必然出问题。

  2. 函数逻辑完全失效
    c_upper函数中return upper写在循环之前,导致循环代码从未执行,直接返回初始值0。你提到的异常输出19、57应该是混淆了两次统计的结果,实际这个函数根本不会产生非0输出。

  3. 冗余重复统计
    代码里做了两次逻辑相同的统计,完全没必要。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:45:39