繁体   English   中英

Python while循环无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM