我在UVa OJ上遇到了这个问题。272-Text Quotes
总的来说,这个问题非常简单。但问题在于我无法读取输入。输入以文本行的形式提供,输入结束标志为EOF。 在C/C ++中,可以通过while循环来完成:
while( scanf("%s",&s)!=EOF ) { //do something }
如何在Python中实现这一点?
我已经在网上搜索了,但没有找到令人满意的答案。
请注意,输入必须从控制台读取,而不是从文件中读取。
我在UVa OJ上遇到了这个问题。272-Text Quotes
总的来说,这个问题非常简单。但问题在于我无法读取输入。输入以文本行的形式提供,输入结束标志为EOF。 在C/C ++中,可以通过while循环来完成:
while( scanf("%s",&s)!=EOF ) { //do something }
如何在Python中实现这一点?
我已经在网上搜索了,但没有找到令人满意的答案。
请注意,输入必须从控制台读取,而不是从文件中读取。
sys
模块:import sys
complete_input = sys.stdin.read()
sys.stdin 是一个类似文件的对象,您可以像处理Python 文件对象一样对待它。
根据文档:
Help on built-in function read:
read(size=-1, /) method of _io.TextIOWrapper instance Read at most n characters from stream.
Read from underlying buffer until we have n characters or we hit EOF. If n is negative or omitted, read until EOF.
sys
和os
模块从控制台读取输入直到文件结尾。我已经在像SPOJ这样的在线评测系统中多次使用这些方法。
第一种方法(推荐):
from sys import stdin
for line in stdin:
if line == '': # If empty string is read then stop the loop
break
process(line) # perform some operation(s) on given string
\n
。如果您想避免在打印line
时打印2个换行符,请使用print(line, end='')
。import os
# here 0 and 10**6 represents starting point and end point in bytes.
lines = os.read(0, 10**6).strip().splitlines()
for x in lines:
line = x.decode('utf-8') # convert bytes-like object to string
print(line)
while True:
line = input()
if line == '':
break
process(line)
如果您仍在使用Python 2,请将input()
替换为raw_input()
。
针对HackerRank和HackerEarth平台,以下实现方式是首选:
while True:
try :
line = input()
...
except EOFError:
break;
while True:
try :
line = input()
...
except EOFError:
pass
getch
的实现方式:Python read a single character from the user。