如何使用外部.txt文件验证用户名

2024-09-30 04:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,最近我一直在做一个编码项目,我想使用一个外部文件(.txt文件),其中包含所有有效的用户名。在这段代码中,我验证P1Username是否有效。如果用户名有效,它将继续执行代码的后面部分。如果用户名无效(不在.txt文件中),它将询问他们是否要注册,用户可以选择注册(名称添加到.txt文件)还是不注册(用户称为播放器1)。
问题是,该代码允许输入所有有效名称,并且不输出任何print语句。有人知道怎么解决这个问题吗?你知道吗

valid=False
username=open("username.txt","r")
lines=username.readlines()
P1Username=input("Enter your username Player 1: ")
for counter in range(len(lines)):
    if P1Username==str(lines[counter]):
        print("Valid username\nHello "+str(P1Username))
        valid=True
        break
    elif valid==False and counter<len(lines):
        next
    elif valid==False and counter>=len(lines):
        enter=""
        while enter!="yes" and enter!="no":
            enter=input("Would you like to register "+P1Username+"? (yes or no) ")
            if enter=="yes":
                username=("username.txt","a")
                username.write(P1Username)
                username.write("\n")
                print(P1Username+" is now a registered login\nHello "+P1Username)
                break
            elif enter=="no":
                P1Username="Player 1"
                print("You did not register the username\nI will refer to you as Player 1")
                break
            else:
                print("Enter yes or no")

Tags: 文件no代码txtfalsecounterusername用户名
2条回答

这部分

if P1Username==str(lines[counter]):
    print("Valid username\nHello "+str(P1Username))
    valid=True
    break 

将永远不会执行,因为lines[counter]结尾有换行符'\n',而用户输入没有。因此,即使名称已经在文本文件中,if条件也将被计算为False(即“username”和“username\n”不相同)。你知道吗

这部分

elif valid==False and counter>=len(lines):
    enter=""
    while enter!="yes" and enter!="no":
        enter=input("Would you like to register "+P1Username+"? (yes or no) ")
        if enter=="yes":
            username=("username.txt","a")
            username.write(P1Username)
            username.write("\n")
            print(P1Username+" is now a registered login\nHello "+P1Username)
            break
        elif enter=="no":
            P1Username="Player 1"
            print("You did not register the username\nI will refer to you as Player 1")
            break
        else:
            print("Enter yes or no")

将永远不会执行,因为在for循环中,您使用的counter将采用从0到len(lines)-1的值,因此counter>=len(lines)永远不会为真。你知道吗

所以我想

with open("username.txt","r") as f:
    usernames = [line.strip() for line in f]

player1 = input("Enter your username Player 1: ")
if player1 in usernames:
    print(f"Valid username\nHello {player1}")
else:
    while True:
        enter=input(f"Would you like to register {player1}? (yes or no) ").lower()
        if enter == "yes":
            with open("username.txt","a") as f:
                f.write(f'{player1}\n')
            print(f"{player1} is now a registered login\nHello {player1}")
            break
        elif enter == "no":
            player1="Player 1"
            print("You did not register the username\nI will refer to you as Player 1")
            break
        else:
            print("Enter yes or no")

我建议使用for each循环,而不是按索引进行for循环迭代(就像使用计数器一样),如下所示:

valid=False
usernames=open("username.txt","r")
P1Username=input("Enter your username Player 1: ")
for line in usernames.readlines():
    if P1Username in line: 
        valid = True

{go on with your code}

在您的代码中,您将使用户创建其用户的次数与文件中的名称相同。 使用上面的代码,您可以将验证与之后的过程分开。你知道吗

我认为这将简化您的代码,允许更快更容易的修复。你知道吗

相关问题 更多 >

    热门问题