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

Python文本统计程序故障求助:行数、词数、元音数统计异常

问题排查与修复方案

原代码核心问题

  • 行读取逻辑错误:for line in fileIn已经逐行迭代文件内容,内部又调用fileIn.readline(),会跳过奇数行,导致行数统计少一半。
  • 词数统计偏差:line.split(" ")会把连续空格、制表符等拆出空字符串,导致词数多算,应该用无参数的line.split()(自动忽略任意空白字符)。
  • 总统计逻辑混乱:原代码把总统计放在else分支(空行判断),完全错误,应该在每一行处理时就累加总行数、总词数、总元音数;且原总元音统计是判断单词是否包含元音,而非统计每个单词里的元音总数,逻辑完全错误。
  • 文件不存在处理缺失:原代码未实现输入文件不存在时引导重新输入的功能,需要用os.path.exists判断文件是否存在。
  • 元音统计代码冗余:逐个字母count重复且繁琐,可以统一处理大小写后统计。

修复后的代码

import os

# 处理文件输入,直到用户输入存在的文件
while True:
    filename = input("File name: ")
    if os.path.exists(filename):
        break
    print("File does not exist, please try again.")

fileIn = open(filename, 'r')
fileOut = open("answer.txt", 'w')

numLines = 0
totVowels = 0
totWords = 0
vowels = 'aeiouAEIOU'  # 定义所有元音字符

for line in fileIn:
    numLines += 1
    # 统计行词数:split()自动处理任意空白,过滤空字符串
    line_words = line.split()
    numWords = len(line_words)
    # 统计行元音数:遍历每个字符,判断是否是元音
    numVowels = 0
    for char in line:
        if char in vowels:
            numVowels += 1
    
    # 写入行统计结果
    fileOut.write(f"Line number: {numLines}\n")
    fileOut.write(f"Number of vowels in line {numLines}: {numVowels}\n")
    fileOut.write(f"Number of words in line {numLines}: {numWords}\n\n")
    
    # 累加总统计
    totWords += numWords
    totVowels += numVowels

# 写入总统计结果
fileOut.write("+++++++++++++++++\n")
fileOut.write(f"Total number of vowels in file: {totVowels}\n")
fileOut.write(f"Total number of words in file: {totWords}\n")

print("answer.txt file created.")
fileIn.close()
fileOut.close()

修复说明

  1. 文件输入处理:用while循环结合os.path.exists判断文件是否存在,直到用户输入有效文件名。
  2. 行读取修复:移除内部的fileIn.readline(),直接使用for line in fileIn迭代每一行,确保所有行都被处理。
  3. 词数统计修复:使用line.split()替代line.split(" "),正确统计单词数量(自动忽略空格、制表符、换行符等空白)。
  4. 元音统计优化:定义元音字符串vowels,遍历行内每个字符判断是否为元音,简化代码且逻辑正确;同时在行处理时直接累加到总元音数,无需额外循环。
  5. 总统计逻辑修正:每处理一行就累加总词数和总元音数,最后统一写入底部,逻辑清晰正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:27:47