鱼C论坛

 找回密码
 立即注册
查看: 1676|回复: 10

[已解决]十分紧急!求这个代码错误在哪

[复制链接]
发表于 2020-6-16 08:51:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下,十分感激

def main():
  flag = open("flag.txt")
  word = flag.read()
  if word == "0":
    print("首次启动!")
    flag.close()
    file = open("flag.txt", "w")  # 覆盖写模式,以重写的方式打开文件flag
    file.write("1")        # 将“1”写入falg文件中
    file.close()
    global admi
    admi={"root":"1234"}
    global user
    user={}
    print_login_menu()       
    user_select()       
  elif word == "1":
    print("欢迎回来!")
    print_login_menu()
    user_select()
  else:
    print("初始化参数错误!")

# 打印菜单
def print_login_menu():
  print("----用户选择----")
  print("1-管理员登录")
  print("2-普通用户登录")
  print("----------------")

# 用户选择
def user_select():
  while True:
    user_type_select = input("请选择用户类型:")
    if user_type_select == "1":               
      root_login()
      break
    elif user_type_select == "2":                     
      while True:
        select = input("是否需要注册?(y/n):")
        if select == "y" or select == "Y":
          user_register()
          user_login()
          break
        elif select == "n" or select == "N":
          user_login()
          break
        else:
          print("输入有误,请重新选择")
    else:
      print("输入有误,请重新选择")
  
      
# 管理员登录
def root_login():
  global admi
  while True:
    print()
    print("----管理员登陆----")
    admi_id = input("请输管理员名称:")
    admi_pwd = input("请输入密码:")
    if (admi_id,admi_pwd) in list(admi.items()):
      print("管理员登录成功!")
      break
    else:
      print("管理员登录失败,请重新登录。")
      
# 用户注册
def user_register():
  print()
  print("----用户注册----")
  user_id = input("请输入账户名:")
  user_pwd = input("请输入密码:")
  global user
  user[user_id]= user_pwd
                                                 
# 用户登录
def user_login():
  while True:
    print()
    print("----用户登录----")
    user_id = input("请输入账户名:")
    user_pwd = input("请输入密码:")
    global user
    pwd=user.get(user_id,0)
    if pwd==0:
      print("查无此人!")
    elif pwd==user_pwd:
      print("登录成功!")                               
      break                               
    else:                               
      print("密码不正确,请重新登录。")


admi={}
user={}
main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-16 08:54:37 | 显示全部楼层



急的话吧出现的问题或者报错内容一起发上来呀,这样才能更快的解决你的 问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-16 08:58:28 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-16 09:04 编辑



开始时候直接判断文本内容应该是否为空,判断是否为0不怎么合理吧,毕竟是首次打开,而且你如果为 0 那么就一直参数错误了

再者说你应该判断第一个字符是不是 1 而不是 整个文本 是否为 1 用索引 [0] 即可
def main():
    flag = open("flag.txt")
    word = flag.read()
    if word == "":
        print("首次启动!")
        flag.close()
        file = open("flag.txt", "w")  # 覆盖写模式,以重写的方式打开文件flag
        file.write("1")  # 将“1”写入falg文件中
        file.close()
        global admi
        admi = {"root": "1234"}
        global user
        user = {}
        print_login_menu()
        user_select()
    elif word[0] == "1":
        print("欢迎回来!")
        print_login_menu()
        user_select()
    else:
        print("初始化参数错误!")


# 打印菜单
def print_login_menu():
    print("----用户选择----")
    print("1-管理员登录")
    print("2-普通用户登录")
    print("----------------")


# 用户选择
def user_select():
    while True:
        user_type_select = input("请选择用户类型:")
        if user_type_select == "1":
            root_login()
            break
        elif user_type_select == "2":
            while True:
                select = input("是否需要注册?(y/n):")
                if select == "y" or select == "Y":
                    user_register()
                    user_login()
                    break
                elif select == "n" or select == "N":
                    user_login()
                    break
                else:
                    print("输入有误,请重新选择")
        else:
            print("输入有误,请重新选择")


# 管理员登录
def root_login():
    global admi
    while True:
        print()
        print("----管理员登陆----")
        admi_id = input("请输管理员名称:")
        admi_pwd = input("请输入密码:")
        if (admi_id, admi_pwd) in list(admi.items()):
            print("管理员登录成功!")
            break
        else:
            print("管理员登录失败,请重新登录。")


# 用户注册
def user_register():
    print()
    print("----用户注册----")
    user_id = input("请输入账户名:")
    user_pwd = input("请输入密码:")
    global user
    user[user_id] = user_pwd


# 用户登录
def user_login():
    while True:
        print()
        print("----用户登录----")
        user_id = input("请输入账户名:")
        user_pwd = input("请输入密码:")
        global user
        pwd = user.get(user_id, 0)
        if pwd == 0:
            print("查无此人!")
        elif pwd == user_pwd:
            print("登录成功!")
            break
        else:
            print("密码不正确,请重新登录。")


admi = {}
user = {}
main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 09:05:26 | 显示全部楼层
本帖最后由 热气球 于 2020-6-16 09:06 编辑

word = flag.read()
word的长度是包含一个换行符的,所以其长度是2
"0"或者"1"的长度是1,其不包含换行符,所以二者比对的时候是不会相等的
建议转成int比较
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-16 09:09:48 | 显示全部楼层
Twilight6 发表于 2020-6-16 08:58
开始时候直接判断文本内容应该是否为空,判断是否为0不怎么合理吧,毕竟是首次打开,而且你如果为 0 那 ...

请问可以具体说一下哪个第几行吗 我是个纯新手 十分抱歉打扰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-16 09:11:17 | 显示全部楼层
热气球 发表于 2020-6-16 09:05
word = flag.read()
word的长度是包含一个换行符的,所以其长度是2
"0"或者"1"的长度是1,其不包含换行符, ...

麻烦可以具体说哪一行如何改吗 我是个纯新手 十分抱歉再次打扰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 09:13:22 | 显示全部楼层
夏想秃秃头 发表于 2020-6-16 09:11
麻烦可以具体说哪一行如何改吗 我是个纯新手 十分抱歉再次打扰

def main():
    flag = open("flag.txt")
    word  = flag.read()
    if word == "0\n" or  word == "0":
        print("首次启动!")
        flag.close()
        file = open("flag.txt", "w")  # 覆盖写模式,以重写的方式打开文件flag
        file.write("1")  # 将“1”写入falg文件中
        file.close()
        global admi
        admi = {"root": "1234"}
        global user
        user = {}
        print_login_menu()
        user_select()
    elif word == "1\n" or word == "1":
        print("欢迎回来!")
        print_login_menu()
        user_select()
    else:
        print("初始化参数错误!")


# 打印菜单
def print_login_menu():
    print("----用户选择----")
    print("1-管理员登录")
    print("2-普通用户登录")
    print("----------------")


# 用户选择
def user_select():
    while True:
        user_type_select = input("请选择用户类型:")
        if user_type_select == "1":
            root_login()
            break
        elif user_type_select == "2":
            while True:
                select = input("是否需要注册?(y/n):")
                if select == "y" or select == "Y":
                    user_register()
                    user_login()
                    break
                elif select == "n" or select == "N":
                    user_login()
                    break
                else:
                    print("输入有误,请重新选择")
        else:
            print("输入有误,请重新选择")


# 管理员登录
def root_login():
    global admi
    while True:
        print()
        print("----管理员登陆----")
        admi_id = input("请输管理员名称:")
        admi_pwd = input("请输入密码:")
        if (admi_id, admi_pwd) in list(admi.items()):
            print("管理员登录成功!")
            break
        else:
            print("管理员登录失败,请重新登录。")


# 用户注册
def user_register():
    print()
    print("----用户注册----")
    user_id = input("请输入账户名:")
    user_pwd = input("请输入密码:")
    global user
    user[user_id] = user_pwd


# 用户登录
def user_login():
    while True:
        print()
        print("----用户登录----")
        user_id = input("请输入账户名:")
        user_pwd = input("请输入密码:")
        global user
        pwd = user.get(user_id, 0)
        if pwd == 0:
            print("查无此人!")
        elif pwd == user_pwd:
            print("登录成功!")
            break
        else:
            print("密码不正确,请重新登录。")


admi = {}
user = {}
main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 09:14:39 | 显示全部楼层
夏想秃秃头 发表于 2020-6-16 09:09
请问可以具体说一下哪个第几行吗 我是个纯新手 十分抱歉打扰


第四行:
if word == "0"
改成:
if word == ""

第十六行:
elif word == "1"
改成:
elif word[0] == "1"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-16 09:17:18 | 显示全部楼层
热气球 发表于 2020-6-16 09:13
def main():
    flag = open("flag.txt")
    word  = flag.read()

十分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 09:18:32 | 显示全部楼层    本楼为最佳答案   

采纳下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-16 09:18:55 | 显示全部楼层

十分感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表