我是Python的新手,在检查文件中的字符串时遇到循环麻烦。对于此程序,我正在检查用户想要创建的用户名是否已经存在。如果文件中已经存在用户名,程序将提示用户输入另一个用户名。当用户输入不在文件中的用户名时,循环结束。这是相关代码:
# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")
# open password file
f = open("password.txt", "r")
# while username exists in file
while username in f.read():
username = input("Enter your username: ")
f.close()
如果我输入密码文件中存在的用户名,程序会提示我输入另一个用户名;但是,当我输入相同的用户名时,该程序不会停留在循环中。为什么会这样?
答案 0 :(得分:0)
没有条件检查新用户名是否在文件中。
也许更简单的方法是使用以下方法?
username = input("Enter your username: ")
password = input("Enter your password: ")
# open password file
f = open("password.txt", "r")
data = f.read()
# while username exists in file
while username in data:
new = input("Enter your username: ")
if new in data:
continue
else:
break
username = new
f.close()
答案 1 :(得分:0)
运行f.read()
时,Python将读取文件,然后在下一次迭代中继续进入文件的下一行。它不会回到文件的顶部。由于文件下一行的username
是空字符串或其他名称,因此它退出循环。要解决此问题,您可以使用上下文管理器,如下所示:
# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")
# read in the file data
with open('password.txt') as f:
data = f.read()
# while username exists in file
while username in data:
username = input("Enter your username: ")
然后根据.txt文件中数据的结构,如果使用新行,则可以在split()
上调用data
。
答案 2 :(得分:0)
这是因为您在while条件中使用了f.read()。 f.read一次读取文件的全部内容,没有其他内容可读取,导致while循环结束。
如果要检查文件中的用户名,建议您创建一个从文件中读取的用户名列表,并在while循环中使用它进行检查。
如果文件包含内容: username1,username2,...
您可以
listOfUsernames = f.read().split(',')
,然后使用它来检查while循环。