【问题标题】:Printing strings + input in python在python中打印字符串+输入
【发布时间】:2023-03-21 04:57:01
【问题描述】:

我正在尝试找到一种方法来格式化我的输入,在它之后保留一些空间,然后在同一行中打印一些字符。

这段代码显然行不通,但我的需求可能会满足您的需求:

print('|') + var=input("What's your name: ")+(reserved 10 characters) +print('|')

或:

char + input command + Reserverd space + char

我需要这个结果:

'|What's your name?>>> |'

第一个'|'可以,但是第二个呢?和空间?

非常感谢!

【问题讨论】:

    标签: python python-3.x input output


    【解决方案1】:

    你不能直接做你想做的事。有两种解决方法。


    首先,您可以直接打印终端控制序列,将其打印出来:

    | What's your name:          |
    

    … 然后将光标移到冒号后,供用户输入。幸运的是,您在这里只处理一行,所以您只需要退格,在您将遇到的几乎所有终端上都是 '\x08',所以它只是:

    var = input("| What's your name:          |\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08")
    

    但是,用户将能够在第二个 | 上键入,并且在某些终端上,| 将在他输入后立即被删除,而在某些终端上,它甚至可以通过退格键被删除它。

    您可以通过使用termcap 库或readline 来获得更复杂的功能,但这里总会有一些限制;终端处于行缓冲模式,因此您的代码无法控制用户点击回车之前发生的情况。


    或者,您可以接管终端并手动管理用户输入,以使用户保持在 10 个字符以内。在*nix 平台上,这是tcsetattrselecting 和reading 来自stdin 的复杂混乱;在 Windows 上,mscvrt 中的一堆“conio”调用更简单,但文档记录较少。

    但是,如果您真的想这样做,您可能应该使用更高级别的库,例如 curses

    【讨论】:

    • 这正是我所需要的,但在空闲时,退格 \x08 将光标放在我最后一个字符的前面并且它不会倒退。明天我将在 Windows 终端上尝试工作,看看它会如何反应,因为我的代码只能在 Windows 中运行。非常感谢!如果可行,我会在这里回复你。
    • @user3927115:没有办法在 IDLE 中进行这项工作,因为它不使用终端,并且在 GUI 中伪造了 input。如果您关心它在 IDLE 中的外观,则必须编写 Tkinter 代码来替换命令行代码,并检测您是否处于 IDLE 中。但是你真的不应该关心它在 IDLE 中的样子;这是一个开发者工具,你的用户不会使用它来运行你的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2016-01-15
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多