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

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