Python之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         continue
View 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('請繼續接下來的信息錄入!')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM