我使用python2.7的raw_input
從標準輸入讀取。如何設置raw_input的默認字符串?
我想讓用戶更改給定的默認字符串。
代碼:
i = raw_input("Please enter name:")
控制檯:
Please enter name: Jack
用戶應提交與Jack
但可以改變(退格鍵),它到別的東西。
Please enter name:
參數將是raw_input
的提示,該部分不應該由用戶更改。
我使用python2.7的raw_input
從標準輸入讀取。如何設置raw_input的默認字符串?
我想讓用戶更改給定的默認字符串。
代碼:
i = raw_input("Please enter name:")
控制檯:
Please enter name: Jack
用戶應提交與Jack
但可以改變(退格鍵),它到別的東西。
Please enter name:
參數將是raw_input
的提示,該部分不應該由用戶更改。
試試這個:raw_input("Please enter name: Jack" + chr(8)*4)
的backspace
的ASCII值是08
。
'傑克'只是打印,但沒有設置爲默認值。 – buhtz 2016-09-02 19:43:24
@buhtz感謝您指出。請隨時編輯答案。 – dheerosaur 2016-09-03 09:10:43
在dheerosaur的答案如果用戶按Enter鍵選擇實際的默認值,它不會被保存爲python認爲它是''字符串,所以擴展了dheerosaur。
default = "Jack"
user_input = raw_input("Please enter name: %s"%default + chr(8)*4)
if not user_input:
user_input = default
據透露..退格的ASCII value
是08
這是一個整潔的伎倆,謝謝。仍然不是我想要的,因爲用戶不能真正改變給定的默認字符串或使用箭頭鍵進行導航。當然,我們可以解決這個問題,但這樣的功能有點超出範圍。 – ifschleife 2011-03-31 09:15:19
不應該是'chr(8)* len(默認)'嗎? – nvd 2016-02-17 12:28:16
'Jack'只是打印出來的,但沒有設置爲默認值。 – buhtz 2016-09-02 19:43:28
在有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版本,使用時不會發生任何事情。
你可以這樣做:
i = raw_input("Please enter name[Jack]:") or "Jack"
這樣,如果用戶只需按下回車鍵時不輸入任何東西,「我」將被分配「傑克」。
這不適合這個問題。 '傑克'不可編輯。 – buhtz 2016-09-02 19:41:32
但是這是提供默認輸入的常用Unix模式。如果你想接受默認值,只需按回車。 – chubbsondubs 2016-09-05 13:46:27
@chubbsondubs這個問題不是關於_common Unix pattern_。 – buhtz 2016-09-05 20:23:06
我只是添加這個,因爲你應該寫一個簡單的函數重用。這裏是一個我寫道:
def default_input(message, defaultVal):
if defaultVal:
return raw_input("%s [%s]:" % (message,defaultVal)) or defaultVal
else:
return raw_input("%s " % (message))
這不適合這個問題。 – buhtz 2016-09-02 19:41:51
我重新閱讀了這個問題,我仍然認爲它確實如此。你可能想更好地解釋你的位置。 – chubbsondubs 2016-09-05 13:45:31
@chubbsndubs引用問題:「但可以改變(退格)到其他東西」。這意味着用戶應該能夠編輯默認值。 – buhtz 2016-09-05 20:23:56
Python2.7的raw_input獲取和設置默認值:
在一個文件將這個稱爲。潘岳:
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)
運行程序,它會停止並提出與該用戶:
[email protected] ~ $ python2.7 a.py
Caffeine is: an insecticide
光標是在年底,直到「殺蟲劑」不見了用戶按下退格,種類別的東西,然後按下回車:
[email protected] ~ $ python2.7 a.py
Caffeine is: water soluable
程序完成這樣的,最後的答案得到用戶鍵入的內容:
[email protected] ~ $ 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)
什麼是怎麼回事更多信息:
'是否要繼續?:Y/N [Y]','Y->繼續,'N - >請輸入名稱:'。 – khachik 2011-03-23 09:34:17
[顯示Python輸入可能的編輯默認值?]可能的重複(http://stackoverflow.com/questions/2533120/show-default-value-for-editing-on-python-input-possible) – 2011-03-23 09:36:29
謝謝,這是同樣的問題。顯然,我想要的是不可能使用raw_input和使用readline解決方案不是平臺獨立的... – ifschleife 2011-03-23 09:53:29