Задача для тренировки:
Напишите программу, которая проверяет, являются ли два введённых слова анаграммами.
Программа должна вывести True в случае, если введённые слова являются анаграммами, и False в остальных случаях.
Формат ввода:
Два слова, каждое на отдельной строке.
Слово может состоять только из латинских символов.
Формат вывода:
True или False.
Основное предназначение современных компьютеров – обработка большого количества данных. При этом надо как-то обращаться к каждой из тысяч (или даже миллионов) ячеек с данными. В этой ситуации имя дают не ячейке, а группе ячеек, в которой каждая ячейка имеет собственный номер. Такая область памяти называется массивом (или таблицей).
Массив – это группа переменных, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка в массиве имеет уникальный номер (индекс).
Одномерные массивы в Python представляют собой список элементов. Поэтому для работы с массивами используются списки (тип данных list).
Список в Python – это набор элементов, каждый из которых имеет свой номер (индекс). Нумерация всегда начинается с нуля, второй по счету элемент имеет номер 1 и т.д.
Создавать списки можно разными способами. Самый простой способ сделать это – перечислить элементы списка через запятую в квадратных скобках:
а = [1, 3, 4, 23, 5]
Список – это динамическая структура, его размер можно изменять во время выполнения программы (удалять и добавлять элементы).
Списки можно «складывать» с помощью знака «+», например, показанный выше список можно было построить так:
а = [1, 3] + [4, 23] + [5]
Сложение одинаковых списков заменяется умножением «*». Вот так создается список из 10 элементов, заполненный нулями:
а = [0]*10
В более сложных случаях используют генераторы списков – выражения, напоминающие цикл, с помощью которых заполняются элементы вновь созданного списка:
a = [i for i in range(10)]
Как вы знаете, цикл for i in range(10) перебирает все значения i от 0 до 9. Выражение перед словом for (в данном случае – i) – это то, что
записывается в очередной элемент списка для каждого i. В приведенном примере список заполняется значениями, которые последовательно принимает переменная i, то есть получим такой список:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
То же самое можно получить, если использовать функцию list для того, чтобы создать список из данных, которые получаются с помощью функции range:
а = list (range(10))
Для заполнения списка квадратами этих чисел можно использовать такой генератор:
а = [i*i for i in range(10)] #[0,1,4,9,16,25,36,49,64,81]
В конце записи генератора можно добавить условие отбора. В этом случае в список включаются лишь те из элементов, перебираемых в цикле, которые удовлетворяют этому условию.
Например, следующий генератор составляет список из всех четных чисел в диапазоне от 0 до 9:
а = [i for i in range(10) if i%2 ==0] #[0,2,4,6,8]
Часто в тестовых и учебных программах списки заполняют случайными числами. Это тоже можно сделать с помощью генератора:
from random import randint
а = [randint(20,100) for x in range(10)]
Здесь создается список из 10 элементов и заполняется случайными числами из отрезка [20,100]. Для этого используется функция randint, которая импортируется из модуля random.
Длина списка (количество элементов в нем) определяется с помощью функции len. К примеру:
a = [1, 3, 4, 23, 5]
n = len(a) #5
Далее во всех примерах мы будем считать, что в программе создан список a, состоящий из n элементов (целых чисел). Переменная i будет обозначать индекс элемента списка.
Для создания списка из 3-х элементов с использованием цикла запишем следующую программу:
Создать список из n элементов и ввести их значения можно также с помощью генератора списка:
a = [int(input()) for i in range(n)]
Здесь пользователь должен ввести n-количество элементов, которые преобразуются в целое число с помощью функции int, и это число добавляется к списку.
Возможен еще один вариант ввода, когда все элементы списка вводятся в одной строке. В этом случае строку, полученную от функции input, нужно «расщепить» на части с помощью метода split:
data = input()
s = data.split()
print (s)
Для вывода списка нужно использовать операцию print. Для выведения каждого элемента списка с указанием его индекса в квадратных скобках и по одному элементу в строке используем следующую программу:
Перебор элементов
Перебор элементов списка состоит в том, что мы в цикле просматриваем все элементы списка и, если нужно, выполняем с каждым из них некоторую операцию. Переменная цикла изменяется от 0 до n-1, где n – количество элементов списка:
for i in range(0,n):
a[i] + = 1;
в этом примере все элементы списка «a» увеличиваются на 1.
Если сам список изменять не нужно, для перебора его элементов удобнее всего использовать такой цикл:
а = [1,2,3,4,5]
for x in а:
print(х)
Здесь вместо print(х) можно добавлять любые другие операторы, работающие с копией элемента, записанной в переменную «x». Обратите внимание, что изменение переменной «x» в теле цикла приведет к ошибке.
Во многих задачах требуется найти некоторые элементы списка, удовлетворяющие заданному условию, и как-то их обработать. Простейшая из таких
задач – подсчет нужных элементов. Для решения этой задачи нужно ввести переменную-счетчик, начальное значение которой равно нулю. Далее в
цикле просматриваем все элементы списка. Если для очередного элемента выполняется заданное условие, то увеличиваем счетчик на 1.
Предположим, что в списке «a» записаны данные о росте детей в классе.
Найдем количество учеников, рост которых больше 120 см, но меньше 150 см. В следующей программе используется переменная-счетчик count:
count = 0
for x in a:
if (120 < x < 150):
count + = 1
Теперь более сложная задача: требуется найти средний рост этих детей.
Для этого нужно дополнительно в отдельной переменной складывать все нужные значения, а после завершения цикла разделить эту сумму на общее количество значений. Начальное значение переменной sum, в которой накапливается сумма, тоже должно быть равно нулю:
Суммирование элементов списка – это очень распространенная операция, поэтому для суммирования элементов в Python существует встроенная функция sum:
a = [1,2,3,4,5]
print (sum(a))
С ее помощью можно решить предыдущую задачу более аккуратно: сначала выделить в дополнительный список все нужные элементы, а затем поделить их сумму на количество (длину списка).
Для построения нового списка будем использовать условный оператор:
b = [x for x in a if 120 < x < 150]
print (sum(a)/len(a))
Условие отбора передало из списка «a» в новый список «b» только те элементы, которые удовлетворяют условию. А для вывода среднего роста детей в классе остается разделить сумму элементов нового списка на их количество.