mumei2018 发表于 2023-6-23 14:37:28

用土法实现41课动动手注册登录 这个代码有问题吗 用蠢法实现功能是浪费时机吗?

本帖最后由 mumei2018 于 2023-6-23 14:38 编辑

用土法实现41课动动手注册登录 这个代码有问题吗?算是成功实现功能了吗? 老是爱用蠢法实现功能是浪费时机吗?


print('welcome to FishC\n====================\n1.sign up\n2.sign in\n3.exit')
x = int(input('enter your choice:'))
namelist = []#创建用户列表
passwordlist = []#创建密码列表
while x != 3:#循环
    if x == 1:
      print('====================')
      name = input('enter your user name:')
      namelist.append(name)#增加用户
      print(f'your user name is {name}.')
      print(namelist)#没用的 看看而已
      passw = input('enter your password:')
      print('congratulations')
      passwordlist.append(passw)#增加用户对应密码
      print(passwordlist)#没用的 看看而已
      print('====================')
    print('welcome to FishC\n====================\n1.sign up\n2.sign in\n3.exit')
    x = int(input('enter your choice:'))
    if x == 2:
      named = input('enter your user name:')
      if named not in namelist:#是否有该用户
            print('erro : user nor found.')
      else:
            namelist_index = namelist.index(named)#查找用户名下标以匹配密码
            print(namelist_index)#没用的 看看而已
            passwd = input('enter your password:')
            if passwd in passwordlist:#检查输入密码是否在密码列表内
                passwordlist_index = passwordlist.index(passwd)#查找输入密码下标
                if passwordlist_index == namelist_index:#与用户名匹配
                  print('welcome home')
                else:#匹配不成功
                  print('try again.')
            else:#密码完全错误
                print('try again')
print('see you.')#指令为3 再见
#在程序结束前可创建多个用户 问题是第一次没法直接进入指令2用户登录、 指令为3程序结束后 所有用户就消失了

陶远航 发表于 2023-6-23 14:38:48

这段代码实现了一个简单的注册登录系统,但是存在一些问题和改进的空间。

问题:
1. 用户信息没有进行持久化保存,程序结束后所有用户就消失了。
2. 注册时没有进行重复用户名的验证,可能会导致用户名的重复。
3. 密码验证部分只判断了密码是否在密码列表中,没有考虑到密码与用户名的对应关系。

改进建议:
1. 可以使用文件或数据库等方式来保存用户信息,使用户数据持久化。
2. 注册时可以添加用户名的唯一性验证,确保用户名不重复。
3. 可以将用户名和密码存储为字典的键值对,便于后续验证时的匹配。
4. 可以考虑使用函数和模块化编程,提高代码的可读性和可维护性。

mumei2018 发表于 2023-6-23 14:47:59

陶远航 发表于 2023-6-23 14:38
这段代码实现了一个简单的注册登录系统,但是存在一些问题和改进的空间。

问题:


密码的匹配 首先判断输入密码是否在列表里 没在的话直接判断为错误 在的话再通过下标匹配用户名和密码
才学到函数 数据库那些还不会{:5_100:}

陶远航 发表于 2023-6-23 14:51:46

mumei2018 发表于 2023-6-23 14:47
密码的匹配 首先判断输入密码是否在列表里 没在的话直接判断为错误 在的话再通过下标匹配用户名和密码
...

根据你的描述,密码的匹配部分存在一些问题。下面是对代码进行修改的建议:

print('Welcome to FishC\n====================\n1. Sign up\n2. Sign in\n3. Exit')

namelist = []       # 创建用户名列表
passwordlist = []   # 创建密码列表

while True:      # 使用无限循环,直到用户选择退出
    x = int(input('Enter your choice: '))

    if x == 1:   # 注册
      print('====================')
      name = input('Enter your username: ')
      
      if name in namelist:# 验证用户名是否已存在
            print('Error: Username already exists.')
            continue
      
      namelist.append(name)# 增加用户名
      print(f'Your username is {name}.')
      
      passw = input('Enter your password: ')
      passwordlist.append(passw)# 增加用户对应密码
      print('Congratulations! You have signed up successfully.')
      print('====================')

    elif x == 2:   # 登录
      named = input('Enter your username: ')

      if named not in namelist:# 验证用户名是否存在
            print('Error: Username not found.')
            continue

      passwd = input('Enter your password: ')
      
      namelist_index = namelist.index(named)   # 查找用户名下标以匹配密码
      
      if passwd == passwordlist:   # 通过下标匹配用户名和密码
            print('Welcome home!')
      else:
            print('Error: Incorrect password.')

    elif x == 3:   # 退出
      break

    else:
      print('Error: Invalid choice.')

print('See you.')
这样修改后,当用户选择登录时,首先会验证用户名是否存在,然后再通过下标匹配用户名和密码进行验证。这样可以避免密码列表中的密码与用户名无法匹配的问题。

关于函数和数据库的学习,它们是编程中非常重要的概念和工具。学习函数可以帮助你更好地组织和重用代码,而学习数据库可以帮助你存储和管理大量数据。它们可以提高代码的可读性、可维护性和功能扩展性。你可以逐步学习它们,通过实践项目和参考文档来提升你的编程技能。
页: [1]
查看完整版本: 用土法实现41课动动手注册登录 这个代码有问题吗 用蠢法实现功能是浪费时机吗?