志存高远的zxs 2023-02-23 13:09 采纳率: 26.7%
浏览 22

python注销用户功能出错

我又来了。
这次就言简意赅吧:
新增了一个注销功能,但是出错了,代码与出错截图都如下,希望能帮我指出错误并改正代码:

from os import system
from sys import exit
from random import randint
import time
from time import sleep
MAX_USERS=2
user_file='user.txt'
error_time=4
mode=False
user_name=''
user_passwd=[None,None]
try:
   f=open(user_file,'r')
   user_dict=eval(f.read())
   f.close()
except FileNotFoundError:
   f=open(user_file,'w')
   f.write("{'Administrator':'123456'}")
   f.close()
   user_dict={'Administrator':'123456'}
print("""菜单:
登录/注册:Y
注销:N""")
while True:
   xb=input("请输入[Y/N]:")
   if xb=="Y":
      while True:
         user_name=str(input('请输入用户名>'))
         if user_name not in user_dict:
            if len(user_dict)>=MAX_USERS:
                print("用户不存在,且数量已达到最大值,无法继续注册,请输入正确用户名!")
                time.sleep(1)
                continue
            else:
                print("用户不存在,将执行注册操作。")
                if ' ' in user_name:
                   print('\aErr: 用户名中不能有空格')
                elif user_name=='':
                   print('\aErr: 用户名不能为空')
                else:    
                   while True:
                      user_passwd[0]=str(input('请设置密码>'))
                      if ' ' in str(user_passwd[0]):
                         print('\aErr: 密码中不能含有空格。')
                      elif user_passwd[0]=='':
                         print('\aErr: 密码不能为空。')
                      elif len(user_passwd[0])<6:
                         print('\aErr: 密码长度太短,至少6位。')
                      else:
                         user_passwd[1]=str(input('请再次输入密码>'))
                         if user_passwd[0]!=user_passwd[1]:
                            print('\aErr: 两次输入的密码不一致。')
                         else:
                            print('注册成功!\n\n请重新登录:')
                            user_dict[user_name]=user_passwd[0]            
                            f=open(user_file,'w')
                            f.write(str(user_dict))
                            f.close()
                            break
         else:    
            while error_time!=0:
               user_passwd[0]=input('请输入密码 4次机会/'+str(error_time)+'>')
               if user_passwd[0]!=user_dict[user_name]:
                  print('\aErr: 密码错误')
                  error_time=error_time-1
               else:
                  mode=True
                  break
            else:
               print('\n\a\a因错误次数过多,进行验证码确认')
               import random
               mc=''  
               for i in range(0,6):
                  ms=random.randint(0,9) 
                  mc+=str(ms)
               print("将会在15秒内发送验证码,请耐心等待...")
               eh=random.randint(1,15)
               time.sleep(eh)
               print(mc)
               mi=input("请输入验证码:")
               if mi!=mc:
                  print('\aErr: 验证码错误!')
                  for i in range(3,-1,-1):
                     print('\b'*23+'程序将在 '+str(i+1)+' 秒后退出...',end='',flush=True)
                     sleep(1)
                  exit(0)
               else:
                  error_time=4
         if mode==True:
            break
      print('登录成功...')
      break
   elif xb=="N":
      while True:
               xc=input("请输入要注销用户名:")
               xv=input("请输入要注销用户名的密码:")
               if xc not in user_dict:
                  print("用户名或密码错误,请重新输入!")
               else:
                  if xv!=user_dict[user_name]:
                     print("用户名或密码错误,请重新输入!")
                  else:
                     dict=user_dict
                     dict.clear()
                     f=open(user_file,'w')
                     f.write("{'Administrator':'123456'}")
                     f.close()
                     user_dict={'Administrator':'123456'}
                     print("注销成功,去注册登录你的新用户吧!")
                     mode=True
                     break
   else:
      print("仔细看看要打什么哦!")
      continue

img

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-23 13:35
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    在代码的第51行,输入用户名和密码之后,程序执行了登录操作,然后退出了while True循环。在第86行,您又开始了一个新的while True循环,但程序在这个循环中并没有退出,因此您需要在第98行之前添加一行代码来退出该循环。另外,您使用了一个名为“dict”的变量,这会覆盖Python的内置dict函数,因此应该更改为其他名称。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月23日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证