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('请继续接下来的信息录入!')

 

posted @ 2018-04-11 00:19  暮色之雲  阅读(1722)  评论(0编辑  收藏  举报