当前位置: 首页 > 知识库问答 >
问题:

测验的注册算法;程序不检查用户名是否已经存在

邬博涉
2023-03-14

我正在创建一个测验算法,用于登录系统。对于注册过程,用户名和密码存储在一个文本文件中,并被读取以查看它们是否已经存在。如果是这种情况,则会告诉用户用户名或密码已经存在,并重复此操作,直到输入不存在的内容。发生这种情况时,将追加文本文件以添加用户名。然而,出于某种原因,程序不会检查用户的尝试是否已经存在于文本文件中,而只是将其添加到文本文件中,即使它已经存在。

登录过程是检查变量和文本文件中的字符串是否相同的第一部分,它工作正常。程序会检查文件中是否有用户名和密码,以及它们是否存在,然后登录。哈希代码用于测试,在程序运行时将被删除。

##Sign up

 if Option == ("2"):
     exit = False

     while exit == False:
      Userattempt = input("Please enter a username:\n>>> ")
      file = open("Usernames.txt","r")
      searchline = file.readline()
      Flag = False
      Username = ""

      for line in file:
          print(Userattempt, line)# used to see how the program goes through each line
          Username = str(line)
          if Userattempt == Username:
              Flag = True
              print("Yes", Userattempt, line)# Used to test after each line
          else:
              print("False")# Used to test after each line
          if Flag == True:
             print("That Username already exists, Please try another")
          else:
             #file.close()
             file = open("Usernames.txt","a")
             file.write(Userattempt)
             file.write("\n")
             print("Okay",Userattempt, "is your username")

             exit = True
             file.close()

此程序运行正常,但由于某些原因,它不会检查用户输入是否等于每一行,如果等于,则用于捕获用户名或密码已存在的标志不会更改。

共有1个答案

桂杰
2023-03-14

它不起作用的主要原因是您没有从文件中读取的行中删除换行符,因此它与用户输入不匹配。

程序逻辑还有其他问题。您不应该在for循环中写入新用户名,因为在到达文件末尾之前,您不知道用户名是否可用。

代替Flag变量,您可以使用块for循环。如果循环正常完成,而不是从突破语句中完成,则将运行此操作。然后,当在文件中找到匹配的行时,您将退出循环。\

通常最好使用with语句打开文件,并在完成后自动关闭。

##Sign up

if Option == ("2"):
     while True:
         Userattempt = input("Please enter a username:\n>>> ")
         with open("Usernames.txt","r") as file:
             for line in file:
                 Username = line.strip()
                 print(Userattempt, Username)# used to see how the program goes through each line
                 if Userattempt == Username:
                     print("That Username already exists, Please try another")
                     break # break out of for-loop
             else: # name not found, so add it
                 with open("Usernames.txt","a") as outfile:
                     outfile.write(Userattempt)
                     outfile.write("\n")
                     print("Okay",Userattempt, "is your username")
                break # break out of while-loop

 类似资料:
  • 问题内容: 我正在尝试检查用户名是否存在。当我打电话时,快照值始终可用,但是它将打印我的整个数据库,而不仅仅是我请求的数据。当我打电话时,它总是返回null。我尝试了很多方法来解决。 这是我的代码: 这是我的json树: 这是安全规则: 问题答案: 修改 JSON 树以包含一个单独的节点,即在您创建新用户时添加每个用户的用户名,在用户修改其用户名时进行修改… 要检查您的用户名是否已经存在: 通过操

  • 本文向大家介绍PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程,包括了PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程的使用技巧和注意事项,需要的朋友参考一下 PHP+Ajax检测用户名或邮件注册时是否已经存在是论坛或会员系统中常见的一个重要功能。本文就以实例形式简单描述这一功能的实现方法。具体步骤如下: 一、PHP检测页面 check.php页面代码如下: 二、Ajax验证页

  • 问题内容: 我想使用jQuery.validate验证数据库中是否存在用户名,所以这是我到目前为止的内容: jQuery的: check-username.php: 此代码始终显示一个错误,即使没有使用用户名也是如此。 我正在使用jQuery Mobile 1.9.1 提前致谢。 问题答案: 通过更改我使用的PHP技术,我设法使它起作用,这是我的PHP: 谢谢大家在这里的帮助:)

  • 本文向大家介绍Ajax验证用户名或昵称是否已被注册,包括了Ajax验证用户名或昵称是否已被注册的使用技巧和注意事项,需要的朋友参考一下 JavaScript中XMLHttpRequest对象是整个Ajax技术的核心,它提供了异步发送请求的能力 。而用户名或昵称的验证就可以使XMLHttpRequest对象实现。下面是个小例子。 页面: 简单的输入框 JS代码如下: getElementsByNam

  • 我需要一个PDO函数,如果用户course_id已经存在,它将返回false。 这是我的学生表列 标准标识 A这是我的课程表 课程编号 我还有报名表 id 我需要验证用户是否已经使用PHP PDO函数学习了一门课程,以及学习了特定课程的学生人数。

  • 本文向大家介绍使用struts2+Ajax+jquery验证用户名是否已被注册,包括了使用struts2+Ajax+jquery验证用户名是否已被注册的使用技巧和注意事项,需要的朋友参考一下 推荐阅读:JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册 在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题