本帖最后由 lsl810400 于 2018-10-7 21:21 编辑
"""18、声明一个类 Student 有属性姓名、年龄、和考试成绩,提示用户输入3个学生的姓名和年龄,
考试成绩为 0 --100 的随机数,根据这些数据创建学生对象,将对象添加至 stu_list 列表,
添加完成后,遍历列表,删除成绩<=60分的学员信息"""
import random
# 创建一个空列表
stu_list = []
class Student:
def __init__(self):
for i in range(1, 4):
self.name = input("请输入第%d个学生的姓名:" % i)
self.age = input("请输入第%d个学生的年龄:" % i)
self.score = random.randint(0, 100)
print("第%d个学生的成绩是:%d" % (i, self.score))
# 将每个学生的信息放进列表
stu_list.append((self.name, self.age, self.score))
def find(self):
# 循环查找列表中学员成绩低于60分的并执行删除操作
for j in list(stu_list):
if j[2] <= 60:
stu_list.remove(j)
print(stu_list)
student = Student()
student.find()
# 在find成员方法中若使用如下代码,会存在一个bug:当第一个学生成绩低于60,这一步执行老是跳过第二个学生,直接去查找第三个学生!
# for j in stu_list:
# if j[2] <= 60:
# stu_list.remove(j)
# print(stu_list)
# 这是因为删除原列表stu_list中的数据后,索引发生改变,所以会产生“当第一个学生成绩低于60,这一步执行后直接跳过第二个学生” 这样的现象
# 故而这里要给它创建一个新的列表,这样新列表list(stu_list)在内存中的存储地址与原列表stu_list在内存中的存储地址不同,
# 对原列表stu_list中的值怎么删除都不会对新列表list(stu_list)产生影响,这样程序就能正常显示结果。
# 总结:对新学的列表引用知识点掌握的不熟练,还需要勤加练习
|
|