56

Python 2.7 を使用raw_inputして stdin から読み取ります。

ユーザーが特定のデフォルト文字列を変更できるようにしたい。

コード:

i = raw_input("Please enter name:")

コンソール:

Please enter name: Jack

ユーザーに提示する必要がありますが、Jack別のものに変更 (バックスペース) できます。

Please enter name:引数はプロンプトでありraw_input、その部分はユーザーが変更できないようにする必要があります。

4

7 に答える 7

29

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

カーソルは最後にあり、ユーザーは「殺虫剤」がなくなるまでバックスペースを押し、別の何かを入力してから、Enter キーを押します。

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

プログラムは次のように終了し、最終的な回答はユーザーが入力したものを取得します。

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)

ここで何が起こっているかについての詳細情報:

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

于 2016-04-13T18:51:01.283 に答える
7

ユーザーが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

于 2011-03-23T12:12:26.310 に答える
5

再利用のために単純な関数を作成する必要があるため、これを追加するだけです。これが私が書いたものです:

def default_input( message, defaultVal ):
    if defaultVal:
        return raw_input( "%s [%s]:" % (message,defaultVal) ) or defaultVal
    else:
        return raw_input( "%s " % (message) )
于 2014-09-08T22:20:31.437 に答える
4

のプラットフォームでは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 バージョンでは機能しないことに注意してください。使用しても何も起こりません。

于 2012-07-23T16:20:11.433 に答える
-4

これを試して:raw_input("Please enter name: Jack" + chr(8)*4)

の ASCII 値はbackspaceです08

于 2011-03-23T11:19:13.823 に答える