Assignment 2: Multilevel menu
(1) Three-level menu
(2) You can choose to enter each sub-menu at the next time.
(3) Necessary New Knowledge Points: Lists, Dictionaries
Requirements: Input b returns to the upper level, input q exits the whole program
Thought: The first level of the three-level menu is province, the second level is city, and the third level is county. Users can choose what they want to see according to the content. Therefore, to use the while cycle to operate, there must be two levels of cycle. The first level is b-responsible, the second level is q-responsible. If you want to quit the whole cycle, input Q to end the whole cycle. Input B ends the inner loop, and after jumping out of the inner loop, the following loop will continue to execute.
The flow chart is as follows:
Above is a general flow chart of the program:
Process:
(1) First of all, we should have a dictionary to store three-level menus.
(2) Display the content of the first-level menu;
(3) The user enters the contents of the first-level menu for viewing;
(4) Display the content of the second-level menu;
(5) User input to view secondary menu content
(6) Display three-level menu content;
(7) Users view the corresponding contents of the three-level menu.
The code is as follows:
import collections #Import collections for importing ordered Dictionaries dic = collections.OrderedDict() #Ordered dictionary dic["Henan"] = { "Nanyang":["Dengzhou","Nanzhao","Xixia","Tongbai","Newfield","Fangcheng","Zhenping","wancheng district"], "Luoyang":["Old Town","Mengjin County","Yiyang County","Yichuan County","Luoning County","Luanchuan County","Luolong District"], } dic["Hunan"] = { "Changsha":["kaifu district","Wangcheng District","Yuelu District","furong district","Ningxiang County","Tianxin District","Xingsha"], "Loudi":["Lianyuan","Shuangfeng","Lengshuijiang City"], } dic["Guangdong"] = { "Guangzhou":["Yuexiu District","Huadu District","Tianhe District","Zengcheng District"], "Shenzhen":["luohu district","Futian District","Baoan District","Yantian district","longgang district","Longhua District","Pingshan District"], } active = True #identifier d1 = collections.OrderedDict() #Define an empty dictionary where the user stores first-level menu content d2 = collections.OrderedDict() #Define an empty ordered dictionary for storing secondary menus d3 = [] #Define an empty list for storing three-level menus while active: #Enter Level 1 Menu print("The name of a province.") for index1,province in enumerate(dic.keys(),1): print(" %s %s "%(index1,province)) d1[index1] = province #Put the province number and its corresponding name in the dictionary. num1 = input("Please enter the province number you want to see:") if num1.isdigit(): #Determine whether user input is a digital number if int(num1) > len(d1) or int(num1) < 1: print("Sorry, the number you entered is incorrect. Please re-enter it.") else: print(d1[int(num1)]) else: if num1 == "q": active = False else: print("You did not enter a number, please enter the correct number!") while active: #Type in Level 2 Menu print("The name of the city.") for index2,city in enumerate(dic[d1[int(num1)]].keys(),1): print(" %s %s " % (index2, city)) d2[index2] = city num2 = input("Please enter the number of the city you want to see:") if num2.isdigit(): if int(num2) > len(d2) or int(num2) < 1: print("The number of the city you entered is incorrect. Please re-enter it!") else: print(d1[int(num1)]," ",d2[int(num2)]) else: if num2 == "b": #If the user enters b to exit the current loop, call it to the previous loop break elif num2 == "q": active = False else: print("The number you entered is incorrect. Please enter the correct number.") while active: #Enter the three-level menu print("County Number Names of counties and districts") d3 = dic[d1[int(num1)]][d2[int(num2)]] for index3,place in enumerate(d3,1): print(" %s %s " % (index3, place)) num3 = input("Please enter the county you want to inquire about./Area number:") if num3.isdigit(): #Determine whether the string entered by the user is in digital format if int(num3) > len(d3) or int(num3) < 1: print("The inquiry number you entered exceeds the range, please re-enter it!") else: print(d1[int(num1)], " ", d2[int(num2)]," ",d3[int(num3)-1]) else: if num3 == "b": break elif num3 == "q": active = False else: print("The inquiry number format you entered is incorrect. Please re-enter it!")
In the code above, we have three menus and three loops. Each loop corresponds to the corresponding menu. It can terminate its own cycle and all loops of the system in its own loop. In addition, we often use input() to input numbers. In this case, we input character words. The letter "b" and the character number, if not judged, will cause the operation, because the character alphabet format can not be int(). Therefore, we first determine whether the user input is a number.
import sys account_file = "user_file" locked_file = "lock_file" def deny_account(username): print("Your user has been locked in!") with open(locked_file,"a") as deny_f: deny_f.write("\n" + username) def main(): retry_count = 0 retry_limit = 3 while retry_count < retry_limit: username = input("\033[32:lm enter one user name:\033[om") with open(locked_file,"r") as lock_f: #Use with file opening to prevent forgetting f.close() to close files """ lines = [] for line in lock_f.readlines(): lines.append(line.strip()) if username in lines: """ for line in lock_f.readlines(): if len(line) == 0: continue if username == line.strip(): sys.exit("\033[32:lm user %s It's locked!\033[0m" %username) if __name__ == "__main__": main()