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

Python中EOF终止循环问题求助——基于UVA 272 TEX Quotes题目

在Python中处理EOF终止循环的解决方法

嘿,我完全懂你遇到的困扰!在Python里处理EOF结束循环的方式确实和C/C++不太一样,但其实有两种非常实用的方法,刚好能适配你做UVA 272题目时的需求,而且改动很小就能让你的代码正常工作。

方法一:捕获EOFError异常(适配input()逐行读取)

如果你习惯用input()来逐行获取输入,那可以通过捕获EOFError来终止循环——当输入流到达末尾时,input()会抛出这个异常,我们只需要捕获它并跳出循环就行。结合你TEX Quotes的逻辑,代码可以这么写:

quote_flag = True
while True:
    try:
        line = input()
        # 你的字符处理逻辑
        result = []
        for char in line:
            if char == '"':
                result.append("``" if quote_flag else "''")
                quote_flag = not quote_flag
            else:
                result.append(char)
        print(''.join(result))
    except EOFError:
        # 遇到EOF就终止循环
        break

在本地测试时,你可以用Ctrl+Z(Windows)或者Ctrl+D(Linux/macOS)手动输入EOF,触发异常后循环就会停止,和你C语言里的操作逻辑一致。

方法二:直接遍历sys.stdin(更简洁的逐行处理方式)

Python的sys.stdin是一个可迭代对象,我们可以直接用for循环遍历它的每一行,当到达EOF时循环会自动终止,不需要额外处理异常,这种写法更简洁高效,特别适合处理UVA这类需要读取大量输入的场景:

import sys

quote_flag = True
for line in sys.stdin:
    result = []
    for char in line:
        if char == '"':
            result.append("``" if quote_flag else "''")
            quote_flag = not quote_flag
        else:
            result.append(char)
    # 用end=''避免额外换行,保证输出和输入格式一致
    print(''.join(result), end='')

这种方式不需要手动处理EOF,循环会在输入流结束时自然停止,UVA的评测系统会自动处理输入流的EOF,所以提交后完全能正常运行。

既然你的代码逻辑已经完全正确,只需要把循环终止部分换成上面两种方式之一,应该就能顺利AC啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:04:20