因此,最近我一直在做一个编码项目,我想使用一个外部文件(.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")
这部分
将永远不会执行,因为
lines[counter]
结尾有换行符'\n',而用户输入没有。因此,即使名称已经在文本文件中,if条件也将被计算为False(即“username”和“username\n”不相同)。你知道吗这部分
将永远不会执行,因为在for循环中,您使用的counter将采用从0到len(lines)-1的值,因此
counter>=len(lines)
永远不会为真。你知道吗所以我想
我建议使用
for each
循环,而不是按索引进行for
循环迭代(就像使用计数器一样),如下所示:在您的代码中,您将使用户创建其用户的次数与文件中的名称相同。 使用上面的代码,您可以将验证与之后的过程分开。你知道吗
我认为这将简化您的代码,允许更快更容易的修复。你知道吗
相关问题 更多 >
编程相关推荐