Вызов функции displayMenu () после входа пользователя - PullRequest
0 голосов
/ 01 апреля 2020

Пользователь должен войти в систему со своим именем пользователя и паролем. Если пользователь является администратором, он должен получить свое собственное меню с дополнительными опциями. У меня проблема в том, что при успешном входе в систему displayMenu () или displayMenu_Admin () не вызывается. Существует текстовый файл с именем 'user.txt', в котором сохраняются имя пользователя и пароли.

#The user should be prompted to enter a username and
#password. A list of valid usernames and passwords are stored in "user.txt".
#Display an appropriate error message if the
#user enters a username that is not listed in user.txt or enters a valid
#username but not a valid password. The user should repeatedly be
#asked to enter a valid username and password until they provide
#appropriate credentials.

def login():
        username = input("Please enter your username?:\n")
        password = input("Please enter your password?:\n")

        for line in open("user.txt","r").readlines():
                field = line.strip().split(",")
                if username == field[0] and password == field[1]:
                        print("Hello " + username + ", welcome back!\n")
                        return True
        if field[0] == "admin":
                displayMenu_Admin()
        else:
                displayMenu()
        print("Username or Password Incorrect\n")
        return False
login()

def displayMenu_Admin():
        global menu_input

        menu_input = input("Please enter one of the following options:\n r - register user\n a - add task\n va- view all tasks\n vm - view my tasks\n s - statistics\n e - exit\n")

        if menu_input == "r":
                register()
        elif menu_input == "a":
                add_task()
        elif menu_input == "va":
                view_all()
        elif menu_input == "vm":
                view_more()
        elif menu_input == "s":
                statistic() 
        elif menu_input == "e":
                exit()

        return menu_input

#A menu should be displayed once the user has successfully logged in.

def displayMenu():
        global menu_input

        menu_input = input("Please enter one of the following options:\n a - add task\n va- view all tasks\n vm - view my tasks\n e - exit\n")

        if menu_input == "a":
                add_task()
        elif menu_input == "va":
                view_all()
        elif menu_input == "vm":
                view_more()
        elif menu_input == "e":
                exit()

        return menu_input

Идея заключалась в том, что пользователь должен войти в систему, а если пользователь является пользователем 'admin', другой пользователь меню должно отображаться. Любой совет или помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Исправление, как указано выше, перемещало 'return True' в после displayMenu ()

def login():
        username = input("Please enter your username?:\n")
        password = input("Please enter your password?:\n")

        for line in open("user.txt","r").readlines():
                field = line.strip().split(",")
                if username == field[0] and password == field[1]:
                        print("Hello " + username + ", welcome back!\n")

                        if field[0] == "admin":
                            displayMenu_Admin()
                        else:
                            displayMenu()
                        return True
        print("Username or Password Incorrect\n")
        return False
0 голосов
/ 01 апреля 2020

Ваша проблема в том, что вы возвращаетесь, если вход выполнен успешно, поэтому блок, который вызывает функции отображения, никогда не выполняется.

def login():
        username = input("Please enter your username?:\n")
        password = input("Please enter your password?:\n")

        for line in open("user.txt","r").readlines():
                field = line.strip().split(",")
                if username == field[0] and password == field[1]:
                        print("Hello " + username + ", welcome back!\n")
                        return True # <-- this is causing your problems
        if field[0] == "admin":
                displayMenu_Admin()
        else:
                displayMenu()
        print("Username or Password Incorrect\n")
        return False

Чтобы исправить ваши проблемы, просто вернитесь после отображения меню


def login():
        username = input("Please enter your username?:\n")
        password = input("Please enter your password?:\n")

        for line in open("user.txt","r").readlines():
                field = line.strip().split(",")
                if username == field[0] and password == field[1]:
                        print("Hello " + username + ", welcome back!\n")

                        if field[0] == "admin":
                            displayMenu_Admin()
                        else:
                            displayMenu()
                        return True
        print("Username or Password Incorrect\n")
        return False

Однако, может быть, лучше вместо этого вернуть кортеж и позволить кому-то еще обрабатывать элементы меню, такие как:

def login():
        username = input("Please enter your username?:\n")
        password = input("Please enter your password?:\n")

        for line in open("user.txt","r").readlines():
                field = line.strip().split(",")
                if username == field[0] and password == field[1]:
                        print("Hello " + username + ", welcome back!\n")
                        return True, field[0]== "admin"

        return False, False

login_success, is_admin = login()

if login_success and is_admin:
   displayMenu_Admin()
elif login_success:
   displayMenu()
else:
   print("Username or Password Incorrect\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...