A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lsl810400

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

本帖最后由 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)产生影响,这样程序就能正常显示结果。
# 总结:对新学的列表引用知识点掌握的不熟练,还需要勤加练习

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马