如何设置raw_input的默认string?
我正在使用python2.7的raw_input
从标准input读取。
我想让用户更改给定的默认string。
码:
i = raw_input("Please enter name:")
安慰:
Please enter name: Jack
用户应该被提供Jack
但可以改变(退格)到别的东西。
Please enter name:
参数将是raw_input
的提示,该部分不应该由用户更改。
你可以这样做:
i = raw_input("Please enter name[Jack]:") or "Jack"
这样,如果用户只是按下回车而没有input任何东西,“我”将被分配“杰克”。
在dheerosaur的答案如果用户按Enter键select默认值在现实中它不会被保存为python认为它是''string扩展了一些dheerosaur。
default = "Jack" user_input = raw_input("Please enter name: %s"%default + chr(8)*4) if not user_input: user_input = default
Fyi ..退格的ASCII value
是08
Python2.7得到raw_input并设置一个默认值:
把它放在一个名为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)
运行程序,停止并向用户显示:
el@defiant ~ $ python2.7 a.py Caffeine is: an insecticide
游标结束时,用户按退格键,直到“杀虫剂”消失,键入其他内容,然后按回车键:
el@defiant ~ $ python2.7 a.py Caffeine is: water soluable
程序如此完成,最终答案得到用户input的内容:
el@defiant ~ $ python2.7 a.py Caffeine is: water soluable final answer: water soluable
相当于上面的,但在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)
更多信息在这里发生了什么:
在使用readline
平台上,您可以使用此处所述的方法: https : //stackoverflow.com/a/2533142/1090657
在Windows上,您可以使用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)
请注意,箭头键不适用于Windows版本,使用时不会发生任何事情。
我只是添加这个,因为你应该写一个简单的函数重用。 这是我写的一个:
def default_input( message, defaultVal ): if defaultVal: return raw_input( "%s [%s]:" % (message,defaultVal) ) or defaultVal else: return raw_input( "%s " % (message) )
试试这个: raw_input("Please enter name: Jack" + chr(8)*4)
backspace
的ASCII值是08
。