[英]Python while loop not working properly
我是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
提前致謝
循環工作正常,但是您的邏輯有缺陷。 考慮一下在迭代過程中刪除哪些元素 :
[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[:] = []
del
運算符僅刪除分隔的索引,但將左側對象移到最前面。 這意味着您將跳過列表的一部分。
嘗試該代碼:
j=0
try:
while (j<3):
del marks[0]
j+=1
except:
print "okay!"
清除列表的另一種方法是:
del marks[:]
這也很清楚(對文檔有用)要實現的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.