单行命令修正段落大小写:代码仅能大写段落首字母求助
段落大小写自动修正问题解决方案
你的代码无法正确识别句子开头并转换大写的核心问题在于条件判断逻辑错误:
原代码中in_text[i-1] != '.' or in_text[i-2] != ' '的逻辑会导致绝大多数场景都进入小写分支,只有当in_text[i-1]是句号且in_text[i-2]是空格时才会触发大写,但额外的in_text[i].islower()条件又进一步限制了大写触发的场景,同时也没有考虑!、?这类其他句子结束标点,以及句号后多个空格的情况。
改进后的代码
def fix_case(in_text): if not in_text: return "" # 初始化结果列表,首字符大写 result = [in_text[0].upper()] # 标记下一个非空格字符是否需要大写 new_sentence = False for char in in_text[1:]: # 遇到句子结束标点,标记下一个字符需要大写 if char in {'.', '!', '?'}: result.append(char) new_sentence = True # 处于新句子状态时,空格直接保留 elif new_sentence and char.isspace(): result.append(char) # 新句子的第一个非空格字符,转大写并取消标记 elif new_sentence: result.append(char.upper()) new_sentence = False # 其他字符统一转小写 else: result.append(char.lower()) return ''.join(result)
代码说明
- 通过
new_sentence状态变量跟踪是否需要将下一个非空格字符大写,逻辑更清晰 - 支持
.、!、?三类常见的句子结束标点 - 自动处理句号后多个空格的情况,只将第一个非空格字符转为大写
- 除句子开头和原标点外,其他字符统一转为小写,符合标准的大小写规范
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

