Как получить многострочный ввод от пользователя
Я хочу написать программу, которая получает несколько строк и работает с ней по строкам. Почему в Python 3 нет функции типа raw_input
?
input
не позволяет пользователю помещать линии, разделенные новой строкой (Enter), он отпечатывает только первую строку.
Может ли он храниться в переменной или даже читать его в списке?
Ответы
Ответ 1
В Python 3.x raw_input()
Python 2.x заменен функцией input()
. Однако в обоих случаях вы не можете вводить многострочные строки, для этого вам нужно будет вводить данные от пользователя по .join()
а затем .join()
с помощью \n
или вы также можете использовать различные строки и конкатенировать их, используя +
разделенных символом \n
Чтобы получить многострочный ввод от пользователя, вы можете:
no_of_lines = 5
lines = ""
for i in xrange(5):
lines+=input()+"\n"
print lines
Или
lines = []
while True:
line = input()
if line:
lines.append(line)
else:
break
text = '\n'.join(lines)
Ответ 2
raw_input
может корректно обрабатывать EOF, поэтому мы можем написать цикл, прочитать, пока мы не получим EOF (Ctrl-D) от пользователя:
Python 3
print("Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it.")
contents = []
while True:
try:
line = input()
except EOFError:
break
contents.append(line)
Python 2
print "Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it."
contents = []
while True:
try:
line = raw_input("")
except EOFError:
break
contents.append(line)
Ответ 3
input(prompt)
в основном эквивалентен
def input(prompt):
print(prompt, end='', file=sys.stderr)
return sys.stdin.readline()
Вы можете читать непосредственно из sys.stdin
если хотите.
lines = sys.stdin.readlines()
lines = [line for line in sys.stdin]
five_lines = list(itertools.islice(sys.stdin, 5))
Первые два требуют, чтобы входной конец каким-то образом либо достигли конца файла, либо пользователем, набрав Control-D (или Control-Z в Windows), чтобы сигнализировать о завершении. Последний будет возвращен после того, как будут прочитаны пять строк, будь то из файла или с терминала/клавиатуры.
Ответ 4
Используйте встроенную функцию input()
чтобы получить строку ввода от пользователя.
Вы можете прочитать справку здесь.
Вы можете использовать следующий код, чтобы получить сразу несколько строк (заканчивая пустым):
while input() != '':
do_thing
Ответ 5
no_of_lines = 5
lines = ""
for i in xrange(5):
lines+=input()+"\n"
a=raw_input("if u want to continue (Y/n)")
""
if(a=='y'):
continue
else:
break
print lines