Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 13, 2015 22:27:49

AlehinAlSerg
Зарегистрирован: 2015-08-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять почему выскакивает ошибка в 23 строке.

При попытке удалить вложенный список, найденный по значению, выдает ошибку: index out of range в 23 строке (if name == spisok
Не могу понять почему. Вроде все верно. Кто объяснит в чем проблема? Помогите разобраться пожалуйста.

# Список рекордов
x = None
spisok = [["вася", "100"], ["паша", "200"], ["ваня", "400"]]
while x != "0":
    print("""Список рекордов:
                0 - выход
                1 - добавить рекорд
                2 - удалить рекорд
    x = input("Сделайте свой выбор")
    if x == "0":
        print("Досвидания!")
    elif x == "1":  # добавляем новый рекорд
        name = input("введите имя")
        record = input("введите рекорд в виде числа")
        zapis = [name, record]
        spisok.append(zapis)
        print(spisok)
    elif x == "2":  # удаляем рекорд
        name = input("введите имя, чей рекорд хотите удалить, или сам рекорд")
        for i in range(len(spisok)):
            for k in range(len(spisok[i])):
               [size 32] if name == spisok[i][k]:[/size][size 32][/size]
                    print("нашел", i, k)
                    delate = [spisok[i][0], spisok[i][1]]
                    print(delate)
                    spisok.remove(delate)
                    print(spisok)
    else:
        x = None

Офлайн

#2 Авг. 13, 2015 23:02:06

AlehinAlSerg
Зарегистрирован: 2015-08-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять почему выскакивает ошибка в 23 строке.

Люди, отзовитесь!

Офлайн

#3 Авг. 13, 2015 23:50:50

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не могу понять почему выскакивает ошибка в 23 строке.

AlehinAlSerg
Люди, отзовитесь!
во первых не истерите, у меня постоянная прописка не на этом форуме, а в своей квартире, в которой я живу. Такая же ситуация и у других людей. Сюда заходят тогда когда есть на это время и желание.
Во вторых, вы посмотрите на свой пост. Ничего глаза не режет? вам подсветка синтаксиса уже говорит что в коде ошибка. Да еще и теги форума вставлены той самой строчке. НЕ НАДО так делать.

Теперь по сути, вот вам демонстрационный код (Python2, но суть такая же и для 3 ветки), делает то же что и ваш. Первая цифра означает индекс итерации цикла, вторая длину списка до удаления и третья после удаления.
>>> l = range(5)
>>> for i in xrange(len(l)):
...     print(i),
...     print(len(l)),
...     l.remove(l[i])
...     print(len(l)),
...     print
...
0 5 4
1 4 3
2 3 2
3 2
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
IndexError: list index out of range
Как видите та же самая ошибка. Длина списка по ходу цикла уменьшается и индексы начинают в какой то момент ссылаться на не существующий элемент.
Одно из типичных решений - это проходить список не от начала к концу, а наоборот. В вашем коде это будет примерно так:
 for i in range(len(spisok) - 1, -1, -1):



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Авг. 14, 2015 00:11:01

AlehinAlSerg
Зарегистрирован: 2015-08-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять почему выскакивает ошибка в 23 строке.

Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version