Python3 读取未知多行输入的最佳方式
Python3 best way to read unknown multi line input
Python3 在输入量未知时读入多行用户输入的最佳方法是什么?多行输入将以Enter
分隔
当我尝试使用
while True:
line = input()
if line:
print(line)
else:
break
我收到一个 EOFError
然后如果我把它改成try-catch块
while True:
line = input()
try:
print(line)
except EOFError:
break
我仍然收到 EOFError。
EOFError
发生在调用 input()
时,而不是在测试时发生,也不是在打印时发生。所以这意味着你应该 将 input()
放在 try
子句中 :
try:
line = input()
print(line)
except EOFError:
break
也就是说,如果 input
从标准输入通道读取,您可以将其用作可迭代对象:
import sys
for line in sys.stdin:
print(line, end='')
因为每个 line
现在都以换行符 '\n'
结束,我们可以在 print
函数中使用 end=''
来防止打印换行两次(一次来自字符串,一次来自 print
函数)。
我认为最后一个版本更优雅,因为它几乎在语法上说你迭代 stdin
并单独处理行。
如果输入为空则中断循环,
a = []
while True:
user_input = input()
if user_input == '':
break
else:
a.append(int(user_input))
print(sum(a))
生产,
3
3
[Program finished]
如果你知道范围,
x, *z= [int(input()) for _ in range(3)]
print(x + sum(z))
生产,
3
4
5
12
[Program finished]
Python3 在输入量未知时读入多行用户输入的最佳方法是什么?多行输入将以Enter
分隔当我尝试使用
while True:
line = input()
if line:
print(line)
else:
break
我收到一个 EOFError
然后如果我把它改成try-catch块
while True:
line = input()
try:
print(line)
except EOFError:
break
我仍然收到 EOFError。
EOFError
发生在调用 input()
时,而不是在测试时发生,也不是在打印时发生。所以这意味着你应该 将 input()
放在 try
子句中 :
try:
line = input()
print(line)
except EOFError:
break
也就是说,如果 input
从标准输入通道读取,您可以将其用作可迭代对象:
import sys
for line in sys.stdin:
print(line, end='')
因为每个 line
现在都以换行符 '\n'
结束,我们可以在 print
函数中使用 end=''
来防止打印换行两次(一次来自字符串,一次来自 print
函数)。
我认为最后一个版本更优雅,因为它几乎在语法上说你迭代 stdin
并单独处理行。
如果输入为空则中断循环,
a = []
while True:
user_input = input()
if user_input == '':
break
else:
a.append(int(user_input))
print(sum(a))
生产,
3
3
[Program finished]
如果你知道范围,
x, *z= [int(input()) for _ in range(3)]
print(x + sum(z))
生产,
3
4
5
12
[Program finished]