为什么我的代码似乎跳过了函数的全部一半?

安德鲁·布鲁斯

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

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
                    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()

        def mainsignin():
        f = open("users.txt", "w")
        f.close
        with open("users.txt", "r") as file:
            file_reader = csv.reader(file)
            user_find(file_reader)

def user_find(file):
    user = input("Enter your username: ")
    filerow = 1
    login = False
    for row in file:
        if row[0] == user:
            print("Username found:", user)
            user_found = [row[0], row[1]]
            login = True
            break
        else:
            filerow = filerow + 1
        if login == True:
            global user1
            user1 = user
            pass_check(user_found)
        else:
            print ("Could not find user with the name: "+str(user))
            signin1()

def pass_check(user_found):
    userpass = input("Enter your password: ")
    if user_found[1] == userpass:
        print("password match")
        str(user_found)
        game_login_user2()
    else:
        print("password does not match")
        mainsignin()
蓝色的星星;蓝星

您的问题源于这种情况: elif unique == False:

您首先将值分配0到中unique,然后根据文件的内容分配aTrue或a False如果您的文件为空,则文件循环末尾unique仍会有一个0现在,这里可能令人惊讶的事情0 == False是评估为真实!这是因为0是“ Falsy”(有关此问题的更多信息,请参阅此问题)。因此,当您期望代码继续前进时,实际上它可以追溯到signin1

为避免将来出现此类错误,我强烈建议使用x is Trueandx is False代替x == Trueand x == False我还建议您不要在同一变量中使用不同的类型(int,bool),因为这可能会导致类似这样的事故。

最后但并非最不重要的一点是,我建议您学习如何使用调试器。如果您逐行运行此代码,则可以很快发现此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的代码跳过了if语句?

来自分类Dev

为什么我的python函数被跳过了?

来自分类Dev

为什么我的代码在我的 map 函数之后跳过了我的排序函数?

来自分类Dev

JsonConvert属性似乎被跳过了。为什么?

来自分类Dev

为什么我的程序跳过了gets() 函数?

来自分类Dev

为什么我的char数组的一半是空白?

来自分类Dev

为什么我的char数组的一半是空白?

来自分类Dev

For 循环似乎跳过了一些代码

来自分类Dev

Main似乎跳过了我的一种方法

来自分类Dev

为什么Live Server只加载一半的HTML代码?

来自分类Dev

为什么在这段代码中跳过了 for 循环的一些迭代?

来自分类Dev

为什么我的noUiSlider只尊重滑块一半的“步长”值?

来自分类Dev

为什么我的Java堆转储仅显示一半的堆?

来自分类Dev

无法弄清楚为什么我的网站占用了iPhone的一半屏幕

来自分类Dev

为什么我的XOR操作仅在文本文件的一半上实现

来自分类Dev

为什么我只得到广告速度的一半?

来自分类Dev

为什么babbab估计我的使用量少于du或pan_quota的一半?

来自分类Dev

为什么我只能得到一半的桌面墙纸?

来自分类Dev

为什么我的根LVM SSD的一半无法访问?

来自分类Dev

为什么我的noUiSlider只尊重滑块一半的“步长”值?

来自分类Dev

为什么我的 cout 声明没有打印一半?

来自分类Dev

为什么我的应用程序只呈现页面的一半?

来自分类Dev

如何检查为什么我的互联网只能工作一半?

来自分类Dev

为什么我的页面从屏幕的一半而不是全屏显示?

来自分类Dev

为什么我的登录信息跳过了tty?

来自分类Dev

For Next VBA 跳过一半

来自分类Dev

为什么printf(Unix)使用一半舍入?

来自分类Dev

为什么输出是应有的一半?

来自分类Dev

为什么scrollTop只向下滚动一半?

Related 相关文章

  1. 1

    为什么我的代码跳过了if语句?

  2. 2

    为什么我的python函数被跳过了?

  3. 3

    为什么我的代码在我的 map 函数之后跳过了我的排序函数?

  4. 4

    JsonConvert属性似乎被跳过了。为什么?

  5. 5

    为什么我的程序跳过了gets() 函数?

  6. 6

    为什么我的char数组的一半是空白?

  7. 7

    为什么我的char数组的一半是空白?

  8. 8

    For 循环似乎跳过了一些代码

  9. 9

    Main似乎跳过了我的一种方法

  10. 10

    为什么Live Server只加载一半的HTML代码?

  11. 11

    为什么在这段代码中跳过了 for 循环的一些迭代?

  12. 12

    为什么我的noUiSlider只尊重滑块一半的“步长”值?

  13. 13

    为什么我的Java堆转储仅显示一半的堆?

  14. 14

    无法弄清楚为什么我的网站占用了iPhone的一半屏幕

  15. 15

    为什么我的XOR操作仅在文本文件的一半上实现

  16. 16

    为什么我只得到广告速度的一半?

  17. 17

    为什么babbab估计我的使用量少于du或pan_quota的一半?

  18. 18

    为什么我只能得到一半的桌面墙纸?

  19. 19

    为什么我的根LVM SSD的一半无法访问?

  20. 20

    为什么我的noUiSlider只尊重滑块一半的“步长”值?

  21. 21

    为什么我的 cout 声明没有打印一半?

  22. 22

    为什么我的应用程序只呈现页面的一半?

  23. 23

    如何检查为什么我的互联网只能工作一半?

  24. 24

    为什么我的页面从屏幕的一半而不是全屏显示?

  25. 25

    为什么我的登录信息跳过了tty?

  26. 26

    For Next VBA 跳过一半

  27. 27

    为什么printf(Unix)使用一半舍入?

  28. 28

    为什么输出是应有的一半?

  29. 29

    为什么scrollTop只向下滚动一半?

热门标签

归档