我正在创建一个系统,在该系统中检查用户是否已经声明了用户名,但是在创建帐户时会询问他们想要的用户名,然后将其发送回选项屏幕以询问他们是否要登录或创建帐户。
def user_create():
f = open("users.txt", "a")
unique = 0
name = input("Enter a username: ")
with open("users.txt", "r") as file:
file_read = csv.reader(file)
filerow = 1
for row in file_read:
if row[0] == name:
print("This username is already taken, try another one")
file.close()
unique = False
break
else:
unique = True
filerow = filerow + 1
if unique == True:
file.close()
elif unique == False:
signin1()
else:
pass
if name.replace(" ", "").isalpha():
print("Name is valid")
else:
print ("Name is invalid")
user_create()
password = input("Enter a password: ")
f.write(name+","+password+",\n")
f.close()
print("Account created")
signin1()
输出:
Enter a username: testuser
1. Login
2. Create
Which one would you like to do?
本来应该询问用户密码,但似乎只跳过一半的代码。
所有登录代码:
def signin1():
print ("1. Login")
print ("2. Create")
choice = input("Which one would you like to do? ")
if choice == "1":
existence = os.path.exists("users.txt")
if existence == False:
print("There are no authorised accounts yet created")
signin1()
else:
mainsignin()
elif choice == "2":
user_create()
else:
print("Invaild choice")
signin1()
def user_create():
f = open("users.txt", "a")
unique = 0
name = input("Enter a username: ")
with open("users.txt", "r") as file:
file_read = csv.reader(file)
filerow = 1
for row in file_read:
if row[0] == name:
print("This username is already taken, try another one")
file.close()
unique = False
break
else:
unique = True
filerow = filerow + 1
if unique == True:
file.close()
elif unique == False:
signin1()
else:
pass
if name.replace(" ", "").isalpha():
print("Name is valid")
else:
print ("Name is invalid")
user_create()
password = input("Enter a password: ")
f.write(name+","+password+",\n")
f.close()
print("Account created")
signin1()
def mainsignin():
f = open("users.txt", "w")
f.close
with open("users.txt", "r") as file:
file_reader = csv.reader(file)
user_find(file_reader)
def user_find(file):
user = input("Enter your username: ")
filerow = 1
login = False
for row in file:
if row[0] == user:
print("Username found:", user)
user_found = [row[0], row[1]]
login = True
break
else:
filerow = filerow + 1
if login == True:
global user1
user1 = user
pass_check(user_found)
else:
print ("Could not find user with the name: "+str(user))
signin1()
def pass_check(user_found):
userpass = input("Enter your password: ")
if user_found[1] == userpass:
print("password match")
str(user_found)
game_login_user2()
else:
print("password does not match")
mainsignin()
您的问题源于这种情况: elif unique == False:
您首先将值分配0
到中unique
,然后根据文件的内容分配aTrue
或a False
。如果您的文件为空,则文件循环末尾unique
仍会有一个0
。现在,这里可能令人惊讶的事情0 == False
是评估为真实!这是因为0
是“ Falsy”(有关此问题的更多信息,请参阅此问题)。因此,当您期望代码继续前进时,实际上它可以追溯到signin1
。
为避免将来出现此类错误,我强烈建议使用x is True
andx is False
代替x == True
and x == False
。我还建议您不要在同一变量中使用不同的类型(int,bool),因为这可能会导致类似这样的事故。
最后但并非最不重要的一点是,我建议您学习如何使用调试器。如果您逐行运行此代码,则可以很快发现此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句