亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的代碼似乎跳過了所有一半的功能?

為什么我的代碼似乎跳過了所有一半的功能?

largeQ 2023-06-20 13:27:10
我正在創建一個系統,它會檢查用戶是否已經申請了用戶名,但是在創建帳戶時它會詢問他們想要的用戶名,然后將其發送回選項屏幕以詢問他們是否要登錄或創建帳戶.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: testuser1. Login2. CreateWhich 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
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

您的問題源于這種情況:elif unique == False:

您首先將值分配0unique,然后根據文件的內容將 aTrue或 a分配給它。False如果你的文件是空的,那么在文件循環的末尾unique仍然會有一個。0現在,這里可能令人驚訝的是它0 == False被評估為 true!這是因為0是“Falsy”。因此,當您期望代碼轉到 else 時,實際上它又回到了signin1.

為避免將來出現此類錯誤,我強烈建議使用x is Trueandx is False代替x == Trueand?x == False。我還建議您不要在同一個變量中使用不同的類型(int、bool),因為這會導致像這個這樣的事故。

最后但同樣重要的是,我建議您學習如何使用調試器。如果您逐行運行這段代碼,您會很快發現這個問題。


查看完整回答
反對 回復 2023-06-20
?
嚕嚕噠

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


查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號