我似乎无法做到这一点。我有一个需要稍微修改的大程序。
我需要做的就是确保在输入有效选项之前用户无法继续操作。除“1”,“2”,“3”和“4”以外的任何内容均无效。
def GetResponse():
global Response
Response = (input("Enter Option number: "))
如果这是代码,则菜单会在输入任何内容时继续显示。没有什么事情发生,除了菜单继续出现。 (字符串或任何数字),但如果我稍微修改它并仅使响应为整数:
def GetResponse():
global Response
Response = (int(input("Enter Option number: ")))
然后在这里,如果输入了一个有效的选项,它将带您进入该选项,而如果我输入一段文本,则会出现错误(预计我知道)
我感到困惑的是为什么,当我改变为int时,它才会响应输入的选项,而如果我取消int,我没有错误,但同时程序没有回应有效的投入。
对不起,如果这是不清楚的信息。这是我解释它的最佳方式。 实际回复
答案 0 :(得分:2)
在Python 2.x中,input
评估输入的文本。 int
如果你传递一个无法转换为整数的东西,就会引发一个ValueError。
因此它与数字一起工作的原因是数字会计算数字 - 就像它们在Python命令行中一样。我敢打赌,如果你将print "hello world"
放入你的示例中,就不会像输入zzzz
那样得到同样的错误。第一个是有效的Python,第二个不是。
使用raw_input可能更有意义,因为您不太可能希望Python解释器解释输入的文本 - 如果用户输入import sys; sys.exit()
会怎么样?
我认为在这里做的正确的事情是接受输入,尝试将其转换为int,并在它抛出错误时重新提示。
choice = None
while not choice:
val = raw_input("Enter Option Number: ")
try:
choice = int(val)
except ValueError:
print("Must be an integer 1 to 4")
答案 1 :(得分:0)
整数和字符/字符串在Python中是不同的类型。例如,'1'
与1
不同。
如果您的菜单选项如下所示:
if 1 <= input <= 4:
# Valid input, find the menu
...然后你要检查整数。
希望这是有道理的。
答案 2 :(得分:0)
从另一个answer of mine抄袭:
在Python 2.7中,input()
不是您想要获取用户输入的内容。你真的想要raw_input()
。 (这确实是令人困惑的,并已在Python 3中得到修复。)
不同之处在于input()
接受用户输入,然后尝试对其进行评估,就好像您将其作为命令键入交互式Python会话一样。评估函数调用和表达式,这导致一些“什么?!”如果您尝试将其用于通用用户输入,请注意以下几点:
In [18]: my_number = input("Please enter a number >> ")
Please enter a number >> locals() # unexpected user input
In [19]: print (my_number)
{'disp': <function disp at 0x029FBEB0>, 'all': <function all at 0x0290BA70>,
'dist': <function dist at 0x030D1430>, 'issubsctype': <function issubsctype
at 0x028FADF0>, 'sca': <function sca at 0x062AF370>, 'savez': <function
savez at 0x02A8E830>, 'entropy': <function entropy at 0x030C8F70>,
'restoredot': <built-in function restoredot>, 'ptp': <function ptp at
0x0290BB30>, 'Subplot': <class 'matplotlib.axes.AxesSubplot'>, 'frange':
<function frange at 0x030D1930>, 'PackageLoader': <class
numpy._import_tools.PackageLoader at 0x0248C8B8>, 'rec2csv':
<function rec2csv at 0x030FE4B0>, 'ylabel': <function ylabel at 0x062AF6F0>, ....
# what?!
相反,使用raw_input()
向用户询问输入,然后返回他们输入的任何字符串。
阅读input()
和raw_input()
的文档可能有助于澄清这一点。
啊,你正在使用Python 3.在这种情况下,试试approach I suggested in the other question - 定义一个永远循环的函数,直到它获得有效的用户输入,然后返回(从而打破循环。)
Python 2.x代码获取浮点数:适应Python 3并获取整数。 (这对你来说是一项微不足道的练习。)
def get_float_from_user (prompt):
while True:
try:
user_input = float(raw_input(prompt))
return user_input
except ValueError:
print ("Not a floating point number. Please try again.")
x = get_float_from_user("Enter x.")
y = get_float_from_user("Enter y.")
print (x+y)