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

如何统计独立txt文件句子中的Acronyms(首字母缩略词)数量 代码问题求助

代码错误点排查
  • 文件指针耗尽问题:你调用file.read()一次性读取了全部文件内容后,文件指针已经移动到文件末尾,后续的for line in file不会读取到任何内容,缩略词统计的循环完全没有执行,所以acronyms一直是0。
  • 循环逻辑冗余错误:就算循环能执行,你外层遍历file的行,内层却遍历全部text的单词,相当于每一行都要把整个文件的单词统计一遍,会出现重复计数的问题,且外层的行遍历完全没有存在必要。
  • 缩略词判断逻辑缺陷:直接用word.isupper()判断缩略词不合理:一是带标点的大写缩略词(比如NATO.、FBI?)会返回False,二是单个大写字母(比如句子开头的I)会被误算成缩略词,正常首字母缩略词至少需要2个连续大写字母。
  • 无效代码问题:
    1. 你已经用text.count('?')统计了问题数量,后面循环里的questions += questions完全无效,初始questions是0,加多少次都是0,而且这个变量最后也没有被打印。
    2. 使用with open语法会自动关闭文件,末尾的file.close()是多余操作,还会抛出异常。
    3. import re放在with块内部不符合编码规范,且你注释掉了正则相关代码,这个导入完全没用。
  • 多余类型转换问题:num_questions = str(text.count('?'))没必要转成字符串,count返回的是整数,直接打印即可。
修正后可正常运行的代码
# 导入模块放在代码开头
import re

# 初始化计数变量
questions = 0
acronyms = 0

with open('file.txt', "r", errors='ignore') as file:
    text = file.read()
    # 统计问题数量
    questions = text.count('?')
    # 拆分所有单词,自动处理多空格、换行符
    words = text.split()
    for word in words:
        # 正则匹配:至少2个连续大写字母,允许中间带点,兼容U.S.A这类常见缩略词格式
        if re.search(r'([A-Z]\.?){2,}', word):
            acronyms += 1

print("Number of questions:", questions)
print("Number of acronyms:", acronyms)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:48:02