如果我理解你的问题,你希望能够编写一个包含以下内容的提示:%
符号字符,但将用户的光标置于符号的左侧,如下所示:
Enter a percent from 1-100: %
^ cursor is here
对此没有通用的解决方案,因为基本文本 IO 通常面向没有明确定义交互的输入和输出流。有一些方法在某些情况下有效,但在其他情况下则无效,但我不确定是否有任何方法在任何地方都有效(除了编写 GUI 之外)。
我的一个建议是包含 ASCII(和 unicode)退格字符'\b'
(or '\x08'
)在你的提示中。在某些控制台上,每个退格键会将光标向左移动一个字符。因此,上面的提示可以通过以下方式生成:
input("Enter a percent from 1-100: %\b\b\b\b\b")
当我从 Windows 运行 Python 时这有效CMD.exe
shell,但当我在 IDLE 中运行它时则不会('\x08'
字符显示为一个框,中间有一个小圆圈)。但这有点粗糙,因为它不能阻止用户输入的字符多于前面的空格。%
(将被输入的第五个字符覆盖)。
另一个可能更强大的解决方案(但不是跨平台的,唉)是使用curses module http://docs.python.org/3/library/curses.html。我对它的了解不够,无法建议代码,但应该可以使其执行您想要的操作(甚至可以控制诸如阻止用户输入超过三个字符或移动%
符号以与任何长度的值正确对齐)。
最后一件事:我强烈建议您不要使用eval
在你周围input
称呼。如果您期望(并且需要)一个整数值,请使用int(input())
。如果您可能会得到一个整数,但也可能会得到其他类型的值,请使用多行来测试您得到的结果:
def get_val():
str_val = input()
try:
return int(str_val) # handle numbers like 1, 23232, etc.
except ValueError:
pass
try:
return float(str_val) # handles 23.5 and -3e-3 (but beware, also "nan" and "inf")
except ValueError:
pass
try:
return make_some_other_value(str_val) # whatever you want
except ValueError:
pass
return str_val # give up and return the string