Рваные массивы
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 16 из 78.
Строки двумерного массива не обязательно должны иметь одинаковую длину. Двумерный массив, строки которого имеют разную длину, называется рваным массивом. Здесь каждая строка содержит очки одного игрока, а игроки сыграли разное количество раундов:
var scores := [
[90, 85, 70],
[60],
[75, 80]
]
print(scores[0].size()) # 3
print(scores[1].size()) # 1В зубчатом массиве scores[0].size() — это не длина каждой строки. Перебирай столбцы текущей строки с помощью scores[r].size():
for r in range(scores.size()):
var total := 0
for c in range(scores[r].size()):
total += scores[r][c]
print("Player ", r + 1, ": ", total)Player 1: 245
Player 2: 60
Player 3: 155Цикл, который всегда использует длину первой строки, выходит за пределы коротких строк: scores[1][2] — это ошибка, потому что в строке 1 есть только индекс 0. for value in row всегда подходит для строки, по которой он проходит.
Ты строишь ступенчатый массив, как сетку, с разной длиной каждой строки. В этом треугольнике строка r содержит r + 1 ячеек:
var triangle := []
for r in range(4):
var row := []
for c in range(r + 1):
row.append("*")
triangle.append(row)
for row in triangle:
print("".join(row))*
**
***
****Строка может быть даже пустой: [[1, 2], [], [3]] — это допустимый зубчатый массив из трёх строк.
Задание
ЛегкоНапиши функцию с именем make_triangle с одним параметром типа int — n. Она возвращает рваный массив из n строк:
- В строке 1 — 1 ячейка, в строке 2 — 2 ячейки и так далее, вплоть до строки
n, в которойnячеек. - Если считать строки и столбцы начиная с 1, каждая ячейка содержит произведение номера своей строки на номер своего столбца. В ячейке строки 3, столбца 2 находится
3 * 2 = 6.
Например, make_triangle(3) возвращает:
[[1], [2, 4], [3, 6, 9]]Тесты самостоятельно вызывают make_triangle() и проверяют возвращённый массив. Не вызывай её и ничего не выводи.
Попробуйте сами
func make_triangle(n: int):
# Напишите код здесь
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript