Основы программирования на языке Python

Содержание

Слайд 2

А на прошлом уроке было… Разбор ошибок и задание на закрепление прошедшего материала

А на прошлом уроке было…

Разбор ошибок и задание на закрепление прошедшего

материала
Слайд 3

Ещё одна коллекция - кортеж Кортеж (tuple) – индексируемая неизменяемая коллекция,

Ещё одна коллекция - кортеж

Кортеж (tuple) – индексируемая неизменяемая коллекция, содержит

элементы произвольного типа

a = (1,2) b =() c = tuple() d =(1,)

a - кортеж из двух целочисленных элементов
b – пустой кортеж
c – ещё один пустой кортеж
d – кортеж из одного элемента

Слайд 4

Кортежи можно сравнивать друг с другом a = ('green', 0.1) b

Кортежи можно сравнивать друг с другом

a = ('green', 0.1) b = ('red',

0.15) print(a == b) print (a != b) print (a < b) print (a <= b)

False
True
True
True

В начале сравниваются первые элементы кортежей, если они равны, то вторые и т.п.

С помощью операций == и != можно сравнивать кортежи любых типов.
Операции <, <=, >, >= применимы только для кортежей одинаковых типов

Слайд 5

Кортежи можно присваивать друг другу Сначала вычисляются все значения справа, и

Кортежи можно присваивать друг другу

Сначала вычисляются все значения справа, и лишь

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

a, b, c = 1, 2, 3

a, b = b, a

Слайд 6

Сортировка Сортировка – упорядочивание элементов в выборке в соответствии с некоторым

Сортировка

Сортировка – упорядочивание элементов в выборке в соответствии с некоторым критерием

Из

известных нам коллекций – только к спискам.
Множество – неиндексируемая неупорядоченная коллекция.
Строка и кортеж – неизменяемые коллекции.


Их удобно использовать при перестановке элементов.


Слайд 7

Сортировка обменами (пузырьковая) Последовательно просматриваются элементы списка, если встречается неупорядоченная пара

Сортировка обменами (пузырьковая)

Последовательно просматриваются элементы списка, если встречается неупорядоченная пара s[k]

< s[k-1], то элементы этой пары меняются местами; просмотр продолжается до s[n]. В результате первого просмотра наименьший элемент оказывается на первом месте. Второй просмотр начинается с первого элемента и заканчивается элементом s[n-1] . Алгоритм заканчивается, когда в просмотре участвуют только два первых элемента

Будем рассматривать сортировку списка по возрастанию.


Сортировка выбором

Из элементов списка выбирается минимальный и меняется местами с первым элементом. В результате первого выбора минимальный элемент оказывается на первом месте. Второй выбор минимума начинается со второго элемента и так до тех пор, пока среди выбираемых не останутся два последних элемента

Последовательно просматриваются элементы списка, если встречается неупорядоченная пара s[k] > s[k-1], то элементы этой пары меняются местами; просмотр продолжается до s[n]. В результате первого просмотра наибольший элемент оказывается на первом месте. Второй просмотр начинается с первого элемента и заканчивается элементом s[n-1] . Алгоритм заканчивается, когда в просмотре участвуют только два первых элемента

Из элементов списка выбирается максимальный и меняется местами с первым элементом. В результате первого выбора максимальный элемент оказывается на первом месте. Второй выбор максимума начинается со второго элемента и так до тех пор, пока среди выбираемых не останутся два последних элемента

Слайд 8

Преобразование коллекций Применение методов list(), set() и tuple() к итерируемым объектам

Преобразование коллекций

Применение методов list(), set() и tuple() к итерируемым объектам позволяет

превратить эти объекты в список, строку и кортеж соответственно

s = 'корова' a = list(s) b = set(s) c = tuple(s) print(a) print(b) print(c)

['к', 'о', 'р', 'о', 'в', 'а']
{'о', 'а', 'в', 'р', 'к'}
('к', 'о', 'р', 'о', 'в', 'а')

Слайд 9

s = list() for i in range(int(input())): s.append(input()) m = set(s)

s = list() for i in range(int(input())): s.append(input()) m = set(s) print(*m)

В одну строчку

будут выведены уникальные элементы списка в произвольном порядке
Слайд 10

Финал и не финал - разбор задачи, анализ ошибок Вводятся данный

Финал и не финал - разбор задачи, анализ ошибок

Вводятся данный о

N, командах, каждая из которых характеризуется названием и количеством очков.
Половина команд (с округлением вверх) проходит в финал. Соответственно, нам нужно вывести список команд прошедших в финал (по алфавиту) и список команд не прошедших в финал (по алфавиту)


Простой сортировкой по убыванию не обойдемся

Первый этап – ввод исходных данных

n = int(input()) commands = list() for i in range(n): name = input() result = int(input()) commands.append((name, result))

Вполне можно сделать два списка – для имен команд и набранных командами очков соответственно. Но тема урока была «кортежи». Давайте воспользуемся этой коллекцией

Слайд 11

Второй этап – сортировка команд по убыванию очков Тут главное не

Второй этап – сортировка команд по убыванию очков

Тут главное не запутаться

в индексах

commands[j][0]

commands[j][1]

- название j-ой команды

- количество очков j-ой команды

Используем алгоритм «пузырьковой» сортировки

for i in range(n - 1): for j in range(n - 1 - i): if commands[j][1] < commands[j + 1][1]: commands[j], commands[j + 1]
= commands[j + 1], commands[j]

Слайд 12

Третий этап – сортировка имен команд по алфавиту в каждой из

Третий этап – сортировка имен команд по алфавиту в каждой из

групп (финалистов и нефиналистов)

Поскольку берется половина от общего числа с округлением вверх, то число финалистов считается как (n + 1) // 2

Для разнообразия и закрепления алгоритма будем использовать сортировку выбором.

В отличие от предыдущего этапа, будем сортировать по первому компоненту кортежа, т.е. по commands[j][0]

Слайд 13

Сортируем финалистов for i in range((n + 1) // 2 -

Сортируем финалистов

for i in range((n + 1) // 2 - 1):

m = i for j in range(i, (n + 1) // 2): if commands[j][0] < commands[m][0]: commands[j], commands[m] =
commands[m], commands[j]

А теперь аутсайдеров

for i in range((n + 1) // 2, n - 1): m = i for j in range(i, n): if commands[j][0] < commands[m][0]: commands[j], commands[m] =
commands[m], commands[j]

Слайд 14

И завершение программы – выводим результаты на печать Не забудем, что

И завершение программы – выводим результаты на печать

Не забудем, что выводить

нужно только название команд

for command in commands: print(command[0])

Слайд 15

Методы split и join. Списочные выражения Популярные методы строк. Правила генерации

Методы split и join. Списочные выражения

Популярные методы строк. Правила генерации списков.

Считывание значений, введённых одной строкой.
Слайд 16

Методы коллекций Множества add() discard() remove() pop() clear() copy() union() intersection()

Методы коллекций

Множества

add()
discard()
remove()
pop()
clear()
copy()
union()
intersection()
difference()
symmetric_difference()
issubset()
issuperset() 

Списки

append()
extend()
insert()

Это далеко не все методы…
Постепенно будем их изучать


Слайд 17

имя_коллекции.имя_метода(аргументы_метода) Конечно же есть. Их не может не быть ☺ ☺

имя_коллекции.имя_метода(аргументы_метода)

Конечно же есть. Их не может не быть ☺


split() разбивает строку

по произвольному разделителю на список «слов»

join() собирает из списка слов единую строку через заданный разделитель

Едва ли не самые популярные методы строк, широко используемых питонистами – split() и join()

Слайд 18

Строка – неизменяемый объект

Строка – неизменяемый объект

Слайд 19

Метод split() Служит для преобразования строки в список my_string = 'Иван

Метод split()

Служит для преобразования строки в список

my_string = 'Иван Иванович Иванов' my_list

= my_string.split() print(my_list)

['Иван', 'Иванович', 'Иванов']

Строка разбивается на части, разделённые любыми символами пустого пространства (набором пробелов, символом табуляции и т.д.).

Слайд 20

my_string = 'Иван...Иванович...Иванов' my_list = my_string.split('...') print(my_list) ['Иван', 'Иванович', 'Иванов'] Строка

my_string = 'Иван...Иванович...Иванов' my_list = my_string.split('...') print(my_list)

['Иван', 'Иванович', 'Иванов']

Строка разбивается на части, разделителем

считается строка аргумент
Слайд 21

my_string = 'Иван Иванович Иванов' my_list = my_string.split() print(my_list) my_list =

my_string = 'Иван Иванович Иванов' my_list = my_string.split() print(my_list) my_list = my_string.split(' ') print(my_list)

Давайте сравним


Один

пробел между словами в строке

['Иван', 'Иванович', 'Иванов']

['Иван', 'Иванович', 'Иванов']

my_string = 'Иван Иванович Иванов' my_list = my_string.split() print(my_list) my_list = my_string.split(' ') print(my_list)

Два пробела между словами в строке

['Иван', 'Иванович', 'Иванов']
['Иван', '', 'Иванович', '', 'Иванов']

Слайд 22

Пример s = 'раз два три' print(s.split() == ['раз', 'два', 'три'])

Пример

s = 'раз два три' print(s.split() == ['раз', 'два', 'три']) print(' one two

three '.split() == ['one', 'two', 'three']) print('192.168.1.1'.split('.') == ['192', '168', '1', '1']) print(s.split('а') == ['р', 'з дв', ' три']) print('A##B##C'.split('##') == ['A', 'B', 'C'])

True
True
True
True
True

Слайд 23

Метод join() Служит для преобразования списка в строку my_list = ['1',

Метод join()

Служит для преобразования списка в строку

my_list = ['1', '2', '3',

'4', '5'] my_string =' '.join(my_list) print(my_string)

1 2 3 4 5

Слайд 24

Примеры s = ['Тот', 'Кого', 'Нельзя', 'Называть'] print(''.join(s) == 'ТотКогоНельзяНазывать') print('

Примеры

s = ['Тот', 'Кого', 'Нельзя', 'Называть'] print(''.join(s) == 'ТотКогоНельзяНазывать') print(' '.join(s) == 'Тот

Кого Нельзя Называть') print('-'.join(s) == 'Тот-Кого-Нельзя-Называть') print('! '.join(s) == 'Тот! Кого! Нельзя! Называть')

True
True
True
True

Слайд 25

Подытожим Список a ['77', '88', '21', '11'] a = s.split('.') s

Подытожим

Список a
['77', '88', '21', '11']

a = s.split('.')

s = '.'.join(a)

Давайте проверим


[1, 2,

3].join([4, 5, 6])

AttributeError: 'list' object has no attribute 'join'

Слайд 26

Задача 1. «Глория Скотт» Ограничение времени 1 секунда Ограничение памяти 64Mb

Задача 1. «Глория Скотт»

Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод

или output.txt
В рассказе Артура Конан Дойля «Глория Скотт» юный Шерлок Холмс сумел прочитать шифрованное письмо, текст которого в переводе Г. Любимова приведён в примере: в письме нужно читать только каждое третье слово (как будто непонятно, что может означать слово «берегитесь»!). Напишите программу, которая вычленяет из введённой строки каждое третье слово. Знаки препинания считать частью слова, даже если это приводит к неверной пунктуации (как, например, в примере, где не должны стоять запятые после подлежащего «дело» и после подлежащего «Хадсон»).
Формат ввода. Одна строка, состоящая из нескольких слов.
Формат вывода. Одна строка, включающая каждое третье слово из введённой строки; слова разделены пробелами.

Пример

Ввод

С дичью дело, мы полагаем, закончено. Глава предприятия Хадсон, по сведениям, рассказал о мухобойках всё. Фазаньих курочек берегитесь.

Вывод

дело, закончено. Хадсон, рассказал всё. берегитесь.

Слайд 27

Списочные выражения Списочные выражение – ещё одна фишка Python, позволяющая упростить

Списочные выражения

Списочные выражение – ещё одна фишка Python, позволяющая упростить код

Необходимо

создать список квадратов целых чисел от 0 до 9 включительно

squares = [] for i in range(10): squares.append(i**2) print(squares)

squares = [i**2 for i in range(10)] print(squares)

То же самое, но со списочными выражениями

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Результат – список:

В Python не принято создавать пустые списки, чтобы потом заполнять их значениями

Слайд 28

Необходимо создать список квадратов четных целых чисел от 0 до 9

Необходимо создать список квадратов четных целых чисел от 0 до 9

включительно

even_squares = [] for i in range(10): if i % 2 == 0: even_squares.append(i**2) print(even_squares)

То же самое, но со списочными выражениями

even_squares = [i**2 for i in range(10) if i % 2 == 0] print(even_squares)

even_squares = [i**2 for i in range(0,10,2)] print(even_squares)

Вместо условия в списочном выражении использовали шаг в range()


Результат – список:

[0, 4, 16, 36, 64]

Слайд 29

Можно ставить несколько циклов в списочном выражении print([i * j for

Можно ставить несколько циклов в списочном выражении

print([i * j for i

in range(3) for j in range(3)])

[0, 0, 0, 0, 1, 2, 0, 2, 4]

Слайд 30

Задание 3. Списочная квадратура Ограничение времени 1 секунда Ограничение памяти 64Mb

Задание 3. Списочная квадратура

Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод

или output.txt
Используя списочное выражение, создайте список, включающий числа от 0 до введённого пользователем, возведённые в квадрат. Выведите элементы этого списка, каждый на отдельной строке, с помощью прохода циклом for непосредственно по элементам списка.
Формат ввода. Одно натуральное число.
Формат вывода. Числа на отдельных строках.
Слайд 31

Использование списочных выражений в аргументах методов split() и join() Ещё один

Использование списочных выражений в аргументах методов split() и join()

Ещё один «питонский»

прием при написании кода – считывание значений, введённых одной строкой
Слайд 32

Строка разделяется на отдельные слова с помощью split. Затем списочное выражение

Строка разделяется на отдельные слова с помощью split. Затем списочное выражение

пропускает каждый элемент получившегося списка через функцию int, превращая строку '976' в число 976.


print([int(x) for x in '976 929 289 809 7677'.split()])

[976, 929, 289, 809, 7677]

Слайд 33

evil, good = [int(x) for x in '666 777'.split()] print(evil, good, sep='\n') 666 777

evil, good = [int(x) for x in '666 777'.split()] print(evil, good, sep='\n')

666
777

Слайд 34

print(', '.join(str(i) + '**2=' + str(i**2) for i in range(1, 10)))

print(', '.join(str(i) + '**2=' + str(i**2) for i in range(1, 10)))


1**2=1, 2**2=4, 3**2=9, 4**2=16, 5**2=25, 6**2=36, 7**2=49, 8**2=64, 9**2=81

Слайд 35

И финальный аккорд – решаем задачу в одну строку print(' '.join([str(int(i)**int(i))

И финальный аккорд – решаем задачу в одну строку

print(' '.join([str(int(i)**int(i)) for

i in input().split()]))

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

1 2 3 4 5
1 4 27 256 3125


Если вы кодите таким образом – можете считать себя настоящим питонистом

Слайд 36

На закрепление Вводится строка произвольной длины. Каждое слово этой строки напечатать

На закрепление

Вводится строка произвольной длины. Каждое слово этой строки напечатать с

новой строки столько раз, сколько в данном слове букв. Между словами в строке вывода должны быть пробелы.

зима лето попугай
зима зима зима зима
лето лето лето лето
попугай попугай попугай попугай попугай попугай попугай

«Соединителем» в методе join()выступает '\n'—символ начала новой строки


print('\n'.join((x + ' ') * len(x) for x in input().split()))

Слайд 37

Задание 2. Вертикальная диаграмма Ограничение времени 1 секунда Ограничение памяти 64Mb

Задание 2. Вертикальная диаграмма

Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод

или output.txt
Напишите программу для построения горизонтальных столбчатых диаграмм с помощью символа звёздочки.
Подсказка: выводя строку, не используйте для этого цикл.
Формат ввода. Вводится несколько натуральных чисел, разделённых пробелами.
Формат вывода. Для каждого введённого числа выводится строка, состоящая из звёздочек *, длина которой равна этому числу.

Пример

Слайд 38

Задание 4. Списочная квадратура — 2 Ограничение времени 1 секунда Ограничение

Задание 4. Списочная квадратура — 2

Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или

input.txt
Вывод стандартный вывод или output.txt
Используя списочное выражение, создайте список, состоящий из чисел от 0 до введенного пользователем (не включая это число), возведённые в квадрат. Выведите элементы этого списка на одной строке, разделяя их пробелами, с помощью метода join.
Формат ввода. Одно натуральное число.
Формат вывода. Несколько чисел на одной строке, разделённые пробелами.

Пример