Массивы и строки: что это и чем отличаются
Массив — набор элементов одного типа, каждый из которых лежит под своим номером. Номер называется индексом. Строка — последовательность символов, и у неё тоже есть индексы, поэтому многие приёмы работают одинаково.
В Паскале и C строка по сути массив символов. В Python вместо массива чаще используют список (list), и в нём могут лежать числа, строки и другие списки одновременно.
Главное отличие: строку в Python изменить нельзя. Запись s[0] = "A" даст ошибку, нужно собрать новую строку. Список менять можно: a[0] = 5.
В заданиях по теме часто встречается массив A с индексами от 0 до 9. Это десять элементов, а не девять и не одиннадцать. Прежде чем разбирать программу, выпиши значения вместе с индексами. Общие приёмы написания таких программ описаны в теме основы программирования.
Индексы и срезы: строки и массивы в питоне и Паскале
В Python индексы начинаются с 0. Отрицательный индекс считает с конца: у a = [5, 8, 2, 9] значение a[0] равно 5, а a[-1] равно 9.
Срез записывается как [начало:конец:шаг], причём элемент с индексом «конец» в срез не входит. Для s = "программа" получаем:
s[1:4]даёт"рог"(индексы 1, 2, 3);s[::-1]даёт строку задом наперёд;a[::2]берёт элементы с индексами 0, 2, 4 и так далее;a[1::2]берёт элементы с индексами 1, 3, 5 и так далее.
Полезные методы: s.split("_") режет строку по разделителю и возвращает список, s.count("a") считает вхождения, s.upper() и s.lower() меняют регистр, len(s) возвращает длину. У списков есть sort() и функция sum().
В Паскале всё немного иначе. Массив объявляют как array[0..9] of integer, границы индексов задаёшь сам. Символы в строке нумеруются с 1: s[1] — первая буква, а длину даёт length(s).
Двумерный массив: строки и столбцы
Двумерный массив — это таблица. В Python её делают как список списков:
a = [[1, 2, 3],
[4, 5, 6]]
Первый индекс задаёт строку, второй — столбец. Поэтому a[1][2] равно 6: вторая строка, третий столбец (нумерация с нуля). Количество строк равно len(a), количество столбцов равно len(a[0]).
Типичные действия:
- сумма строки номер i:
sum(a[i]); - сумма столбца номер j:
sum(row[j] for row in a); - главная диагональ квадратной таблицы: элементы
a[i][i].
В Паскале тот же массив объявляют как array[1..2, 1..3] of integer, а обращаются к элементу так: a[i, j].
Разбор задания по шагам
Определи, что напечатает программа:
s = "map_of_lists"
r = ""
for word in s.split("_"):
r += word[-1] + str(len(word))
print(r[::-1])
Шаг 1. Разбей строку по символу «_». Получится список ["map", "of", "lists"].
Шаг 2. Пройди по словам и дополни r. Для каждого слова берём последнюю букву word[-1] и длину слова:
map: букваp, длина 3, добавляемp3;of: букваf, длина 2, добавляемf2;lists: букваs, длина 5, добавляемs5.
Итог: r = "p3f2s5".
Шаг 3. Срез r[::-1] переворачивает строку целиком, в том числе цифры.
Ответ: 5s2f3p. Записывай результат по шагам, как здесь: так легче заметить, где потерялась цифра или буква.
Где ошибаются чаще всего
Конец среза. s[1:4] содержит три символа, а не четыре. Индекс 4 уже не входит.
Нумерация. В Python и в массивах с границей 0..9 счёт идёт с нуля, а в строках Паскаля с единицы. Последний индекс строки в Python равен len(s) - 1.
Сравнение чисел как строк. Если из строки "Аня:10" взять "10" и не превратить в число, то при сортировке "10" окажется меньше "9", ведь строки сравниваются посимвольно. Сначала int(...), потом сравнение. Чтобы не учитывать регистр имён, в ключ сортировки добавляют name.lower().
Результат sort(). Метод a.sort() меняет список на месте и возвращает None. Запись b = a.sort() оставит в b пустое значение. Если нужен новый список, используй sorted(a).
Строка и столбец. В a[i][j] первым идёт номер строки. Перепутанные i и j дают чужой элемент или выход за границы. Для работы с повторяющимися действиями пригодятся подпрограммы и рекурсия, а общий план решения помогает составить тема алгоритмы и исполнители.
Какие задания присылают и как пользоваться страницей
По этой теме ученики 9 класса присылают задания четырёх видов: выполнить фрагмент с одномерным массивом и найти значение переменной, определить вывод программы со строкой (split, срезы, count), посчитать результат со списком (генератор списка, sort с ключом, срезы) и дописать функцию-ключ для сортировки записей.
Найди в списке выше задание, похожее на твоё, и сравни ход решения со своим. Если подходящего нет, сфотографируй условие и отправь: придёт решение с ходом, а не только с ответом.