繁体   English   中英

使用 Python 时打印“If”和“Else”语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM