<p>这部分</p>
<pre><code>if P1Username==str(lines[counter]):
print("Valid username\nHello "+str(P1Username))
valid=True
break
</code></pre>
<p>将永远不会执行,因为<code>lines[counter]</code>结尾有换行符'\n',而用户输入没有。因此,即使名称已经在文本文件中,if条件也将被计算为False(即“username”和“username\n”不相同)。你知道吗</p>
<p>这部分</p>
<pre><code>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")
</code></pre>
<p>将永远不会执行,因为在for循环中,您使用的counter将采用从0到len(lines)-1的值,因此<code>counter>=len(lines)</code>永远不会为真。你知道吗</p>
<p>所以我想</p>
<pre><code>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")
</code></pre>