Объяснение синтаксиса — является ли pygame.event.get() словарем?

#python #dictionary #pygame

#python #словарь #pygame

Вопрос:

Это мое объяснение: pygame.event.get() возвращает словарь событий в очереди, а event — это запись в словаре. Каждое событие в словаре имеет тип и ключ (среди прочих атрибутов), и это то, что мы сравниваем в операторах if .

pygame.ЗАВЕРШИТЕ работу и pygame.KEYDOWN — это типы событий pygame.K_RIGHT — это ключ события

Только если эти события находятся в очереди, будет выполнен соответствующий код

         for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    snake.move_snake_right()
  

Это аналогично сбору овощей в супермаркете: вас ждет «очередь» из продуктов, у каждого из которых есть тип, вес, срок годности и т. Д. Вы пройдетесь по каждому из них, и только если это корнеплод типа и называется пастернак, вы его подберете.

У кого-нибудь есть лучшее объяснение словарей?

Кроме того, почему вы вызываете словари как

 Dictionary[Entry]
  

но здесь ваше призвание

 pygame.event.get().key
  

?

Комментарии:

1. pygame.event.get() не возвращает словарь. Он возвращает список pygame.event.Event объектов

Ответ №1:

Это мое объяснение: pygame.event.get() возвращает словарь событий в очереди, а event — это запись в словаре.

Нет. pygame.event.get() возвращает список. Вы можете сами проверить исходный код здесь .

Каждое событие в словаре имеет тип и ключ (среди прочих атрибутов), и это то, что мы сравниваем в операторах if .

У каждого события есть type , но не у каждого события есть key .

Вот список всех атрибутов для каждого типа события:

 QUIT              none
ACTIVEEVENT       gain, state
KEYDOWN           key, mod, unicode, scancode
KEYUP             key, mod
MOUSEMOTION       pos, rel, buttons
MOUSEBUTTONUP     pos, button
MOUSEBUTTONDOWN   pos, button
JOYAXISMOTION     joy (deprecated), instance_id, axis, value
JOYBALLMOTION     joy (deprecated), instance_id, ball, rel
JOYHATMOTION      joy (deprecated), instance_id, hat, value
JOYBUTTONUP       joy (deprecated), instance_id, button
JOYBUTTONDOWN     joy (deprecated), instance_id, button
VIDEORESIZE       size, w, h
VIDEOEXPOSE       none
USEREVENT         code
  

Чтобы процитировать документы:

Все pygame.event.EventType экземпляры содержат идентификатор типа события и атрибуты, специфичные для этого типа события. Идентификатор типа события доступен как pygame.event .Свойство EventType.type .

Я предлагаю вам прочитать связанный документ, потому что он объясняет все, что вам нужно знать о событиях.


Только если эти события находятся в очереди, будет выполнен соответствующий код

     for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                snake.move_snake_right()
  

Строка if event.type == pygame.KEYDOWN: будет выполняться для каждого pygame.event.get() возвращенного события.

Следующая строка ( if event.key == pygame.K_RIGHT: ) будет выполнена только в том случае, если if выражение в предыдущей строке вернуло истинное значение, что произойдет только в том случае, если событие, которое мы проверяем в данный момент, имеет type атрибут, равный pygame.KEYDOWN .

И если key атрибут равен pygame.K_RIGHT , snake.move_snake_right() будет выполнен только тогда.

Это не имеет ничего общего со словарями. Это просто то, как работает цикл с for if операторами and .

Комментарии:

1. является ли pygame.key.get_pressed() словарем всех клавиш со значениями True / False, если они нажаты?

2. В принципе да, но: pygame.key.get_pressed это функция, которая возвращает a ScancodeWrapper , которая сама является подклассом tuple . Поскольку ключевые константы pygame (например K_a , etc.) являются числами, они используются для доступа к элементам ScancodeWrapper , поскольку это кортеж, который выглядит как (0, 0, 0, 0, 0, 0, 0, ....., 0) .

Ответ №2:

Нет, это не словарь, а его итерируемый (список, кортеж или что-то, что вы можете перебирать)

О словарях

Словари хранятся в парах ключей и значений.

Например

 person = {"name": "Mickey", "age": 44}
  

Доступ к значению

Чтобы получить доступ к любому из этих значений (Mickey или 44), вам необходимо указать правильный ключ:

 person["name"]
  

Представьте себе 1000 комнат с запертыми дверями. Чтобы получить доступ к тому, что находится в определенной комнате, вам сначала нужен ключ (который открывает дверь).

Получение списка всех ключей

Вы можете получить список ключей пользователя следующим образом

 person.keys()
  

Вы можете выполнять итерации / циклы следующим образом:

 for k in person.keys():
    print(person[k])
  

Представьте, что у вас есть полномочия нажимать все ключи и указывать каждому из них открывать правильную дверь