Python之for循环的使用
最近在学Python,尝试着用for和while循环做一个简单的学生管理系统,现在遇到的问题是没法限定输入的数据类型和从for循环中跳出
第一个限定是:如果没有没有输入整数,程序直接报错,在其中使用了转换,代码18行
第二个跳出for循环:目的是要对录入的信息进行一个初步的判断,确保关键信息不重复
这个管理系统,涉及的到就是先定义字典grade,再将字典grade使用append()函数添加到列表student,然后通过for循环遍历数组,将
字典取出来sname,最后对比输入的名字和字典sname中“姓名”键(key)对应的值(value),这样就做到了数据的匹配查询
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
解决问题一的方式:(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
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('请继续接下来的信息录入!')