Командная строка Python - многострочный ввод - PullRequest
6 голосов
/ 01 мая 2011

Я пытаюсь решить проблему Крипто на https://www.spoj.pl в Python, которая включает консольный ввод.

Моя проблема в том, что строка ввода имеет несколько строк, но необходима как одна строка в программе. Если я просто использую raw_input () и вставляю (для тестирования) текст в консоль, Python угрожает ему, как будто я нажимал ввод после каждой строки -> мне нужно вызывать raw_input () несколько раз в цикле.

Проблема в том, что я не могу каким-либо образом изменить строку ввода, у нее нет символа, обозначающего конец, и я не знаю, сколько строк.

Так что мне делать?

Ответы [ 4 ]

6 голосов
/ 01 мая 2011

При достижении конца потока на входе raw_input возвращает пустую строку.Поэтому, если вам действительно нужно накопить весь ввод (чего вам, вероятно, следует избегать, учитывая ограничения SPOJ), выполните:

buffer = ''
while True:
    line = raw_input()
    if not line: break

    buffer += line

# process input
1 голос
/ 22 октября 2012

Поскольку raw_input() предназначен для чтения одной строки, у вас могут возникнуть проблемы с этим.Простым решением было бы поместить входную строку в текстовый файл и проанализировать оттуда.

При условии, что у вас есть input.txt , вы можете принимать значения как

f = open(r'input.txt','rU')
for line in f:
  print line,
1 голос
/ 01 мая 2011

Так как конец строки в Windows помечен как '\ r \ n' или '\ n' в системе Unix, просто заменить эти строки, используя

your_input.replace ('\r \ n ',' ')

0 голосов
/ 21 сентября 2017

Используя лучший ответ здесь, вы все равно будете иметь ошибку EOF, которую следует обработать.Итак, я только что добавил обработку исключений здесь

buffer = ''
while True:
    try:
         line = raw_input()
    except EOFError:
         break
    if not line: 
         break

    buffer += line
...