una teclado raw_input que print pedir para leer examples ejemplo desde cadena python input raw-input

teclado - print python 3.6 5



Cómo establecer una cadena predeterminada para raw_input? (6)

Estoy usando raw_input de raw_input para leer de stdin.

Quiero permitir que el usuario cambie una cadena predeterminada determinada.

Código:

i = raw_input("Please enter name:")

Consola:

Please enter name: Jack

Al usuario se le debe presentar Jack pero puede cambiarlo (retroceder) a otra cosa.

El argumento Please enter name: sería el mensaje de entrada raw_input y esa parte no debería ser cambiable por el usuario.


En la respuesta del dheerosaur Si el usuario presiona Enter para seleccionar el valor predeterminado en realidad, no se guardará ya que Python lo considera como '''' string así que se extiende un poco sobre lo que dheerosaur.

default = "Jack" user_input = raw_input("Please enter name: %s"%default + chr(8)*4) if not user_input: user_input = default

Fyi .. El ASCII value de retroceso es 08


En plataformas con readline , puede usar el método que se describe aquí: https://.com/a/2533142/1090657

En Windows, puede usar el módulo msvcrt:

from msvcrt import getch, putch def putstr(str): for c in str: putch(c) def input(prompt, default=None): putstr(prompt) if default is None: data = [] else: data = list(default) putstr(data) while True: c = getch() if c in ''/r/n'': break elif c == ''/003'': # Ctrl-C putstr(''/r/n'') raise KeyboardInterrupt elif c == ''/b'': # Backspace if data: putstr(''/b /b'') # Backspace and wipe the character cell data.pop() elif c in ''/0/xe0'': # Special keys getch() else: putch(c) data.append(c) putstr(''/r/n'') return ''''.join(data)

Tenga en cuenta que las teclas de flechas no funcionan para la versión de Windows, cuando se utiliza, no pasará nada.


Podrías hacerlo:

i = raw_input("Please enter name[Jack]:") or "Jack"

De esta forma, si el usuario simplemente presiona regresar sin ingresar nada, a "i" se le asignará "Jack".


Pruebe esto: raw_input("Please enter name: Jack" + chr(8)*4)

El valor ASCII de backspace es 08 .


Solo agrego esto porque debes escribir una función simple para reutilizar. Aquí está el que escribí:

def default_input( message, defaultVal ): if defaultVal: return raw_input( "%s [%s]:" % (message,defaultVal) ) or defaultVal else: return raw_input( "%s " % (message) )


Python2.7 obtiene raw_input y establece un valor predeterminado:

Pon esto en un archivo llamado a.py:

import readline def rlinput(prompt, prefill=''''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return raw_input(prompt) finally: readline.set_startup_hook() default_value = "an insecticide" stuff = rlinput("Caffeine is: ", default_value) print("final answer: " + stuff)

Ejecute el programa, se detiene y presenta al usuario con esto:

el@defiant ~ $ python2.7 a.py Caffeine is: an insecticide

El cursor está al final, el usuario presiona la tecla de retroceso hasta que ''un insecticida'' se haya ido, escriba algo más, luego presiona enter:

el@defiant ~ $ python2.7 a.py Caffeine is: water soluable

El programa termina así, la respuesta final obtiene lo que el usuario escribió:

el@defiant ~ $ python2.7 a.py Caffeine is: water soluable final answer: water soluable

Equivalente a la anterior, pero funciona en Python3:

import readline def rlinput(prompt, prefill=''''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return input(prompt) finally: readline.set_startup_hook() default_value = "an insecticide" stuff = rlinput("Caffeine is: ", default_value) print("final answer: " + stuff)

Más información sobre lo que está pasando aquí:

https://.com/a/2533142/445131