为什么我的代码在第二次循环中停止?

时间:2010-07-03 01:14:45

标签: python

#hello,我想知道为什么我的代码会在第二个while循环停止并且什么都不做

print"*******************************"
a = 0
deg_list =[]
deg_list_a=[]
deg_list_b=[]
deg_list_c=[]
degree=input("Enter the students Degree:")
while a<=degree:
    deg_list.append(degree);
    degree=input("Enter the students Degree:")
print "Degree List :",deg_list
print len(deg_list)
while len(deg_list)>=0:
    if deg_list[a]>=16:
        deg_list_a.append(deg_list[a])
        x=+1
    elif 15>deg_list[a]>=10:
        deg_list_b.append(deg_list[a])
        x=+1
    else :
        deg_list_b.append(deg_list[a])
        x=+1
print deg_list_a
print deg_list_b
print deg_list_c

4 个答案:

答案 0 :(得分:3)

您的代码进入无限循环。

两个while循环都存在条件问题,导致它们终止。由于您的代码永远不会更改a的值,因此第一个循环变为while 0<=degree,因此当用户输入负值时,第一个循环终止。但是变量a可以从您的程序中删除。

while循环会一直延长len(deg_list) >= 0。但是,循环中的代码不会减少deg_list的长度,因此while循环将永远持续。

以下代码可以帮助您实现这一目标:

deg_list =[]
deg_list_a=[]
deg_list_b=[]
deg_list_c=[]
degree=input("Enter the students Degree:")
while degree > 0:
    deg_list.append(degree);
    degree=input("Enter the students Degree:")
print len(deg_list)
while len(deg_list) > 0:        # Strictly greater than 0, not equal to 0.
    if deg_list[0] >= 16:
        # Use pop to access first element
        deg_list_a.append(deg_list.pop(0))    
    elif deg_list[0] >= 10:    # One comparison per statement, only.
        deg_list_b.append(deg_list.pop(0))
    else:
        deg_list_c.append(deg_list.pop(0))  # c, not b.
print deg_list_a
print deg_list_b
print deg_list_c           

答案 1 :(得分:1)

你永远不会修改deg_list,所以你的循环变得无限。即使删除所有元素也无济于事,因为你要与0进行比较 - 循环条件永远不会是假的。

答案 2 :(得分:1)

好。

我认为a在开始时设置为0,然后从未更改,因此使用deg_list[a]执行某些操作,即列表中的第一个元素,isn'我会做很多事情。此外,您的循环条件为len(deg_list) >= 0len(deg_list)永远不会更改。

但是您的代码存在更多基本问题。想象一下, 更改deg_list的长度:在这种情况下,您将更改正在循环的列表,这通常是(如果您是不太确定你正在做什么)灾难的秘诀。我认为你应该设想做的是一个循环:

for degree in deg_list:
    if [degree fulfils some condition]:
        [do something with degree]
    elif [degree fulfils some other condition]:
        [do something else]
    ...
    else:
        [whatever]

最后,从您的比较看来,“度”似乎都是小整数。您可能希望测试它 - 它是用户输入,并且在执行if degree >= 16之前,您必须期望输入任何内容。

答案 3 :(得分:0)

看起来你正试图遍历deg_list的所有成员,但是你正在等待deg_list为空,并且每次通过循环你都会递增“x”,这甚至都不会被读取。

如果你真的试图遍历deg_list,请尝试第二次循环:

for degree in deg_list:
    if degree >= 16:
        deg_list_a.append(degree)
    elif degree >= 10:
        deg_list_b.append(degree)
    else :
        deg_list_c.append(degree)