黑马程序员技术交流社区
标题:
列表引用知识点在题目中的具体运用
[打印本页]
作者:
lsl810400
时间:
2018-10-7 16:18
标题:
列表引用知识点在题目中的具体运用
本帖最后由 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)
产生影响,这样程序就能正常显示结果。
#
总结:对新学的列表引用知识点掌握的不熟练,还需要勤加练习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2