我有一些代码要求用户输入26个字符来制作自己的加密代码,如果长度为26个字符且不是字母或预设encryption_code
,代码将更改{{1}无论他们进入了什么。
encryption_code
我的问题是每当我尝试输入26个字符时,例如QWERTYUIOPASDFGHJKLZXCVBNM,它告诉我,当它显然是26个字符时我没有输入26个字符,如果用户没有输入26个字符,则该信息只是弹出。
UPDATE:使用print(len(encrypt_entry.get()))向我显示我的条目是26,但我的代码是说它不是26个字符。
答案 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
...