2013-12-11 2 views
3

Я начинаю питонов. Я пытаюсь принять входные данные от пользователя, если он пожелает. Программа должна прекратить прием входных данных при нажатии клавиши ввода.Принимая ввод до новой строки в python

Это

25 
65 
69 
32 
    #stop here since the enter key was pressed without any input 

я придумал следующий код делать это ....

a = [] 
while 1: 

    b = input("->") 
    if(len(b)>0): 
     a.append(b) 
    else: 
     break 

  1. Есть ли другие эффективные 'вещий' способы делая это ?

  2. Хотя это отлично работает с python 3.3, он не работает с python 2.7 (с заменой входом() функцией raw_input()). Экран просто тупой без ответа. Почему это?

  3. Есть ли встроенная функция, с помощью которой я могу преобразовать строки обратно в целые числа !?

+0

Нет необходимости в скобках вокруг инструкции if, используйте 'int ('string')', чтобы изменить строку на целое число – samrap

+0

Пожалуйста, обратите внимание на пробелы в Python. Я понял, что ваш пример кода смешивает вкладки и общие пространства. – Jon

ответ

4

Ваш подход в основном прекрасен. Вы могли бы написать это следующим образом:

a = [] 
prompt = "-> " 
line = input(prompt) 

while line: 
    a.append(int(line)) 
    line = input(prompt) 

print(a) 

NB: я не включил какой-либо обработки ошибок.

Что касается другого вопроса (ов):

  1. raw_input() должен работать так же в Python 2.7
  2. int() - Coerves данный аргумент в целое число. Он не сработает с TypeError, если он не сможет.

Для версии Python 2.x просто поменяйте input() на raw_input().

Просто ради целей образования, вы также могли бы написать это в функционального стиля, как это:

def read_input(prompt): 
    x = input(prompt) 
    while x: 
     yield x 
     x = input(prompt) 


xs = list(map(int, read_input("-> "))) 
print(xs) 
+0

Использование большого количества функций не делает ничего «функционального» или «функционального стиля» (в смысле функциональной парадигмы). Функциональное программирование с использованием итерации вместо рекурсии довольно ... интересно – Hyperboreus

+0

IT по-прежнему «функционально» в том смысле, что он использует функции для обертывания функциональности и повторения результатов. Обертка побочного эффекта, создающего функцию '' input() ''. –

+0

Это, конечно, не строго чисто функциональный, но :) –

1
  1. ИКА, этот код выглядит хорошо для меня.
  2. он прекрасно работает на моем питон 2.7.5, с raw_input()
  3. просто использовать Int() функции: например, Int ('121') возвращает 121 как целое
6

Вероятно сликовое путь что я знаю (без обработки ошибок, к сожалению, из-за чего вы не видите его слишком часто в производстве):

>>> lines = list(iter(input, '')) 
abc 
def 
. 
g 

>>> lines 
['abc', 'def', '.', 'g'] 

Это использует подпись вызова двухпараметрической для iter, который вызывает первый аргумент (input), пока он не вернет второй аргумент (ее e '', пустая строка).

Твой путь не так уж плохо, хотя это чаще всего видно при вариации

a = [] 
while True: 
    b = input("->") 
    if not b: 
     break 
    a.append(b) 

На самом деле, использование break и continue является одним из тех редких случаев, когда многие люди делают одну линию if, например,

a = [] 
while True: 
    b = input("->") 
    if not b: break 
    a.append(b) 

хотя это официально нахмурило (tm).

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