为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信