我是python(2.7)中的一个完全初学者,这个程序应该在3个科目中取一些学生的名字和他们的分数,并返回指定名称的平均值。我确实得到了正确的答案(通过另一种方法),但这个程序没有正常工作,我想知道原因。主要问题是没有删除具有奇数索引的列表元素。代码是
num=int(raw_input("enter the numbeer of students:"))
d=dict()
marks=[]
for i in range(num):
name=raw_input("enter student name")
j=0
try:
while (j<3):
del marks[j]
j+=1
except:
print "okay!"
print marks
for i in range(3):
marks.append(int(raw_input("enther makrs:")))
print marks,"after"
d[name]=tuple(marks)
req=raw_input("enter the name you want to check")
s=0
for key in d.keys():
if req==key:
n=d[key]
l=list(n)
ave=sum(l)/3
print ave
else:
print "boo"
上述程序的输出是:
vamshi@vamshi-HP-Notebook:~/python$ python u.py
enter the numbeer of students:2
enter student namev
okay!
[]
enther makrs:1
enther makrs:2
enther makrs:3
[1, 2, 3] after
enter student namek
okay!
[2] #why isn't this 2 deleted?
enther makrs:5
enther makrs:6
enther makrs:7
[2, 5, 6, 7] after
enter the name you want to check
提前致谢
答案 0 :(得分:1)
循环工作正常,但你的逻辑存在缺陷。考虑一下在迭代过程中删除的元素:
[1, 2, 3]
# delete 1st element, i.e. 1
[2, 3]
# delete 2nd element, i.e. 3!!!
[2]
# delete 3rd element, which doesn't exist
您的部分问题还在于您的try: ... except:
正在掩盖问题。这不适合你想做的事。
如果要清除列表,可以使用新的空列表覆盖它。
marks[:] = []
答案 1 :(得分:0)
del
运算符仅删除sepcified索引,但将左对象移动到前面。这意味着你正在跳过列表的一部分。
尝试该代码:
j=0
try:
while (j<3):
del marks[0]
j+=1
except:
print "okay!"
清理列表的另一种方法是:
del marks[:]
这也非常清楚(有利于文档记录)您要实现的目标。