2010-07-03 105 views
0

#hello,我wounder爲什麼我的代碼保持回採在謝勝利,while循環,並沒有做任何事情爲什麼我的代碼在secound 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 
+1

http://blog.stevienova.com/wp-content/uploads/LiveWriter/Areyoustuckinaninfiniteloop_AC8D/image.png – 2010-07-03 01:21:32

回答

3

你的代碼進入一個死循環。

您的while循環都有允許它們終止的條件。由於您的代碼永遠不會更改a的值,因此第一個循環變爲while 0<=degree,因此當用戶輸入負值時,第一個循環終止。但變量a可以從您的程序中刪除。

只要len(deg_list) >= 0的while循環持續。但是,循環中的代碼將減少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

pop()爲第一個元素?只有當你傳遞0作爲pop()的索引時,否則它默認爲-1,這是最後一個元素。 - [linkage](http://docs.python.org/library/stdtypes.html#mutable-sequence-types) – nilamo 2010-07-03 01:32:35

+0

我測試了ur代碼,它在打印結束時有相同的問題len(deg_list) – Fiasco 2010-07-03 01:46:09

+0

@聯繫,謝謝。 – 2010-07-03 01:59:51

1

你永遠修改deg_list,所以你的循環變得無窮大。即使刪除所有元素也無濟於事,因爲您正在比較0 - 循環條件永遠不會是錯誤的。

1

好吧。

它看起來對我說a在開始時設置爲0,然後從來沒有改變過,所以做一些與deg_list[a],即在列表中的第一個元素,是不會做的非常多。此外,您的循環條件是len(deg_list) >= 0,並且len(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之類的操作之前。

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)