[英]Both "If" and "Else" statements printing while using Python
print 语句与“if”语句以及“else”一起运行,即使满足条件,输出也是“正确”和“错误”。 此外,当用户名和密码不正确时,会打印两个“错误”语句。 我会很感激帮助。
from tkinter import *
root = Tk()
root.title("Login")
root.resizable(False, False)
root.geometry("500x200")
image1 = PhotoImage(file="C:/Users/Cesar Alkaisy/Pictures/icon.png")
root.iconphoto(True, image1)
username_label = Label(root, text="Username", font=("Arial", 15, "bold"))
username_label.grid(column=1, row=0, padx=20, pady=20)
username_entry = Entry(root)
username_entry.grid(column=2, row=0)
password_label = Label(root, text="Password", font=("Arial", 15, "bold"))
password_label.grid(column=1, row=1)
password_entry = Entry(root)
password_entry.grid(column=2, row=1)
login_details = {"John": "123", "Jane": "321"}
def submit():
username = username_entry.get()
password = password_entry.get()
for login_detail in login_details:
if login_detail == username and login_details[login_detail] == password:
print("Correct")
else:
print("Wrong")
username_entry.delete(0, END)
password_entry.delete(0, END)
submit_button = Button(root, text="Submit", command=submit)
submit_button.grid(column=2, row=2, pady=10)
root.mainloop()
由于您只想打印一件事(如果任何细节匹配,则“正确”,只有当它们都不匹配时才“错误”),您应该在匹配时中断循环,并且仅在循环不匹配时打印“错误” '不坏(通过使用for ... else
):
for login_detail in login_details:
if login_detail == username and login_details[login_detail] == password:
print("Correct")
break
else:
print("Wrong")
另一种选择是使用any
函数,它会自动为您执行相同的“测试这些条件,如果其中任何一个为真则中断”逻辑:
if any(
login_detail == username and login_details[login_detail] == password
for login_detail in login_details
):
print("Correct")
else:
print("Wrong")
您可以通过迭代login_details.items()
使for
更简单一些,它为您提供用户和密码的元组:
if any(
detail_user == username and detail_password == password
for detail_user, detail_password in login_details.items()
):
print("Correct")
else:
print("Wrong")
并且通过直接比较元组更简单:
if any(
login_detail == (username, password)
for login_detail in login_details.items()
):
print("Correct")
else:
print("Wrong")
最简单的(现在问题已经简化为“这个(username, password)
元组是否存在于login_details.items()
中?”)你可以只使用in
而不是any
:
if (username, password) in login_details.items():
print("Correct")
else:
print("Wrong")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.