为什么我的代码似乎跳过了所有一半的功能?

我正在创建一个系统,它会检查用户是否已经申请了用户名,但是在创建帐户时它会询问他们想要的用户名,然后将其发送回选项屏幕以询问他们是否要登录或创建帐户.


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

largeQ
浏览 127回答 2
2回答

catspeake

您的问题源于这种情况:elif unique == False:您首先将值分配0给unique,然后根据文件的内容将 aTrue或 a分配给它。False如果你的文件是空的,那么在文件循环的末尾unique仍然会有一个。0现在,这里可能令人惊讶的是它0 == False被评估为 true!这是因为0是“Falsy”。因此,当您期望代码转到 else 时,实际上它又回到了signin1.为避免将来出现此类错误,我强烈建议使用x is Trueandx is False代替x == Trueand x == False。我还建议您不要在同一个变量中使用不同的类型(int、bool),因为这会导致像这个这样的事故。最后但同样重要的是,我建议您学习如何使用调试器。如果您逐行运行这段代码,您会很快发现这个问题。

噜噜哒

我不确定我是否正确理解了你的问题,这个问题似乎在user_create起作用,在这个函数的最开始unique被设置为0( ),如果碰巧是空的,即使给出了唯一的用户名也会被调用。Falseusers.txtsignin1def 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python