Как получить многострочный ввод от пользователя
Я хочу написать программу, которая получает многострочный ввод и работает с ним построчно. Почему нет такой функции, как raw_input
в питоне 3?
input
не позволяет пользователю ставить строки, разделенные новой строкой (Enter), он выводит обратно только первую строку.
Можно ли сохранить его в переменной или даже прочитать в списке?
5 ответов
В Python 3.x raw_input()
Python 2.x был заменен input()
функция. Однако в обоих случаях вы не можете вводить многострочные строки, для этого вам потребуется построчно вводить данные от пользователя, а затем .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)
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)
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), чтобы сообщить об окончании. Последняя вернется после прочтения пяти строк, либо из файла, либо с терминала / клавиатуры.
Использовать input()
встроенная функция для получения строки ввода от пользователя.
Вы можете прочитать справку здесь.
Вы можете использовать следующий код, чтобы получить несколько строк одновременно (заканчивая пустой):
while input() != '':
do_thing
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