最近在學Python,嘗試著用for和while迴圈做一個簡單的學生管理系統,現在遇到的問題是沒法限定輸入的數據類型和從for迴圈中跳出 第一個限定是:如果沒有沒有輸入整數,程式直接報錯,在其中使用了轉換,代碼18行 第二個跳出for迴圈:目的是要對錄入的信息進行一個初步的判斷,確保關鍵信息不重覆 ...
最近在學Python,嘗試著用for和while迴圈做一個簡單的學生管理系統,現在遇到的問題是沒法限定輸入的數據類型和從for迴圈中跳出
第一個限定是:如果沒有沒有輸入整數,程式直接報錯,在其中使用了轉換,代碼18行
第二個跳出for迴圈:目的是要對錄入的信息進行一個初步的判斷,確保關鍵信息不重覆
這個管理系統,涉及的到就是先定義字典grade,再將字典grade使用append()函數添加到列表student,然後通過for迴圈遍曆數組,將
字典取出來sname,最後對比輸入的名字和字典sname中“姓名”鍵(key)對應的值(value),這樣就做到了數據的匹配查詢
1 '''如果是將這個系統改成績查詢的,又該怎麼做,字典的話如何進行疊加''' 2 3 #定義信息列表 4 5 print('歡迎進入學生成績管理系統!\n\t************\n請查看你能進行的操作\n\t************') 6 menu = ('1.錄入','2.查詢','3.修改','4.刪除','5.預覽','6.退出') 7 orderid = (1,2,3,4,5,6) #操作的步驟選擇 8 student = [] 9 a = 1 10 m = 0 11 n = 0 12 while a == 1: #目的是使操作一直在使用,迴圈,最後不操作退出 13 for opration in menu: 14 print(opration) 15 order = input('請輸入序號,進行你想要的操作:') 16 '''while True: 17 order = input('請輸入序號,進行你想要的操作:') 18 try: 19 order = int(order) 20 break 21 except: 22 print("pls enter number") 23 continue''' 24 #order = input('請輸入序號,進行你想要的操作:')#限制輸入的數據類型 25 if order.isdigit(): 26 order = int(order) 27 else: 28 print('請輸入正確的數字') 29 continue 30 31 if int(order) in orderid: 32 33 while int(order) == 1: 34 valid = 0 35 while not valid: 36 valid = 1 37 name = input('請輸入學生的姓名:')# 數據錄入#需要解決重覆錄入的問題 38 for stu_name in student: 39 if name == stu_name['姓名']: 40 stu_id = input('該學生已經錄入信息,請確認是否重覆錄入,並比較學號') 41 if stu_id == stu_name['學號']: 42 print('重覆錄入!請錄入下一個') 43 valid = 0 44 break 45 46 print('請繼續接下來的信息錄入!') 47 48 id = input('請輸入學生號:') 49 classid = input('請輸入學生的班級:') 50 Chinese = float(input('請輸入語文成績:')) 51 Math = float(input('請輸入數學成績:')) 52 English = float(input('請輸入英語成績:')) 53 Physical = float(input('請輸入物理成績:')) 54 Chemistry = float(input('請輸入化學成績:')) 55 Biological = float(input('請輸入生物成績:')) 56 Score = round((Chinese * 3 + Math * 3 + English * 3 + Physical * 2 + Chemistry * 2 + Biological * 2) / 15,2) 57 58 #定義一個新的字典 59 grade = {} 60 grade['姓名'] = name 61 grade['學號'] = id 62 grade['班級'] = classid 63 grade['語文'] = Chinese 64 grade['數學'] = Math 65 grade['英語'] = English 66 grade['物理'] = Physical 67 grade['化學'] = Chemistry 68 grade['生物'] = Biological 69 grade['加權總分'] = Score 70 71 # 將一個字典,添加到列表中 72 student.append(grade) 73 74 print('你已經成功錄入了一份信息,繼續錄入請按Y,返回菜單請按N') 75 exit = input() 76 if exit == 'y': 77 continue 78 else: 79 break 80 81 82 while int(order) == 2: 83 84 name = input("請輸入你要查找的學生的姓名:") 85 n += 1 86 if n > 2: 87 print('你已經重覆輸錯三次,請確認姓名再進行查詢操作') 88 n = 0 89 continue 90 91 t_name = 0#輸入正確標誌位 92 93 for sname in student: 94 if name == sname['姓名']: 95 print('該同學的記錄是:',sname) 96 #print('%s同學的記錄是:學號%s 班級%s 語文%.2f 數學%.2f 英語%.2f 物理%.2f 化學%.2f 生物%.2f ' 97 #'加權總分%.2f' % (name,sname['學號'],sname['班級'],sname['語文'],sname['數學'],sname['物理'],sname['化學'],sname['生物'],sname['加權總分'])) 98 99 t_name = 1 100 101 break 102 103 if t_name == 0: 104 exit = input('查詢錯誤,請重確認要查詢的學生姓名,退回主菜單請按N') 105 if exit == 'n': 106 break 107 continue 108 else: 109 exit = input('查詢成功,輸入名字繼續查詢,退回主菜單請按N') 110 if exit == 'n': 111 break 112 continue 113 114 115 while int(order) == 3: 116 name = input("請輸入你要修改信息的學生的姓名:") 117 118 t_name = 0 # 輸入正確標誌位 119 120 for sname in student: 121 if name == sname['姓名']: 122 id = input('請輸入學生號:') 123 classid = input('請輸入學生的班級:') 124 Chinese = float(input('請輸入語文成績:')) 125 Math = float(input('請輸入數學成績:')) 126 English = float(input('請輸入英語成績:')) 127 Physical = float(input('請輸入物理成績:')) 128 Chemistry = float(input('請輸入化學成績:')) 129 Biological = float(input('請輸入生物成績:')) 130 Score = round( 131 (Chinese * 3 + Math * 3 + English * 3 + Physical * 2 + Chemistry * 2 + Biological * 2) / 15, 2) 132 133 grade['姓名'] = name 134 grade['學號'] = id 135 grade['班級'] = classid 136 grade['語文'] = Chinese 137 grade['數學'] = Math 138 grade['英語'] = English 139 grade['物理'] = Physical 140 grade['化學'] = Chemistry 141 grade['生物'] = Biological 142 grade['加權總分'] = Score 143 144 t_name = 1 145 break 146 147 if t_name == 0: 148 exit = input('查詢錯誤,請重確認要修改的學生姓名,退回主菜單請按N') 149 if exit == 'n': 150 break 151 continue 152 else: 153 exit = input('查詢成功,輸入名字繼續查詢,退回主菜單請按N') 154 if exit == 'n': 155 break 156 continue 157 158 159 while int(order) == 4: 160 161 name = input("請輸入你要刪除信息的學生的姓名:") 162 163 t_name = 0 # 輸入正確標誌位 164 165 for sname in student: 166 if name == sname['姓名']: 167 student.remove(sname) 168 t_name = 1 169 break 170 if t_name == 0: 171 exit = input('查詢錯誤,請重確認要刪除的學生姓名,退回主菜單請按N') 172 if exit == 'n': 173 break 174 continue 175 else: 176 exit = input('查詢成功,輸入名字繼續刪除,退回主菜單請按N') 177 if exit == 'n': 178 break 179 continue 180 181 while int(order) == 5: 182 if len(student) == 0: 183 print('系統裡面沒有數據,請錄數據') 184 break 185 else: 186 for s_name in student: 187 print(s_name) 188 exit = input('預覽成功!按任意鍵返回主菜單\n') 189 break 190 191 if int(order) == 6: 192 print('感謝你的使用,再見!\n') 193 break 194 195 196 else: 197 print('輸入有誤,請輸入序號1~6') 198 m += 1 199 if m > 2: 200 print('你已經重覆輸錯三次,結束本次操作') 201 break 202 continueView Code
解決問題一的方式:(1)加入一個死迴圈,強制輸入整數
1 while True: 2 order = input('請輸入序號,進行你想要的操作:') 3 try: 4 order = int(order) 5 break 6 except: 7 print("pls enter number") 8 continue上一個
(2)加入一個字元串檢測:isdigit()函數檢測輸入的字元串是不是數字,是的話返回True,否則繼續上一個迴圈
order = input('請輸入序號,進行你想要的操作:') if order.isdigit(): order = int(order) else: print('請輸入正確的數字') continue問題二,跳出for迴圈,在外面在套一層while迴圈,加入標誌位
1 while int(order) == 1: 2 valid = 0 3 while not valid: 4 valid = 1 5 name = input('請輸入學生的姓名:')# 數據錄入#需要解決重覆錄入的問題 6 for stu_name in student: 7 if name == stu_name['姓名']: 8 stu_id = input('該學生已經錄入信息,請確認是否重覆錄入,並比較學號') 9 if stu_id == stu_name['學號']: 10 print('重覆錄入!請錄入下一個') 11 valid = 0 12 break 13 14 print('請繼續接下來的信息錄入!')