2015-05-28 2 views
1

Я знаю, что вы можете получить строку из stdin с функцией raw_input(). Но что, если я не знаю количества строк, которые мне нужно будет получить?Можно ли получить все строки с raw_input(), если вы не знаете количество строк?

Я знаю, что могу импортировать 'sys', а затем получить все строки с циклом while, но есть ли аналогичный способ выполнить такую ​​задачу, используя raw_input()?

+0

Как бы вы хотели определить точку, в которой должны быть остановлены входные данные? – SuperBiasedMan

+0

@SuperBiasedMan, если бы я знал, я бы не стал задавать вопрос ... – naneri

+0

@naneria Я имел в виду, что бы вы хотели сделать, не так, как бы это работало. например. Конец на пустой строке, когда пользователь набирает «quit» и т. Д. – SuperBiasedMan

ответ

2

Это может быть столь же просто, как:

while(raw_input()): 
    #print "I received input" 
    #Do some processing here 
    #terminates when user hits enter without any text. 

Согласно документации Python, "" (пустая строка) рассматривается как False. Таким образом, цикл завершается, когда пользователь ничего не вводит.

Или, если вы хотите, чтобы вход, введенный пользователем, то вы можете использовать:

while True: 
    text = raw_input() 
    if not text: 
     break 
    #Do some processing here 

Или, если вы хотите задать какой-то другой переломный момент, то вы можете проверить условия внутри цикла while как:

break_word = "q" 
while True: 
    text = raw_input() 
    if text == break_word: 
     break 
    #Do some processing here 
+2

Вы первый пример бессмысленны, как вы можете что-либо сделать с помощью ввода? Вы не храните входные данные в любой переменной, вы также никогда не должны использовать 'is' для сравнения строк,' is' является проверка идентичности, а не равенства. –

+0

@PadraicCunningham Я также добавил некоторые другие подходы. Однако первый из них был как базовый цикл while, он может найти применение, когда пользователь просто хочет вызвать некоторую функцию на каждом входе, полученном независимо от входных данных, например , распечатывая текущее время для каждого введенного ввода. Не очень полезно, хотя, только что началось с самых простых – ZdaR

+0

Вы понимаете, что ваш цикл никогда не сломается?'text is p' никогда не будет True –

1

Если вы хотите, чтобы ваши данные рассмотрели, используйте list.

Прочитать значения в цикле. Если вы получите пустую строку break вне цикла, добавьте введенные данные в свой список.

data = [] 
while True: 
    line = raw_input() 
    if not line: 
     break() 
    data.append(line) 
1

Вы можете использовать список комп, если вы хотите сохранить все строки:

lines = [line for line in iter(lambda: raw_input("enter line or 'q' to quit"), "q")] 

Или с помощью цикла:

for line in iter(lambda: raw_input("enter line or 'q' to quit"), "q"): 
    print(line) 

петля сломается, когда пользователь вводит q , Второй аргумент iter - это значение дозорного значения, независимо от того, что вы указываете, поскольку значение может нарушить цикл при вводе пользователем.

Использование ITER эквивалентно:

while True: 
    inp = raw_input("Enter line or 'q' to quit") 
    if inp == "q": 
     break 

Просто более кратким.

Смежные вопросы