python - 用户名/密码程序的打印语句不正确

标签 python python-3.x

def login():
    UserName = input("Please enter your username: ")
    passw = input("Please enter your password: ")
    check(UserName, passw)
    if check(UserName, passw) == True:
        print("Thank you for logging in. Please enjoy these lyrics")
    else:
        print("Sorry, either your username or password is incorrect")

def check(UserName, passw):
    pword = {}
    for line in open('unames_passwords.txt','r'):
        user, password = line.split()
        pword[user] = password
        if user == UserName and password == passw:
            return True
        else:
            return False


def main():
    login()

我当前代码遇到的问题是,仅当我输入文件中包含的名字和密码时,它才会打印 if True, print 语句,但如果我在文件中输入任何其他名称和密码同一个文件,它总是打印在 else 下发出的语句。有人知道我做错了什么吗?

最佳答案

您仅根据密码文件的第一行check()返回。如果第一个密码不匹配,则立即返回 False

return False 移出循环,以便仅在扫描整个文件时执行:

def check(UserName, passw):
    for line in open('unames_passwords.txt','r'):
        user, password = line.split()
        if user == UserName and password == passw:
            return True

    return False

我在这里删除了pword字典处理;您的代码实际上并没有使用它。

可能希望避免每次登录时调用check()两次,并且您不必测试== Trueif 语句已经为您进行了测试:

def login():
    UserName = input("Please enter your username: ")
    passw = input("Please enter your password: ")
    if check(UserName, passw):
        print("Thank you for logging in. Please enjoy these lyrics")
    else:
        print("Sorry, either your username or password is incorrect")

关于python - 用户名/密码程序的打印语句不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642821/

相关文章:

python - 如何从给定的 txt 文件创建字典?

python - 在Python中将单独的文件视为一个文件对象

python - 如何测试范围的等价性

python - 如何将 settings.py 文件中的常量导入到 Django 控制台中?

python - 在不同模块的上下文中使用类

python - ProcessPoolExecutor,BrokenProcessPool处理

python - 如何根据数据框python中列中列表的值进行分组

python - 如何获取一个生成器函数的多个实例

python - Gspread 可以在位置插入新列吗?

python - 随时间传播卫星目录的有效方法