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
相关产品推荐
相关产品推荐

