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

Python中不使用.upper()方法实现字符串转大写及代码排查

代码存在的问题
  • 参数读取逻辑错误:循环读取命令行参数时,直接将整个参数列表sys.argv赋值给seq,没有按索引取对应位置的参数,同时把脚本自身文件名(sys.argv[0])也加入了待处理列表。
  • 返回值未接收:调用uppercase函数后没有保存返回的转换结果,最后打印的是未处理的原始参数列表,无法得到转换后的内容。
  • 字符匹配逻辑有缺陷:遍历字母表查找字符位置时,未对非字母字符做前置判断,会触发变量i未定义的报错;找到匹配字符后没有终止内层循环,存在无意义的性能损耗。
修复实现(无.upper()调用)

通过ASCII码差值转换的方式实现效率更高,小写字母a-z的ASCII码范围为97-122,对应大写字母A-Z的ASCII码范围为65-90,二者固定差值为32,小写字符减32即可得到对应大写字符:

import sys

def uppercase(seq):
    result = ''
    for char in seq:
        char_code = ord(char)
        # 判断是否为小写字母,是则转大写
        if 97 <= char_code <= 122:
            result += chr(char_code - 32)
        else:
            # 大写字母、其他字符直接保留
            result += char
    return result

if __name__ == "__main__":
    processed_seqs = []
    # 从索引1开始读取传入的序列参数,跳过索引0的脚本文件名
    for idx in range(1, len(sys.argv)):
        processed_seqs.append(uppercase(sys.argv[idx]))
    print(processed_seqs)

传入测试输入AgtGtGcC、AAtcccgG运行,输出结果为['AGTGTGCC', 'AATCCCGG'],符合转大写的预期。

如果要沿用原本的字母表映射思路,可使用更简洁的映射写法,避免多层循环:

def uppercase(seq):
    lower_chars = 'abcdefghijklmnopqrstuvwxyz'
    upper_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    result = ''
    for char in seq:
        if char in lower_chars:
            result += upper_chars[lower_chars.index(char)]
        else:
            result += char
    return result

内容的提问来源于stack exchange,提问作者Karoline Busche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:18:23