2013-05-14 106 views
0

這是我工作的一類問題(下面是我的問題,我的代碼寫):初級指數超出範圍蟒蛇

方案應接受一系列的學生和他們的考試分數迴應 「?」提示。輸入兩位數的考試分數(沒有人得到100分或少於10分),一個單獨的 空間和學生的名字。繼續輸入,直到用戶輸入「Stop」 - 您的程序應該能夠處理任何形式的「Stop」 - 例如,「stop」,「Stop」, 「STOP」,「sTOP」等。 然後應該顯示按照考試成績排列的學生姓名列表(低至 高)。 例如(用戶輸入下劃線):

? 23 Warren 
? 44 Dona 
? 33 Tom 
? stop 
Warren 
Tom 
Dona 

於是我明白了一切我已經寫了,我明白,這不是一個特別複雜的問題。雖然,我寫代碼的方法是,當我輸入「stop」來顯示已完成輸入的程序時,它會在for循環中運行輸入「stop」,從而創建超出範圍錯誤的索引。我如何讓它只在while循環中運行「停止」,而不是在for循環中?

students = [] 
    nameScore = "" 
    while (nameScore.lower() != "stop"): 
     nameScore = input ("? ") 
     students.append(nameScore) 

    students.sort() 

    for student in students: 
     x = student.split() 
     print (x[1]) 

回答

0

你可以改變程序的流程,讓它在進入while循環之前「填充」輸入字符串;這樣它會在它附加輸入之前檢查:

students = [] 
nameScore = input("? ") 
while nameScore.lower() != "stop": 
    students.append(nameScore) 
    nameScore = input ("? ") 

students.sort() 

for student in students: 
    x = student.split() 
    print (x[1]) 

有點代碼重複,但它做的工作。

另一種方法是使用一個list slice刪除最後一個元素:

students = [] 
nameScore = "" 
while nameScore.lower() != "stop": 
    students.append(nameScore) 
    nameScore = input ("? ") 

students = students[:-1] # Remove the last element 
students.sort() 

for student in students: 
    x = student.split() 
    print (x[1]) 

順便說一句,周圍的狀況而括號是沒有必要在Python。

1

如果您在追加之前「破壞」,那麼"stop"將不會包含在students中。

while True: 
    nameScore = input ("? ") 
    if nameScore.lower() == "stop": break 
    students.append(nameScore) 

而且,如果你寫的while -loop這樣一來,你就不會需要預先初始化nameScore