Подтвердить что ты не робот

Как установить редактируемую строку по умолчанию для raw_input?

Я использую Python 2.7 raw_input для чтения из стандартного raw_input.

Я хочу позволить пользователю изменить заданную строку по умолчанию.

Код:

i = raw_input("Please enter name:")

Приставка:

Please enter name: Jack

Пользователь должен быть представлен с Jack но может поменять (вернуться) на что-то другое.

Аргумент Please enter name: будет приглашением raw_input и эта часть не должна изменяться пользователем.

4b9b3361

Ответ 1

Вы можете сделать:

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

Таким образом, если пользователь просто нажимает кнопку возврата без ввода чего-либо, "i" будет назначен "Джек".

Ответ 2

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)

Запустите программу, она остановится и представляет пользователю следующее:

[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)

Подробнее о том, что происходит здесь:

fooobar.com/questions/120741/...

Ответ 3

В ответе 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

Fyi. ASCII value обратного пространства 08

Ответ 4

На платформах с readline вы можете использовать описанный здесь метод: fooobar.com/questions/120741/...

В 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, когда она используется, ничего не произойдет.

Ответ 5

Я только добавляю это, потому что вы должны написать простую функцию для повторного использования. Вот тот, который я написал:

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

Ответ 6

Попробуйте следующее: raw_input("Please enter name: Jack" + chr(8)*4)

Значение ASCII backspace равно 08.