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
添加回答
舉報