Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.01.2021
Сообщений: 2
1
Tkinter

Как исправить ошибку list index out of range?

15.01.2021, 14:55. Просмотров 1244. Ответов 2
Метки нет (Все метки)

Здравствуйте. Пишу на игру "Змейка" и не могу понять в чём проблема:
Вот код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from tkinter import *
import random
 
window = Tk()
window.title("Змейка")
WIDTH = 600
HEIGHT = 600
segment = 20
snakeX = 14
snakeY = 14
snakeXmove = 0
snakeYmove = 0
snakekoo = []
snake_size = 3
apple = []
apple_size = 3
canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg='#CD5C5C')
 
for i in range(apple_size):
    X = random.randrange(WIDTH / segment)
    Y = random.randrange(HEIGHT / segment)
    apple.append([X, Y])
    appleone = canvas.create_rectangle(X*segment, Y*segment, X*segment+segment, Y*segment+segment, fill = '#FFD700')
 
canvas.pack()
window.update()
canvas.focus_set()
window.resizable(0, 0)
window.wm_attributes('-topmost', 1)
 
def segment_of_snake(canvas, x, y):
    global snakekoo
    one = canvas.create_rectangle(x*segment, y*segment, x*segment+segment, y*segment+segment, fill='#ADFF2F')
    snakekoo.append([x, y, one])
segment_of_snake(canvas, snakeX, snakeY)
 
def del_segment():
    if len(snakekoo) >= snake_size:
        del_item = snakekoo.pop(0)
        canvas.delete(del_item[2])
 
def found_apple():
    global snake_size
    for i in range(len(apple)):
        if apple[i][0] == snakeX and apple[i][1] == snakeY:
            snake_size = snake_size + 1
            canvas.delete(apple[i][2])
 
def move(event):
    global snakeX
    global snakeY
    if event.keysym == 'Left':
        snakeXmove = -1
        snakeYmove = 0
        del_segment()
    elif event.keysym == 'Up':
        snakeXmove = 0
        snakeYmove = -1
        del_segment()
    elif event.keysym == 'Down':
        snakeXmove = 0
        snakeYmove = 1
        del_segment()
    elif event.keysym == 'Right':
        snakeXmove = 1
        snakeYmove = 0
        del_segment()
    snakeX = snakeX + snakeXmove
    snakeY = snakeY + snakeYmove
    segment_of_snake(canvas, snakeX, snakeY)
    found_apple()
 
canvas.bind_all('<KeyPress-Left>', move)
canvas.bind_all('<KeyPress-Up>', move)
canvas.bind_all('<KeyPress-Down>', move)
canvas.bind_all('<KeyPress-Right>', move)
 
window.mainloop()
 
на вот этом моменте:
def found_apple():
    global snake_size
    for i in range(len(apple)):
        if apple[i][0] == snakeX and apple[i][1] == snakeY:
            snake_size = snake_size + 1
            canvas.delete(apple[i][2])
у меня появляется ошибка list index out of range и я не могу понять, как мне решить эту проблему. Помогите, пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2021, 14:55
Ответы с готовыми решениями:

Компилятор выдает ошибку IndexError: list index out of range
a = b = 0 for i in a: print(a) b += a print(b)

Выдает ошибку IndexError: list index out of range в 106 строке в чем ошибка?
import logging import collections import urllib.parse import csv import bs4 import requests ...

list index out of range
На Stepik не проходит проверку. Хоть в среде все работает. Помогите. s...

list index out of range
В общем появилась ошибка, d = try: with open('text.txt') as fileH: for line...

2
Автоматизируй это!
Эксперт Python
3819 / 2613 / 795
Регистрация: 30.03.2015
Сообщений: 8,639
Записей в блоге: 10
15.01.2021, 15:01 2
Цитата Сообщение от Svetlana Lita Посмотреть сообщение
у меня появляется ошибка list index out of range и я не могу понять, как мне решить эту проблему. Помогите, пожалуйста
не выходить за пределы спика! не благодари

берем отладчик смотрим какие индексы используем для списка, ловим момент когда индекс больше длины и исправляем.
0
Эксперт Python
4304 / 3178 / 1032
Регистрация: 28.10.2013
Сообщений: 8,197
15.01.2021, 18:04 3
Цитата Сообщение от Svetlana Lita Посмотреть сообщение
на вот этом моменте:
Фраза "На этом моменте" должна иллюстрироваться веселыми картинками: трейсбеком ошибки из консоли.
Там, кстати, написано что и где не так.
Понять же почему так происходит - ваша задача как программиста. Эта не та проблема, с которой нужно идти на форум.
IDE даст вам всю нужную информацию, как уже выше написали.

P.S. И не используйте переменные типа список как глобальные.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2021, 18:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

list index out of range
Почему возникает ошибка list index out of range? (17 строка) N, T = map(int, input().split()) A...

Index was out of range, List с датами
Есть файл с датой и именем. 22.10.1967 Евгений 11.02.1973 Мария и т.д. (значений много)...

list index out of range ошибка
Задача:Даны действительные числа а1 . . . , а 50. Получить «сглаженные» значения а1 . . . , а50,...

Цикл (list index out of range)
Добрый день! Помогите понять почему при использовании цикла и передачи переменной в...

IndexError: list index out of range
Кто знает как исправить? Ошибка на 3 строке IndexError: list index out of range import sys...

IndexError: list index out of range
Проходжу курс на stepik.org есть задача: Напишите программу, на вход которой подаётся список чисел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.