编辑:似乎人们不明白这一点...... 我有三个不同的函数可以调用一个常用函数。如何根据用户角色从常用功能返回到上一个功能?
我有这样的登录功能:
def login():
users = open('users.txt', 'r').readlines()
username = input("\nKorisnicko ime: ")
password = input("Lozinka: ")
for i in users:
users=i.strip("\n").split("|")
if (username == users[0] and password == users[1]):
print("\nDobrodosli: " + users[2].title(), users[3].title()+"\n" )
if users[4] == 'kupac':
buyer_menu()
elif users[4] == 'prodavac':
seller_menu()
elif users[4] == 'menadzer':
manager_menu()
买家,卖家和经理的功能如下:
def buyer_menu():
print("=== BUYER ===")
print("1. Search movie")
print("2. Search moive")
print("7. Logout")
print("8. Exit")
options = input("\nChoose option >>> ")
if options == '1':
search_movie()
elif options == '2':
search.search_movie()
...
elif options == '8':
print ("Predstava je otkazana. Nestalo struje.")
exit()
else:
print("Nepostojeca opcija!\n")
buyer_menu()
卖方。
def seller_menu():
print("=== SELLER ===")
print("1. Search movie")
print("2. Search ticket")
print("7. Back to main menu")
options = input("\nChoose option >>> ")
if options == '1':
search_movie()
elif options == '2':
search.search_movie()
elif options == '7':
main()
elif options == '8':
print ("Predstava je otkazana. Nestalo struje.")
exit()
else:
print("Nepostojeca opcija!\n")
buyer_menu()
管理器:
def manager_menu():
print("=== MANAGE ===")
print("1. Search movie")
print("2. Search users")
print("8. Exit")
options = input("\nChoose option >>> ")
if options == '1':
search_movie()
elif options == '2':
search.search_users()
elif options == '8':
print ("Predstava je otkazana. Nestalo struje.")
exit()
else:
print("Nepostojeca opcija!\n")
buyer_menu()
嗨,你可以看到所有trhee类型的用户都有“搜索电影”选项,其功能如下:
def search_movie():
print("\n1. Search movie title")
print("2. Search movie genre")
print("8. Back to main menu")
options = input("\nUnesite kriterijum za pretragu >>> ")
if options == '1':
search_movie_title()
elif options == '2':
search_movie_genre()
现在,如果你看到,问题是返回主菜单的功能....
例如:如果我以买家身份登录并选择了搜索电影选项,但我想返回主菜单,如何备份buyer_menu():
等等其他类型的用户...... seller_menu():
上的卖家和manager_menu():
上的经理
答案 0 :(得分:1)
在尝试返回CLI菜单时,最佳做法是从while循环中激活此类菜单。
if users[4] == 'kupac':
# Or some other suitable condition.
while not exit:
buyer_menu()
这样,一旦用户到达调用堆栈的末尾,用户将回退到login
函数。然后下一个while
循环迭代将它们带回正确的菜单。
"7. Back to main menu"
选项应该只允许当前函数完成,并返回调用堆栈,返回到while循环,然后再循环调用用户角色的正确方法。我们这样做是为了在堆栈溢出之前不会不断增加调用堆栈。
答案 1 :(得分:1)
您不能将上一个菜单改为search_movie()
吗?
def search_movie(user_menu):
#...#
elif options == '8'
user_menu() # call the previous user menu again
当您致电search_movie()
时,只需输入上一个功能名称:
def buyer_menu():
#...#
if options == '1':
search_movie(buyer_menu) #include the context
elif options == '2':
search.search_movie(buyer_menu) #include the context
#...#
你的代码看起来好像可以用来进行一些优化,但这不是问题的一部分,对我来说太麻烦了。
答案 2 :(得分:1)
第一个解决方案: 您可以通过以下函数传递用户对象:
def login():
users = open('users.txt', 'r').readlines()
username = input("\nKorisnicko ime: ")
password = input("Lozinka: ")
for i in users:
users=i.strip("\n").split("|")
if (username == users[0] and password == users[1]):
print("\nDobrodosli: " + users[2].title(), users[3].title()+"\n" )
if users[4] == 'kupac':
buyer_menu(users[4])
elif users[4] == 'prodavac':
seller_menu(users[4])
elif users[4] == 'menadzer':
manager_menu(users[4])
使用此解决方案,您将用户角色传递给函数,这就是新功能将如何知道此用户角色的用途。
解决方案#2: 由于您将文件用作数据库,因此您还可以在某个currentUser.txt文件中保存用户登录的内容(仅限其凭据),并且每次调用一些读取该文件的函数来检查谁登录。
解决方案#3 :创建一个仅检查用户角色的功能,然后回复此基本'菜单。像这样:
def showStartMenu(currentUsersUsername):
users = open('users.txt', 'r').readlines()
for i in users:
users=i.strip("\n").split("|")
if (currentUsersUsername== users[0]):
if users[4] == 'kupac':
buyer_menu()
elif users[4] == 'prodavac':
seller_menu()
elif users[4] == 'menadzer':
manager_menu()
请记住,您需要传递当前用户的用户名。因此,只需使用与解决方案2和3的组合
编辑:向第一个解决方案添加示例
将用户[4]发送给函数后,您可以像这样使用它:
def seller_menu(usersRole):
print("=== SELLER ===")
print("1. Search movie")
print("2. Search ticket")
print("7. Back to main menu")
options = input("\nChoose option >>> ")
if options == '1':
search_movie(usersRole)
elif options == '2':
search.search_movie()
elif options == '7':
main()
elif options == '8':
print ("Predstava je otkazana. Nestalo struje.")
exit()
else:
print("Nepostojeca opcija!\n")
buyer_menu()
现在搜索菜单:
def search_movie(usersRole):
print("\n1. Search movie title")
print("2. Search movie genre")
print("8. Back to main menu")
options = input("\nUnesite kriterijum za pretragu >>> ")
if options == '1':
search_movie_title()
elif options == '2':
search_movie_genre()
elif options == '8':
if usersRole == 'kupac':
buyer_menu()
elif usersRole == 'prodavac':
seller_menu()
elif usersRole == 'menadzer':
manager_menu()