为什么我的elif语句不会执行,但我的if语句将在Python中执行?

时间:2016-02-03 16:10:07

标签: python if-statement tkinter python-2.x

我在python中写了一个简单的年龄验证,如果用户输入的年份少于2000,那就说欢迎。但是,如果用户输入的年份大于2000,则应将其重定向到另一个站点。

我的代码有效,但无论我输入的是哪一年,它都只执行.prefix-wrapper * { -webkit-box-sizing: inherit; box-sizing: inherit; } 语句而不是if

这是我的代码:

elif

3 个答案:

答案 0 :(得分:7)

您正在将 Entry()对象与整数进行比较。在Python 2中,数字总是在之前在其他类型之前排序,因此它们总是注册为较小的

>>> object() > 2000
True

您希望从输入框中获取值并在测试前转换为整数:

entry = int(E3.get())
if entry > 2000:
     # ...
else:
     # ...

此处不需要执行elif,除非您希望完全忽略值2000(您的测试仅适用于大于或小于,不等于的数字)。< / p>

答案 1 :(得分:2)

Entry是对象类型。您想调用get()函数。像这样:

EntryBox = Entry(root, bd = 5)
E3 = int(EntryBox.get())

另外,请注意elif完全没必要。只需使用else代替。

if E3 < 2000:
    tkMessageBox.showinfo(message= "Welcome! ")
else:
    tkMessageBox.showinfo(message="You will be redirected")
    webbrowser.open_new(url)

答案 2 :(得分:2)

您将Entry对象与integer进行比较,永远不会达到if语句,因为integers始终在objects之前排序。看:

>>> a = ['0', 9999, {}, [], False, (), object()]
>>> sorted(a)
[False, 9999, {}, [], <object object at 0xb74fa558>, '0', ()]
>>> 

使用get方法从Entry获取文字,然后将其转换为int

if int(E3.get()) < 2000:

如果您想从Entry中获取整数而不进行转换,则可以使用IntVar()

...
v = IntVar()
E3 = Entry(root, bd = 5, textvariable=v)
...
if E3.get() < 2000:
    tkMessageBox.showinfo(message= "Welcome! ")
else:
    tkMessageBox.showinfo(message="You will be redirected")
    webbrowser.open_new(url)