Как получить многострочный ввод от пользователя

Я хочу написать программу, которая получает многострочный ввод и работает с ним построчно. Почему нет такой функции, как 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
Другие вопросы по тегам