Значения Enum
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 39 из 78.
Каждый вариант перечисления — это int, поэтому их можно сравнивать и выполнять с ними вычисления:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
print(Day.FRIDAY) # 4
print(Day.SATURDAY > Day.FRIDAY) # true
print(Day.FRIDAY + 1) # 5Само перечисление работает как словарь, сопоставляющий имена и значения. keys() возвращает имена по порядку, values() — значения, а size() — количество вариантов:
print(Day.keys()) # ["MONDAY", "TUESDAY", ..., "SUNDAY"]
print(Day.size()) # 7Чтобы вывести имя значения, используйте его как индекс для keys(). Это работает, когда параметры имеют значения по умолчанию: 0, 1, 2... Для перечисления с заданными значениями используйте find_key(), которая возвращает имя значения:
var today := Day.SATURDAY
print(Day.keys()[today]) # SATURDAYПри объявлении enum Coin { COPPER = 1, SILVER = 10 } на верхнем уровне индекс Coin.keys()[10] выходит за допустимый диапазон, а find_key() работает:
print(Coin.find_key(10)) # SILVERЧтобы сделать наоборот — перейти от имени, сохранённого в виде текста, к его значению, используйте квадратные скобки. Сначала проверьте имя с помощью has(): имя, которого нет в перечислении, вызовет ошибку.
var text := "FRIDAY"
if Day.has(text):
print(Day[text]) # 4for day_name in Day: перебирает названия, как цикл по словарю.
Задание
ЛегкоСкрипт объявляет перечисление Day от MONDAY до SUNDAY. Программа считывает две строки: название дня заглавными буквами и количество дней (целое число, 0 или больше).
Выведите две строки:
- Название,
has the valueи значение этого дня в перечислении In, число,days:и название дня через указанное количество дней
После SUNDAY неделя начинается снова с MONDAY. Для входных данных FRIDAY и 3 вывод будет таким:
FRIDAY has the value 4
In 3 days: MONDAYПопробуйте сами
extends Node
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
var day_name := OS.read_string_from_stdin()
var days := int(OS.read_string_from_stdin())
# Выведите значение дня и дня, который наступит через указанное количество дней
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript