我在使用while循环时遇到了麻烦!
我要做的是创建一个简单的帐户创建系统。我希望用户输入用户名,如果用户名已经存在,那么我应该再试一次。
但即使用户名存在,它也会继续执行该功能,并要求我输入密码,并将用户名和密码写入文件。
这是代码:
def create_user():
passw = open('passwords.txt', 'r+')
x = 1
passwr = passw.readlines()
print "What's your username?"
while x == 1:
user = raw_input(">> ")
for l in passwr:
a = l.split()
if user.lower() not in a[0]:
x = 0
else:
print 'Sorry, that\'s already in use!'
print "What's your pw?"
pw = raw_input(">> ")
passw.seek(0, 2)
passw.write(user + ' ' + pw + '\n')
文件格式如下:
Username1 Password
Username2 Password
我试图找出一段时间的错误。但似乎无法找到解决方案。
答案 0 :(得分:3)
您的验证部分可以更简单尝试这样的事情
while x == 1:
user = raw_input(">> ")
usernames = [i.split()[0] for i in passwr]
if user.lower() not in usernames:
x = 0
else:
print 'Sorry, that\'s already in use!'
输出将是
What's your username?
>> Username1
Sorry, that's already in use!
>> Username2
Sorry, that's already in use!
>> Username3
What's your pw?
>> Password
和文件内容
username1 Password
username2 Password
Username3 Password
答案 1 :(得分:3)
您需要查看==
而非in
,因此您无需额外分配a = l.split()
,请将if
语句更改为以下内容:
if user.lower() == l.split()[0]
因为这项工作用于检查一个ID,如果您需要检查所有ID,您可以在列表中获取所有ID并检查:
while x == 1:
user = raw_input(">> ")
user-list=[line.split()[0] for line in passwr]
if user.lower() not in user-list:
x = 0
答案 2 :(得分:3)
问题是,如果任何用户具有不同的用户名,则设置x = 0
。想象一下,现有两个用户foo
和bar
。用户输入bar
。发生这种情况:
if user.lower() not in a[0]:
生成True
,因为user
为"bar"
而a[0]
为"foo"
。x
设置为0
。a[0]
现在为"bar"
。if user.lower() not in a[0]:
生成False
,并打印Sorry, that's already in use!
。x
已设置为0
。