Получаю ошибку unsupported operand type(s) for //: 'int' and 'list' (pygame).

Xoniz

Новичок
Пользователь
Фев 17, 2021
6
0
1
Код:
import pygame

pygame.init()

display_w = 800 #ширина
display_h = 600 #высота

display = pygame.display.set_mode((display_w, display_h)) #установление формы окна

pers_width = 60
pers_height = 100

def rectangle(height, division):
    for i in range(2):
        pers_x = display_w // division
        pers_y = display_h - height - pers_height
        pers_x = display_w // division
        pers_y = display_h - height + pers_height
rectangle([100, 600], [4, 2])


def rungame():
    game = True
    while game: #цикл выполняется, пока game - истина
        for event in pygame.event.get(): #event - принятие значений каждого последующего действия
            if event.type == pygame.QUIT: #проверка типа действия
                pygame.quit() #закрытие окна при нажатии на QUIT
                quit()
display.fill((255, 255, 255)) #фон окна
pygame.draw.rect(display, (251,186,0), (pers_x, pers_y, pers_width, pers_height)) #вызываем draw, указываем rect, рисуем на дисплее, указываем цвет rgb, положение по х, по у, ширина и высота
pygame.draw.rect(display, (168,91,56), (pers_x_1, pers_y_1, pers_width, pers_height)) #вызываем draw, указываем rect, рисуем на дисплее, указываем цвет rgb, положение по х, по у, ширина и высота
pygame.draw.rect(display, (34,253,48), (pers_x_2, pers_y_2, pers_width, pers_height)) #вызываем draw, указываем rect, рисуем на дисплее, указываем цвет rgb, положение по х, по у, ширина и высота
pygame.draw.rect(display, (11,28,189), (pers_x_3, pers_y_3, pers_width, pers_height)) #вызываем draw, указываем rect, рисуем на дисплее, указываем цвет rgb, положение по х, по у, ширина и высота
pygame.display.update() #постоянное обновление окна
rungame() #вызов функции

Но при запуске выдает ошибку (15 строчка):
TypeError: unsupported operand type(s) for //: 'int' and 'list'

Если знаете решение, подскажите пожалуйста, буду благодарен.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Ошибка в функции rectangle, вы передаете в division массив:
Python:
rectangle([100, 600], [4, 2])
при этом пытаетесь разделить число на массив:
Python:
pers_x = display_w // division
вам надо делить на элемент массива:
Python:
pers_x = display_w // division[0]

То же самое и с display_h - height + pers_height


ps
Хотя там у вас еще много ошибок, например вы создаете переменные pers_x и pers_y в функции и поэтому они могут использоваться только в функции, так же вы 3 раза просто переназначаете их, я думаю вы хотели создать 3 пары переменных, тк далее вы пытаетесь использовать pers_x_1 например, который вообще не был нигде создан.

Вообщем если хотите, могу помочь с кодом (из интереса, с pygame еще не работал, давно хочу попробовать)
 
Последнее редактирование:

Xoniz

Новичок
Пользователь
Фев 17, 2021
6
0
1
Ошибка в функции rectangle, вы передаете в division массив:
Python:
rectangle([100, 600], [4, 2])
при этом пытаетесь разделить число на массив:
Python:
pers_x = display_w // division
вам надо делить на элемент массива:
Python:
pers_x = display_w // division[0]

То же самое и с display_h - height + pers_height


ps
Хотя там у вас еще много ошибок, например вы создаете переменные pers_x и pers_y в функции и поэтому они могут использоваться только в функции, так же вы 3 раза просто переназначаете их, я думаю вы хотели создать 3 пары переменных, тк далее вы пытаетесь использовать pers_x_1 например, который вообще не был нигде создан.

Вообщем если хотите, могу помочь с кодом (из интереса, с pygame еще не работал, давно хочу попробовать)

Если не сложно и есть время, то не отказался бы от помощи.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Еще раз привет, вчера не смог ответить, дела были.
По программе: во первых, хранить координаты прямоугольников лучше в массиве:
cords = [[x1, y1], [x2, y2], [x3, y3]] # Как - то так

А сам код можно упростить так:
Python:
import pygame

pygame.init()

display_w = 800  # Ширина
display_h = 600  # Высота

display = pygame.display.set_mode((display_w, display_h))  # Установление формы окна

pers_width = 60
pers_height = 100
pers = []
colors = [(251,186,0), (168,91,56), (34,253,48), (11,28,189)]

def draw_rectangle(pers_x, pers_y, color):
   
    # Вызываем draw, указываем rect, рисуем на дисплее, указываем цвет rgb, положение по х, по у, ширина и высота
    pygame.draw.rect(display, color, (pers_x, pers_y, pers_width, pers_height))
   
   
def rungame():
    game = True
    while game:  # Цикл выполняется, пока game - истина
        for event in pygame.event.get():  # Event - принятие значений каждого последующего действия
            if event.type == pygame.QUIT:  # Проверка типа действия
                pygame.quit()  # Закрытие окна при нажатии на QUIT
                quit()


display.fill((255, 255, 255))  # Фон окна

# Наполняем массив с координатами прямоугольников
for i in range(4):
    x = display_w // 4 if i < 2 else display_w // 2
    y = pers_height if i%2 == 1 else display_h - 100 - pers_height
    pers.append([x, y])

# Рисуем прямоугольники
for i in range(len(pers)):
    draw_rectangle(pers[i][0], pers[i][1], colors[i])
   
pygame.display.update()  # Постоянное обновление окна
rungame()  # Вызов функции
 

Форум IT Специалистов