【问题标题】:Default text for Python inputPython 输入的默认文本
【发布时间】:2021-10-14 03:59:00
【问题描述】:

如果我要求用户输入,Python 会让我使用箭头键来移动我输入的内容,并在必要时进行更改。比如运行下面的程序时

user_input = input("file name -> ")
print(user_input)

我可以用左箭头返回,把'G'改成'g'

file name -> thisIsAVeryLonGFileName.txt

然后当我点击 Enter 时,它会打印出来

thisIsAVeryLongFileName.txt

有没有办法提示用户输入已经提供的默认响应,然后使用户能够使用箭头键修改默认响应,而不必输入整个响应?基本上,事情应该像上面那样工作,但用户不必在最初输入任何内容(而是由程序提供)。

【问题讨论】:

  • 这能回答你的问题吗? How can I edit an inputed text in python
  • python 的 input 使用终端的文本输入,因此在 windows 上它是 cmd 负责该行为,而在 MacOS 上它是终端。 (linux上的bash或其他)。这意味着 python 无法自定义它的工作方式。您可以做的最接近的事情是使用 curses 库来更全面地控制终端窗口
  • 有多种软件包可以提供良好的用户体验,例如PyInputPlus.
  • 您也可以使用readline 库。

标签: python input


【解决方案1】:

而不是预先填写的输入(可能需要某种程度的 GUI/大量样板文件),为什么不在程序中内置一个默认值并让用户选择该默认值?

例如,习惯于命令行界面的用户可能会理解此处的空白输入将使用默认文件名:

user_input = input("file name (default: aVeryLongFilename.txt) -> ")
if user_input == "":
    user_input = "aVeryLongFilename.txt"

或者,如果您的用户需要更多辅助轮:

default_choice= input("use default filename, aVeryLongFilename.txt? (y/n) -> ")
if default_choice == "y":
    user_input = "aVeryLongFilename.txt"
else:
    user_input = input("file name -> ")

显然,您希望验证/循环第二个示例中的 y/n 输入,但我认为这是在使用默认值和承诺使用 GUI 之间的一个很好的中间立场。

编辑:

如果在用户运行程序一次之前您可能不知道合理的默认值是多少,您可以尝试这样的事情(受下面 hlzl 的评论启发),使用上面的第一个建议作为模型:

if first_run:
    user_input = input("file name -> ")
else:
    reasonable_default = str(load_previous_run_file())
    user_input = input("file name (previous filename: " + reasonable_default + ") -> ")
    if user_input == "":
        user_input = reasonable_default

【讨论】:

  • 如果默认值是已知的,那将起作用。在我的情况下,用户必须输入一个文件名(可能会有所不同),但可能会出现拼写错误,因此格式不完全正确。
  • 公平点,尽管在这种情况下,如果您事先不知道,我不确定您将如何在任何上下文(GUI 或命令行)中向用户提示默认响应-及时
  • 在这种情况下,我建议从第一个用户输入中获取文件名,然后使用@Luigi 建议的选项再次显示输入并要求确认。
  • 好主意@hlzl,我把这个想法融入了编辑中
  • 问题是我要解决的问题是用户输入了一些输入,但犯了一个错误。我希望我的程序提示他们再试一次,但提供他们之前的输入作为起点,这样他们就不必重新输入所有内容。
猜你喜欢
  • 2010-11-09
  • 2011-09-16
  • 2014-07-14
  • 2019-10-18
  • 2015-09-20
  • 2022-01-21
  • 2020-08-12
  • 2021-04-07
  • 2013-09-02
相关资源
最近更新 更多