2 回答
TA贡献1111条经验 获得超0个赞
您的问题源于这种情况:elif unique == False:
您首先将值分配0
给unique
,然后根据文件的内容将 aTrue
或 a分配给它。False
如果你的文件是空的,那么在文件循环的末尾unique
仍然会有一个。0
现在,这里可能令人惊讶的是它0 == False
被评估为 true!这是因为0
是“Falsy”。因此,当您期望代码转到 else 时,实际上它又回到了signin1
.
为避免将来出现此类错误,我强烈建议使用x is True
andx is False
代替x == True
and x == False
。我还建议您不要在同一个变量中使用不同的类型(int、bool),因为这会导致像这个这样的事故。
最后但同样重要的是,我建议您学习如何使用调试器。如果您逐行运行这段代码,您会很快发现这个问题。
TA贡献1784条经验 获得超7个赞
我不确定我是否正确理解了你的问题,这个问题似乎在user_create起作用,在这个函数的最开始unique被设置为0( ),如果碰巧是空的,即使给出了唯一的用户名也会被调用。Falseusers.txtsignin1
def user_create():
f = open("users.txt", "a")
unique = 0 # unique is set to False
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 users.txt is empty, following 8 lines won't run
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() # and signin1 would be called here even if a unique username is given
else:
pass
添加回答
举报