2013-05-14 4 views
0

Это проблема, я работаю для класса (ниже мой вопрос, и код, который я написал):начальный индекс вне диапазона в питона

Программа должна принять ряд студентов и их экзаменационные оценки в ответ на "?" незамедлительный. Введите двухзначный экзамен (никто не получает 100 или меньше 10), одно место и имя студента. Продолжайте вводить их до тех пор, пока пользователь не войдет в «Стоп» - , ваша программа должна иметь возможность обрабатывать любую форму «Стоп» - например, «Стоп», «Стоп», «STOP», «sTOP» и т. Д. Вы затем должен отображать список имен учеников, упорядоченных по их экзаменам (с низким до ). Например (пользовательский ввод подчеркнут):

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

Так что я понимаю все, что я написал, и я понимаю, что это не является особенно сложной задачей. Хотя, как мой код написан, когда я вводил «стоп», чтобы показать программу, которую я закончил с входами, он запускает вход «stop» в цикле for, создавая ошибку индекса за пределами диапазона. Как я могу заставить его работать «останавливаться» только в цикле 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.

Смежные вопросы