夏想秃秃头 发表于 2020-6-16 08:51:25

十分紧急!求这个代码错误在哪

代码如下,十分感激

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

Twilight6 发表于 2020-6-16 08:54:37




急的话吧出现的问题或者报错内容一起发上来呀,这样才能更快的解决你的 问题

Twilight6 发表于 2020-6-16 08:58:28

本帖最后由 Twilight6 于 2020-6-16 09:04 编辑



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

再者说你应该判断第一个字符是不是 1 而不是 整个文本 是否为 1 用索引 即可

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 == "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_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()

热气球 发表于 2020-6-16 09:05:26

本帖最后由 热气球 于 2020-6-16 09:06 编辑

word = flag.read()
word的长度是包含一个换行符的,所以其长度是2
"0"或者"1"的长度是1,其不包含换行符,所以二者比对的时候是不会相等的
建议转成int比较

夏想秃秃头 发表于 2020-6-16 09:09:48

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

请问可以具体说一下哪个第几行吗 我是个纯新手 十分抱歉打扰

夏想秃秃头 发表于 2020-6-16 09:11:17

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

麻烦可以具体说哪一行如何改吗 我是个纯新手 十分抱歉再次打扰

热气球 发表于 2020-6-16 09:13:22

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

def main():
    flag = open("flag.txt")
    word= flag.read()
    if word == "0\n" orword == "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_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()

Twilight6 发表于 2020-6-16 09:14:39

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

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

第十六行:
elif word == "1"
改成:
elif word == "1"

夏想秃秃头 发表于 2020-6-16 09:17:18

热气球 发表于 2020-6-16 09:13
def main():
    flag = open("flag.txt")
    word= flag.read()


十分感谢!

热气球 发表于 2020-6-16 09:18:32

夏想秃秃头 发表于 2020-6-16 09:17
十分感谢!

采纳下{:5_109:}

夏想秃秃头 发表于 2020-6-16 09:18:55

Twilight6 发表于 2020-6-16 09:14
第四行:

改成:


十分感谢!!
页: [1]
查看完整版本: 十分紧急!求这个代码错误在哪