Aceptando input hasta newline en python

Soy un principiante de python. Estoy tratando de aceptar entradas del usuario mientras él / ella lo desee. El progtwig debe dejar de aceptar entradas cuando se presiona solo la tecla Intro.

Es decir

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

Se me ocurrió el siguiente código de hacer eso …

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

  1. ¿Hay alguna otra forma eficiente de “python” de hacer esto?

  2. Si bien esto funciona perfectamente con Python 3.3, no funciona con Python 2.7 (con input () reemplazado por la función raw_input ()). La pantalla se queda muda sin ninguna respuesta. ¿Porqué es eso?

  3. ¿Hay alguna función incorporada con la que pueda convertir cadenas de nuevo a enteros?

Su enfoque es en su mayoría bien. Podrías escribirlo así:

 a = [] prompt = "-> " line = input(prompt) while line: a.append(int(line)) line = input(prompt) print(a) 

NB: No he incluido ningún manejo de errores.

En cuanto a su (s) otra (s) pregunta (s):

  1. raw_input() debería funcionar de manera similar en Python 2.7
  2. int() – Coerva el argumento dado a un entero. Fallará con un TypeError si no puede.

Para una versión de Python 2.x simplemente intercambie la input() por raw_input() .

Solo por motivos educativos, también puede escribirlo en un estilo funcional como este:

 def read_input(prompt): x = input(prompt) while x: yield x x = input(prompt) xs = list(map(int, read_input("-> "))) print(xs) 

Probablemente la forma más astuta que conozco (sin manejo de errores, desafortunadamente, es por eso que no lo ves muy a menudo en producción):

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

Esto utiliza la firma de llamada de dos parámetros para iter , que llama al primer argumento ( input ) hasta que devuelve el segundo argumento (aquí '' , la cadena vacía).

Tu camino no es tan malo, aunque se ve más a menudo bajo la variación

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

En realidad, el uso de break y continue es uno de los casos raros donde muchas personas hacen una línea if , por ejemplo,

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

aunque esto es oficialmente mal visto ™.

  1. Id, este código se ve bien para mí.
  2. funciona perfectamente en mi python 2.7.5, con raw_input ()
  3. simplemente use la función int (): por ejemplo, int (‘121’) devuelve 121 como entero