Ошибка "list index out of range"

from tkinter import *
from random import *


tk = Tk()
tk.title("Метеорологічні дослідження")
tk.geometry("400x250")

def btn_click():
    y = []
    Lbox.delete(0, END)
    for i in range(7):
        y.append(randint(15, 25))
        Lbox.insert(END, y[i])
    for i in range(6):
            canvas.create_line(x[i], 200-y[i*5], x[i+1], 200-y[i+1]*5, fill="blue")
    
canvas = Canvas(tk,width=290,height=250)
canvas.place(x=110 ,y=0)
canvas.create_line(30, 200, 270, 200, arrow=LAST)
canvas.create_line(30, 200, 30, 10, arrow=LAST)

Lbl = Label(text="Температура")
Lbl.place(x=20, y=20)

Lbox = Listbox(width=10, height=7)
Lbox.place(x=20, y=50)

Btn=Button(text="Побудувати", command=btn_click)
Btn.place(x=20, y=180)

        
for i in range(7):
    x=[60, 90, 120, 150, 180, 210, 240]
    canvas.create_line(x[i], 195, x[i], 205)
    canvas.create_text(x[i], 215, text=i+1)
    
for i in range(5,36,5):
    canvas.create_line(25, 200-i*5, 35, 200-i*5)
    canvas.create_text(15, 200-i*5, text=i)   

Ошибку выдает в строке
canvas.create_line(x[i], 200-y[i*5], x[i+1], 200-y[i+1]*5, fill="blue")
Объясните, пожалуйста, доступно новичку?


Ответы (1 шт):

Автор решения: Вася Воронцов

Ошибка означает, что запрашиваемых индекс выходит за пределы допустимого. А именно: y содержит 7 элементов, но далее вы пытаетесь получить элемент с индексом i*5 (в крайнем случае это 6*5=30), что гораздо больше 6. Исправьте на

canvas.create_line(x[i], 200 - y[i]*5, x[i+1], 200 - y[i+1]*5, fill="blue")

P.S. вы уверены в использовании одного и того же счётчика i для двух циклов (один - в другом)?

→ Ссылка