如何使用外部 .txt 文件验证用户名
How to validate a username using external .txt files
最近我一直在做一个编码项目,我想使用一个包含所有有效用户名的外部文件(.txt 文件)。在这段代码中,我正在验证 P1Username 是否有效。如果用户名有效,它将继续执行代码的后面部分。如果用户名无效(不在 .txt 文件中),它会询问他们是否要在用户可以选择注册的地方注册(名称添加到 . txt 文件)或不注册(用户称为玩家 1)。
问题在于此代码允许输入所有有效名称,并且不输出任何打印语句。有人知道如何解决这个问题吗?
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")
这部分
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 循环中你使用计数器将取值从 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
循环(就像您对计数器所做的那样),而是使用 for each
循环,如下所示:
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}
在您的代码中,您将让用户创建他的用户,次数与文件中的名称相同。
使用上面的代码,您将验证与之后的过程分开。
我认为这会简化您的代码,从而可以更快更轻松地进行修复。
最近我一直在做一个编码项目,我想使用一个包含所有有效用户名的外部文件(.txt 文件)。在这段代码中,我正在验证 P1Username 是否有效。如果用户名有效,它将继续执行代码的后面部分。如果用户名无效(不在 .txt 文件中),它会询问他们是否要在用户可以选择注册的地方注册(名称添加到 . txt 文件)或不注册(用户称为玩家 1)。
问题在于此代码允许输入所有有效名称,并且不输出任何打印语句。有人知道如何解决这个问题吗?
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")
这部分
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 循环中你使用计数器将取值从 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
循环(就像您对计数器所做的那样),而是使用 for each
循环,如下所示:
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}
在您的代码中,您将让用户创建他的用户,次数与文件中的名称相同。 使用上面的代码,您将验证与之后的过程分开。
我认为这会简化您的代码,从而可以更快更轻松地进行修复。