使用len和get()函数给出错误的统计信息?

时间:2015-10-29 10:13:18

标签: python if-statement tkinter

我有一些代码要求用户输入26个字符来制作自己的加密代码,如果长度为26个字符且不是字母或预设encryption_code,代码将更改{{1}无论他们进入了什么。

encryption_code

我的问题是每当我尝试输入26个字符时,例如QWERTYUIOPASDFGHJKLZXCVBNM,它告诉我,当它显然是26个字符时我没有输入26个字符,如果用户没有输入26个字符,则该信息只是弹出。

UPDATE:使用print(len(encrypt_entry.get()))向我显示我的条目是26,但我的代码是说它不是26个字符。

2 个答案:

答案 0 :(得分:3)

问题出在第一个if声明 -

if encrypt_entry.get() == 'LFWOAYUISVKMNXPBDCRJTQEGHZ' or 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':

这始终是True,因为布尔表达式的分组使它成为 -

if (encrypt_entry.get() == 'LFWOAYUISVKMNXPBDCRJTQEGHZ') or ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):

所有非空字符串在布尔上下文中都是True。这会导致程序删除条目中的任何内容,因此您会从第二个if条件中获得错误。你可以改为 -

encryptgetted = encrypt_entry.get()
if encryptgetted == 'LFWOAYUISVKMNXPBDCRJTQEGHZ' or encryptgetted == 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':

答案 1 :(得分:2)

你有几个问题。首先是这个声明:

if encrypt_entry.get() == 'LFWOAYUISVKMNXPBDCRJTQEGHZ' or 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':

当您使用if x == "a" or "b"这样的表达式时,它与if (x == "a") or ("b")表达式相同,与if (x == "a") or ("b" != "")相同。

如果输入字段不为空,则第二个条件在代码中始终为true,因此整个条件始终为true。因此,除了输入字段为空白的情况外,该代码块将被执行。

第二个问题是在第一个“if”中你正在删除条目小部件中的所有内容。由于每个“if”块都在重新获取内容,因此以下所有“if”语句都将获得一个空字符串。

对此进行编码的正确方法是在程序开始时准确地获取一次值,然后正确使用else,这样您只需要经过一段代码:

user_input = encrypt_entry.get()
if (user_input == 'LFWOAYUISVKMNXPBDCRJTQEGHZ' or 
    user_input == 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    ...
elif (len(user_input) == 26):
    ...
else
    ...