1 Востаннє редагувалося bogdankyr (11.11.2018 22:07:40)

Тема: Pygame - хоча розмір списку 3, вже на першій ітерації out of range

привіт,

ідея - зберігати координати (кортежі у список) для подальшого перемальовування.
під час другого клацання мишкою (список з двох елементів),
не вдається намалювати хоча б перший елемент , список[0] - out of range ???

якщо малювати вручну ( if index == 1 то малювати .... if index == 2 то малювати...)
   то все добре

а от через for - не йде.

while True:
    for ev in event.get():
        if ev.type == MOUSEBUTTONDOWN:
            mousePos = ev.pos
            mouseBot = ev.button
            if mouseBot == 1:
                Circs.append(mousePos)
            elif mouseBot == 3:
                Circs = []
                scr.fill((0, 0, 0))
                display.update()
        pygame.event.clear()
    if len(Circs) > 0:
        for x in (0, len(Circs)+1):
            draw.circle(scr, (0, 240, 0), Circs[x], 10)

    display.update()

вдалось поки тільки через if-elif ...
але це ж не діло...
вкажіть на помилку, будь-ласка.

Post's attachments

v 2.101.py 1.2 kb, 224 downloads since 2018-11-11 

2

Re: Pygame - хоча розмір списку 3, вже на першій ітерації out of range

З паскаля переїжджаєте?
В Python немає такої речі, як "цикл по цілих в проміжку". Є цикл while; і є цикл по елементах якогось iterable - наприклад, списку. У вашому випадку:

for circle in Circs:
            draw.circle(scr, (0, 240, 0), circle, 10)

А ви робили цикл по тьюплу (0, len(Circs)), який складається з 2 елементів - 0 і, очевидно, len(Circs).
Якщо вам таки потрібні номери елементів у явній формі, то є функція enumerate, що повертає пари "номер-елемент":

for i,circle in enumerate(Circs):
            draw.circle(scr, (0, 240, 0), circle, 10)

У enumerate є другий параметр - з якого номера починати, якщо треба не з 0.
Ну і якщо потрібні саме номери і більш нічого, то є функція range, яка генерує елементи по одному:

for i in range(10)

Але це вважається в Python останнім засобом, якщо попередні чомусь не спрацювали.

Подякували: leofun01, bogdankyr2

3

Re: Pygame - хоча розмір списку 3, вже на першій ітерації out of range

Дуже дякую Вам за відповідь.

проблема вирішена