Муниципальное бюджетное образовательное учреждение дополнительного образования станция юных техников города Ейска муниципального образования Ейский район
Методическая разработка
«Введение в программирование на языке Python»
МБОУ ДО СЮТ г.Ейска МО Ейский район
Ейск, 2020
Аннотация
Автором методической разработки «Введение в программирование на языке Python» является Кривко В.М., педагог дополнительного образования МБОУ ДО СЮТ г. Ейска МО Ейский район, кандидат технических наук, доцент.
Методическое пособие обеспечивает учебную дисциплину «Креативное программирование. Язык Python» и предназначено для учащихся кружка МБОУ ДО СЮТ.
Основным его отличием является краткая подача теоретического материала и большое количество практических задач, решение которых поддерживает развитие программирования с помощью креативности, воображения и интереса.
Данное пособие рассчитано на тех, у кого нет никакого опыта в программировании.
Может также быть полезно тем, кто впервые знакомится с языком программирования Python.
При проведении занятий в условиях «дистанционной (удаленной) работы» полностью поддерживает данный режим обучения.
Введение
Методическая разработка «Введение в программирование на языке Python» предназначено для учащихся, посещающих учреждение дополнительного образования станцию юных техников города Ейска, изучающих дисциплину «Креативное программирование. Язык Python».
Цель данной методической разработки - раскрытие опыта проведения занятий по изучению программирования на языке Python в условиях дополнительного образования.
«Введение в программирование на языке Python» мы изучаем на групповых занятиях. Оптимальная наполняемость группы 6 – 8 человек.
Особенностью изучения основ программирования в учреждениях дополнительного образования является то, что группы учащихся практически всегда состоят из учеников различных возрастов.
В нашем случае возраст разниться от 10 до 15 лет (5-10 класс). Поэтому на таких занятиях крайне важно соблюдать дифференцированный подход к учащимся. Это достигается решением специально подобранных задач различной сложности, согласно возрасту.
К моменту записи в кружок по изучению языка Python, учащиеся до этого обучаются в кружках с изучением программирования в средах, написанных специально для школьников, таких как Scratch и Codu Game
Lab. Таким образом, выстроена система подготовки учащихся к изучению языка Python.
Учебная программа дисциплины «Креативное программирование. Язык Python» рассчитана на один год занятий в объеме 144 часов.
Необходимость в написании данного пособия явилось то, что существующие методические пособия и рекомендации, выложенные в открытом доступе, не всегда адаптированы для системы дополнительного образования. Это учебное пособие закрывает потребность обеспечить занятия по данному курсу.
Методическая разработка в большей степени ориентирована на обеспечение практических занятий, в то же время содержит, необходимый для понимания и решения задач, теоретический материал и обеспечивает проведение занятий по дисциплине «Креативное программирование. Язык Python».
Креативное программирование поддерживает развитие программирования с помощью креативности, воображения и интереса. Тем самым в большей степени задействован творческий потенциал обучаемых, что расширяет знания, практику и элементарные навыки необходимые учащимся для создания динамичных и интерактивных компьютерных средств, все это поддерживает развитие компьютерного мышления у ребят.
Материал пособия включает краткие сведения о теории вопроса и приводится некоторый перечень задач для самостоятельной работы с решениями по данному вопросу. Все приведенные примеры решены в приложении Wing 101 v7.
В пособии содержатся конкретные материалы, которые может использовать педагог в своей работе (задачи, поуровневые задания подкрепляющие конкретную тематику, инструкции для решения приведенных задач).
Данную методическую разработку можно использовать при проведении занятий в малых группах при изучении языка Python.
Оглавление
1. Введение в Python ………………………………………………6 стр.
2. Переменные. Типы данных…………………………………….16 стр. 3. Целочисленная арифметика……………………………………25 стр.
4. Условный оператор if…………………………………………..36 стр.
5. Цикл for…………………………………………………………..48 стр.
6. Цикл while……………………………………………………….56 стр. 7. Строки…………………………………………………………….62 стр.
8. Метод……………………………………………………………..71 стр.
9. Списки…………………………………………………………….77 стр.
10. Двумерные массивы……………………………………………105 стр.
11. Функции………………………………………………………..113 стр. 12. Заключение…………………………………………………..…124 стр.
Литература…………………………………………………………..126 стр.
Язык программирования Python был задуман нидерландским программистом Гвидо ван Россумом в 1980-х годах. На момент создания языка, Гвидо ван Россум был увлечён просмотром комедийного сериала «Воздушный цирк Монти Пайтона», в честь главного героя этого сериала, Монти Пайтона, язык и получил своё название.
Язык Python в последние годы получил большую популярность. Python – это многоцелевой язык. Его можно одинаково хорошо использовать для разработки любых программ и их тестирования.
Так, например, компания Google широко использует язык Python для своей поисковой системы.
Большая часть популярного видеохостинга YouTube написана на языке Python.
Также язык Python применяется в анимационной графике, научных вычислениях и тестировании аппаратного обеспечения. Программирование развивает креативность, логическое мышление, а также навыки поиска и устранения ошибок.
Нами будет рассматриваться версия 3 данного языка.
Если занятия проводятся в «удаленном» формате, то перед началом работы необходимо скачать интерпретатор Python версии 3 с официального сайта www.python.org. В разделе Download можно скачать последнюю
версию, подходящую для операционной системы на вашем ПК.
После открытия установщика необходимо нажать Install Now, и программа автоматически установится.
С дистрибутивом Python поставляется среда разработки для языка Python, которая называется IDLE.
Но мы для разработки программ будем использовать среду разработки Wing IDE 101 (ее бесплатную версию). Это приложение, в котором можно писать программы, отлаживать их, запускать. Его можно скачать по ссылке wingware.com/downloads/wingide-101. В списке скачивания необходимо выбрать Free editions: Wing 101, а в открывшемся окне — Windows Installer, для операционной системы Windows.
Для программирования очень важна практика, т.е. непосредственный опыт написания программ. Данное учебное пособие в большей степени ориентировано на использовании в обучении практики решения задач, практики, которая применяется на «живых» примерах.
В нашем случае используется следующий алгоритм: «Теория на занятии и последующее решение практических задач».
Любая Python-программа состоит из последовательности допустимых символов (лексем), записанных в определенном порядке и по определенным правилам.
Лексемы включают в себя: комментарии; литералы; знаки пунктуации; идентификаторы; ключевые слова.
Комментарии начинаются с символа «#» предназначены для пояснения написанного кода (Python их пропускает).
Например: # Это комментарий.
Литералы - значения, представленные в коде программы, например, числа или строки.
Например: 5 # Целочисленный литерал.
3.4 # Литерал в виде числа с плавающей точкой.
'строка' # Строковый литерал.
Знаки пунктуации. В алфавит Python входит достаточное количество знаков пунктуации, которые используются для различных целей. Например, знаки «+» или «*» могут использоваться для сложения и умножения, а знак запятой «,» - для разделения.
Идентификатор - обычное имя, которое дается ссылке на какой-либо объект. Идентификатор имеет правила его записи, которые рассмотрим далее.
Ключевые слова в Python - имеют специальное назначение и представляют собой управляющие конструкции языка.
Пример программы c комментариями :
a = int(input()) #Оператор целочисленного ввода переменной b = int(input()) # Оператор целочисленного ввода переменной c = int(input()) # Оператор целочисленного ввода переменной s = a + b + c #Оператор сложения и присваивания print(s) #Оператор вывода данных на экран
Что такое функция в программировании, мы узнаем несколько позднее. До этого, будем считать, что print() – это команда языка Python,
которая выводит на экран то, что в ее скобках.
Один из самых распространенных способов вывести данные в Python – это напечатать их на экране. Если вы находитесь на этапе изучения языка, такой способ является основным для того, чтобы быстро просмотреть результат свой работы. Для вывода данных на экран используется функция print().
Рассмотрим часто применяемые способы использования данной функции. Примеры, здесь и далее, будут выполнены в приложении Wing 101.
Рекомендуется все изложенные примеры выполнить самостоятельно.
По умолчанию, для разделения элементов в функции print() используется пробел.
Для замены разделителя необходимо использовать параметр sep функции print().
В качестве конечного элемента выводимой строки, используется символ перевода строки.
для его замены используется параметр end.
За ввод в программу данных с клавиатуры в Python отвечает функция input(). Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст
его программе, которая уже будет обрабатывать его согласно своим алгоритмам.
Для считывания вводимых с клавиатуры данных используется функция input().
Для сохранения данных в переменной используется следующий синтаксис.
Если считывается с клавиатуры целое число, то строку, получаемую с помощью функции input(), можно передать сразу в функцию int().
Для вывода строки-приглашения («Введите номер»), используйте ее в качестве аргумента функции input().
1.4 Задания для самостоятельной работы 1.4.1 Ввод с консоли
print(5 + 10) print(3 * 7, (17 - 2) * 8)
print(2 ** 16) # две звёздочки означают возведение в степень print(37 / 3) # один слэш — это деление с ответом-дробью print(37 // 3) # два слэша считают частное от деления нацело print(37 % 3) # процент считает остаток от деления нацело
1.4.2 Ввод с консоли
print('Как вас зовут?') name = input() # считываем строку и присваиваем ей имя name print('Здравствуйте, ' + name + '!')
1.4.3 Ввод с консоли
Программа считывает два числа и выводит их сумму. Для этого считаем два числа и сохраним их в переменные a и b, пользуясь оператором присваивания =.
Слева от оператора присваивания в программах на Питоне ставится имя переменной — например, строка из латинских букв. Справа от оператора присваивания ставится любое выражение. Имя станет указывать на результат вычисления выражения. Введем эту программу и посмотрите на результаты её работы:
1.4.4 Ввод с консоли
1.4.5 Ввод с консоли
2.1 Что такое переменная?
Память компьютера состоит из ячеек, в которых можно хранить информацию. Например, если вы хотите сохранить в памяти компьютера некоторое значение, необходимо написать, например, вот такой код:
При выполнении этого кода, Питон найдет незанятую другими программами ячейку памяти, запишет в нее значение 12 и свяжет эту ячейку с именем a. Если значение не вмещается в одну ячейку памяти, Питон найдет столько свободных ячеек, сколько потребуется и свяжет их с именем a.
То есть, переменная — это ссылка на область памяти, достаточной для хранения нужного значения.
2.2 Оператор присваивания
Вы уже знаете, что этот код связывает имя переменной a с ячейкой памяти, в которой хранится значение 12.
Это связывание имени переменной и ее значения называется присваиванием, а знак = называется оператором присваивания.
То есть присвоить значение переменной — это написать название переменной, поставить оператор присваивания и написать значение переменной.
Для названия переменных рекомендуется использовать латинские буквы. Если для названия переменной использовать два или больше слов их можно разделить знаком подчеркивания.
Например: my_wersia или abv_var_name.
Необходимо запомнить, что питон различает строчные и заглавные буквы. То есть Abc2, ABC2 и abc2 — разные переменные.
Правилами языка название переменной запрещено начинать с цифры, то есть 5var — неправильное имя.
Таким образом, переменная — это некоторая ячейка в памяти, в которой хранится какое-то значение любого из возможных типов, например, число или строка. В переменную можно записать какое-то значение (это называется присвоить переменной значение). Для присваивания значения переменной используется операция =, где слева от знака присваивания записывается имя переменной, справа — присваиваемое значение, которое может быть числом, строкой, другой переменной, каким-то выражением.
Значение переменной можно использовать при вычислениях или вывести его на экран при помощи функции print().
Пример: Пусть длина школьного урока хранится в
переменной lesson_time, продолжительность перемены между уроками — rest_time, а количество уроков — n. Хотим вычислить сколько времени занимает заданное количество уроков, которое будет храниться в переменной total_time.
В окне среды Wing IDE 101наберем с клавиатуры следующие переменные, составим выражение и отпечатаем результат на экране.
Имя переменной (также называется идентификатором) — последовательность букв, цифр и символа подчёркивания, первым символом должна быть буква или символ подчёркивания. В языке Python допускаются буквы не латинского алфавита в качестве имён переменных, но желательно использовать только латинскими символами.
Имена переменных должны быть осмысленными и понятными, например, lesson_time или rest_time.
Целые числа (на английском int) представляют собой числа, такие как 1; 2; 3; 4;… 99 или 0.
Числа с плавающей запятой (на английском float) представляют собой дроби или числа с десятичными точками, такие как 3.5, 42.1 и 5.0.
Для Python число 5 — целое, а 5.0 — число с плавающей запятой.
Эти числа называют значениями .
Если мы присваиваем переменной a значение, равное 5, то переменная будет иметь значение типа int, который используется для целых чисел. При умножении, вычитании и сложение чисел этого типа мы получаем числа того же типа.
При выполнении операции деления результатом будет дробное число. Если переменной b присвоить значение 10 / 2, при выводе на экран результата увидим число 5.0, которое равно числу 5, но имеет другой тип. Переменная b имеет значение типа float. Это специальный тип данных для представления действительных чисел, и при умножении, вычитании и сложении чисел этого типа мы получаем числа того же типа.
Еще один тип данных используется для работы со строками. Если мы присваиваем переменной с значение, равное 'Hello', то эта переменная будет иметь значение типа str. Строки так же можно складывать. Однако операция сложения для целых чисел и для строк работает по-разному: для чисел это сложение, а для строк — конкатенация.
2.5 Основные операции над строками:
A + B — конкатенация, то есть соединение строк путём размещения строки B сразу после строки A;
A * n — повторение строки n раз, значение n должно быть целого типа.
Пример:
Иногда полезно целое число записать как строку. И, наоборот, если строка состоит из цифр, то полезно эту строку представить в виде числа, чтобы дальше можно было выполнять арифметические операции с ней. Для этого используются функции, имя которых совпадает с именем типа, то есть int, float, str. Например, int('123') вернёт целое число 123, а str(123) вернёт строку '123'.
Пример:
Пример:
Результатом будет строка '2', повторенная 11 раз.
Иногда бывает полезно целое число записать как строку. И, наоборот, если строка состоит из цифр, то полезно эту строку представить в виде числа, чтобы дальше можно было выполнять арифметические операции с ней. Для этого используются функции, название которых совпадает с именем типа, то есть int, float, str. Например, int(‘123’) вернет целое число
123, str(123) вернет строку ‘123’, а следующая инструкция:
print(str(2 + 2) * int('2' + '2')) выведет символ “4”, повторенный 22 раза.
Функция int также поможет превратить дробное число в целое, отбросив дробную часть: int(12.3) = 12, int(-12.3) = -12.
Когда программы разрастаются то, их становится сложно читать. Чтобы упростить чтение отдельных частей программы в программу добавляются заметки, которые поясняют, что программа делает. Эти заметки называются комментариями и начинаются с символа #.
# вычислите процент от прошедшего часа процент = (минута * 100) / 60
Вы можете оставлять комментарии в конце выражения:
процент = (минута * 100) / 60 # процент часа Весь текст от # до конца строки игнорируется Python.
Комментарии обычно поясняют программу и отвечают на вопрос
"почему?". Они содержат полезную информацию, которой нет в коде.
2.8.1 Ввести данные с консоли Решение:
2.8.2 Напишите программу, которая выводит слово 'Python' 12 раз подряд (только буквы, без кавычек).
Решение:
2.8.3 Напишите программу, которая будет считывать два целых числа (каждое в отдельной строке) и выводить их сумму.
Решение:
2.8.4 Напишите программу, которая считывает значения двух переменных a и b, затем меняет их значения местами и выводит их значения на экран. Использовать арифметические операции в этой задаче нельзя.
Решение:
2.8.5 Напишите программу, которая считывает целое число и выводит текст, аналогичный приведенному в примере.
Входные данные: Вводится целое число, по модулю не превосходящее 1000.
Выходные данные: Выведите сначала фразу "Следующее число за числом", затем введенное число, затем слово " это число ", окруженное пробелами, затем формулу для следующего за введенным числа, наконец, знак точки без пробела. Аналогично в следующей строке для предыдущего числа.
Решение:
Как понять что такое оператор и операнды? Это можно объяснить на простым примере: «10 + 5 = 15». Здесь,в этом выражении 10 и 5 — операнды. Знак «+» — оператор.
Пусть переменная a = 10, а переменная b = 5
Пример
+ Добавление — добавляет левый операнд a + b = 15
к правому
Оператор Описание |
Пример |
|
− |
Вычитание — вычитает правый операнд из левого |
a − b = 5 |
* |
Умножение — умножает левый операнд на правый |
a * b = 50 |
/ |
Деление — делит левый операнд на правый |
a / b = 2 |
% |
Деление по модулю — делит левый операнд на правый и возвращает остаток. С помощью него, например, можно проверять числа на четность и нечетность. Если левый операнд меньше правого, то результатом будет левый операнд |
a % b = 0 |
** |
Возведение в степень |
a**b = 100000 |
// Целочисленное деление — деление в котором 9//2=4, возвращается только целая часть результата. а 9.0//2.0=4.0
Часть после запятой отбрасывается.
Таким образом, при пользовании, знаки пунктуации +, -, * , /,%,**,// называются операторами . Операторы сообщают Python, какую операцию необходимо произвести над числами.
Оператор |
Описание |
Пример |
||||||
= |
Присваивает значение правого операнда левому. |
c = 23 присвоит переменной с значение 23 |
||||||
+= |
Прибавит значение правого операнда к левому и присвоит эту сумму левому операнду. |
с=5; а=2; с+=а равносильно: с=с+а. с будет равно 7 |
||||||
−= |
Отнимает значение правого операнда от левого и присваивает результат левому операнду. |
с=5; а=2; с-=а равносильно: с=с-а. с будет равно 3 |
||||||
*= |
Умножает правый операнд с левым и присваивает результат левому операнду. |
с=5; а=2; с*=а равносильно: с=с*а. c будет равно 10 |
||||||
/= |
Делит левый операнд на правый и присваивает результат левому операнду. |
с=10; а=2; с/=а равносильно: с=с/а. c будет равно 5 |
||||||
%= |
Делит по модулю операнды и присваивает результат левому. |
с=5; а=2; с%=а равносильно: с=с%а. c будет равно 1 |
||||||
|
**= |
Возводит левый операнд в степень правого и присваивает результат левому операнду. |
с=3; а=2; с**=а равносильно: с=с**а. |
|
||||
Оператор |
Описание |
Пример |
||||||
|
|
c будет равно 9 |
||||||
//= Производит целочисленное деление с=11; а=2; левого операнда на правый с//=а равносильно: с=с//а.
и присваивает результат левому c будет равно 5 операнду.
Самые приоритетные операции вверху, снизу — с низким приоритетом.
Вычисления выполняются слева направо, то есть, если в выражении встретятся операторы одинаковых приоритетов, первым будет выполнен тот, что слева.
Оператор возведения в степень исключение из этого правила. Из двух операторов ** сначала выполнится правый, а потом левый.
( ) |
Скобки |
** |
Возведение в степень |
+x, -x, ~x |
Унарные плюс, минус и битовое отрицание |
*, /, //, % |
Умножение, деления, взятие остатка |
+, - Сложение и вычитание
По традиции первая программа — это «Привет, мир!». У этой программы даже есть собственная страница (https://ru.wikipedia.org/wiki/Hello,_world!) в Википедии.
Cоздадим файл для своей первой программы в левом окне программы Wing 101. Напечатаем print("Привет, мир!").
Если взять и запустить программу с «ненужным» отступом для print a = 1 print(a) она не заработает и закончится с ошибкой: IndentationError: unexpected indent.
Отступы очень важны в Питоне. О том, зачем они нужны будет рассказано в разделе про ветвление, мы обратимся к рассмотрению правильности работы с отступами.
Сохраним файл назовем его, например, hello.py. Имя файла должно иметь расширение .py (от названия языка python) и может содержать только латинские буквы, цифры и знак подчеркивания. Расширение файла — это все, что пишется после точки.
Запустите программу зеленой кнопкой в меню программы и убедитесь, что результат работы программы — это надпись Привет, мир! в правом нижнем окне программы Wing 101.
Функции print() в качестве аргумента можно передавать не только строки, но и числа, и арифметические выражения.
Например:
3.5 Общие правила определения приоритетов операций такие:
Арифметические операции A + B сумма; A – B разность; A * B произведение; A / B частное ;A**B возведение в степень.
Полезно помнить, что квадратный корень из числа это X**0. 5, а корень степени n – это X**(1/n).
1. Сначала выполняются операции возведения в степень справа налево, то есть 2**3**2 — это =512.
2. Затем выполняются унарные минусы (отрицания).
3. Далее выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
4. И последними выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.
Для изменения порядка действий необходимо использовать круглые скобки. Например:
Операция деления (/) для целых чисел всегда возвращает значение типа float, даже если делимое делится нацело на делитель. Часто бывает необходимым выполнить деление с целочисленным результатом. Для этого в Python есть специальная операция целочисленного деления, которая обозначается //. Результатом будет число, которое было бы получено в результате деления, но с отброшенной дробной частью. Другая связанная с этим операция — это операция взятия остатка от деления, обозначаемая %.
В случае отрицательных чисел операции по-разному определены в различных языках программирования. Например, в Python 3 округление будет производится вниз. Например:
Задача. Сумма цифр трехзначного числа
Дано трёхзначное число. Найдите сумму его цифр.
В магазине батарейки продаются поштучно или упаковками по 4 штуки. Выгоднее покупать батарейки упаковками, чем поштучно. Вам необходимо купить ровно n батареек. Определите, сколько упаковок батареек и батареек поштучно надо купить, чтобы покупка была максимально выгодной?
Решение:
Школьники делят яблоки поровну так, чтобы каждому достались только целые яблоки, остальные яблоки остаются в корзине. Определить, сколько яблок достанется каждому школьнику и сколько яблок останется в корзине.
Решение:
Школьники делят яблоки.
Данная задача сводится к двум операциям:
1. Делению нацело. Так находится количество целых яблок, приходящихся на каждого школьника.
2. Нахождению остатка от деления нацело. Так находится количество яблок, оставшихся в корзине.
Как нам уже известно в языке Python первая операция обозначается двумя знаками слэша //, вторая – знаком процента %.
Найти площадь и периметр прямоугольного треугольника. С клавиатуры вводятся длины двух катетов прямоугольного треугольника. Программа должна вычислить площадь и периметр прямоугольного треугольника.
Решение:
Площадь прямоугольного треугольника равна половине площади прямоугольника, стороны которого равны длинам катетов (a,b). Это значит, чтобы найти площадь прямоугольного треугольника, надо перемножить катеты и разделить полученное произведение на два.
Периметр находится путем сложения длин всех сторон треугольника.
Поскольку известны только катеты, необходимо вычислить гипотенузу по теореме Пифагора: c2 = a2 + b2.
Откуда длина гипотенузы равна:
Чтобы извлечь квадратный корень в Python, можно воспользоваться функцией sqrt() из модуля math. Чтобы получить к нему доступ, сначала импортируем библиотеку math следующим образом: import math.
3.7.4 Найти сумму цифр четырехзначного числа Решение:
Чтобы извлечь отдельные цифры числа, следует воспользоваться операциями деления нацело // и нахождения остатка от деления % на 10.
Если найти остаток от деления на 10 исходного четырехзначного числа n, то получим последнюю (четвертую) цифру этого числа d4. Если найти остаток от деления на 100 четырехзначного числа, то получим двухзначное число , а затем разделить нацело на 10, то получим третью его цифру d3. Если найти остаток на 1000 четырехзначное число и разделить нацело на 100, то получим его вторую цифру d2.
Чтобы получить первую цифру d1 четырехзначного числа разделим нацело четырехзначное число на 1000.
После изучения типа данных ”строки”, мы решим данную задачу другим способом.
По введенному с клавиатуры радиусу вычислить длину окружности и площадь круга. Формулы для расчетов: длина окружности L = 2πr, площадь круга S = πr2. Принять число π = 3.14.
Решение:
Все ранее рассматриваемые программы имели линейную структуру:
все инструкции выполнялись последовательно одна за одной, каждая записанная инструкция обязательно выполнялась.
Но могут быть случаи, когда допустим, мы хотим по данному числу x определить его абсолютную величину (модуль). Программа должна напечатать значение переменной x, если x>0, или же величину −x в противном случае.
Линейная структура программы в данном случае нарушается: в зависимости от справедливости условия x>0 должна быть выведена одна или другая величина. Соответствующий фрагмент программы на Python имеет вид:
В этой программе используется условная инструкция if (если). После слова if указывается проверяемое условие x > 0, завершающееся двоеточием. После этого идет блок (последовательность) инструкций, который будет выполнен, если условие истинно. В нашем примере это вывод на экран величины x. Затем идет слово else (иначе), также завершающееся двоеточием, и блок инструкций, который будет выполнен, если проверяемое условие неверно, то есть будет выведено значение -x.
Итак, условная инструкция в Python имеет следующий синтаксис:
if Условие:
Блок инструкций 1 else:
Блок инструкций 1 будет выполнен, если Условие истинно.
Если Условие ложно, будет выполнен Блок инструкций 2.
Для выделения блока инструкций, относящихся к инструкции if или else, в языке Python используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь равную величину отступа, то есть одинаковое число пробелов в начале строки.
Рекомендуется использовать отступ в 4 пробела и не рекомендуется использовать в качестве отступа символ табуляции.
Это одно из существенных отличий синтаксиса Python от синтаксиса большинства языков, в которых блоки выделяются специальными словами или фигурными скобками.
В условной инструкции может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением. Например, если дано число x, и мы хотим заменить его на абсолютную величину x, то это можно сделать следующим образом: if x < 0: x = -x print (x)
В этом примере переменной x будет присвоено значение -x, но только в том случае, когда x < 0 . А вот инструкция print(x) будет выполнена всегда, независимо от проверяемого условия.
Пример: Максимум из двух чисел
Рассмотрим следующую задачу. Нам даны два числа, необходимо найти наибольшее из них и напечатать его на экран.
Эта задача решается с помощью условной инструкции:
Также эту задачу можно решить с помощью неполного ветвления. В этом случае нам не нужно использовать дополнительную переменную:
Как правило, в качестве проверяемого условия используется результат вычисления одной из следующих операций сравнения (или величин логического типа).
Пусть переменная a = 10, а переменная b = 5, тогда операции
сравнения дают результат, приведенный в таблице.
Оператор |
Описание |
Пример |
Результат |
== |
проверяет одинаково ли значение операндов, если одинаковы – то условие является истиной |
a == b |
False |
!= |
проверяет одинаково ли значение операндов, если НЕ одинаковы – то условие является истиной |
a != b |
True |
> |
проверяет значение левого операнда, если он больше, чем правый – то условие является истиной |
a > b |
True |
< |
проверяет значение левого операнда, если он меньше, чем правый – то условие является истиной |
a < b |
False |
>= |
проверяет значение левого операнда, если он больше или равен правому – то условие является истиной |
a >= b |
True |
<= проверяет значение левого операнда, a <= b False если он меньше либо равен правому – то условие является истиной
Операции сравнения возвращают значения специального логического типа bool. Выражения логического типа могут принимать одно из двух значений: True (истина) или False (ложь).
Если преобразовать логическое True к типу int, то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False, а любое ненулевое число — в True . При преобразовании str в bool пустая строка преобразуется в False, а любая непустая строка — в True .
Иногда нужно проверить одновременно не одно, а несколько условий. В этом помогают логические операции. В Python существуют стандартные логические операции: логическое И, логическое ИЛИ, логическое отрицание.
• Логическое И (конъюнкция) является бинарной операцией (то есть операцией с двумя операндами: левым и правым) и имеет вид and. Операция and возвращает True тогда и только тогда, когда оба её операнда имеют значение True.
• Логическое ИЛИ (дизъюнкция) является бинарной операцией и возвращает True тогда и только тогда, когда хотя бы один операнд равен True. Операция “логическое ИЛИ” имеет вид or.
• Логическое НЕ (отрицание) является унарной (то есть с одним операндом) операцией и имеет вид not, за которым следует единственный операнд. Логическое НЕ возвращает True, если операнд равен False, и наоборот.
Примеры:
Проверим, что число m является корректным номером месяца (лежит в интервале от 1 до 12):
Также это можно проверить несколько иначе:
Проверим, что число m является номером зимнего месяца (декабрём, январём или февралём):
Проверим, что месяц с номером m не зимний:
Кроме того, операции сравнения в Python можно объединять в цепочки (в отличие от большинства других языков программирования, где для этого нужно использовать логические связки), например, x == 0 == y или
Будьте внимательны, чтобы не перепутать оператор присваивания = и оператор сравнения ==.
Одинарный знак (=) используется в инструкциях присваивания, чтобы сохранять (присваивать) значение переменной, а двойной знак равно (==) используется в выражениях сравнения, чтобы определить, равны ли два значения.
Их очень легко случайно перепутать.
Чтобы запомнить разницу, помните, что обозначение оператора
≪Равно≫(==), как и оператора ≪Не равно≫ (!=), состоит из двух символов.
Сколько разрезов нужно сделать, чтобы разрезать круглый торт на NN одинаковых по форме и размеру кусков?
Например, для N=6 необходимо сделать 3 разреза, а для N=5 — 5разрезов.
n=5 n=6
Входные данные. На вход подаётся натуральное число N (1<N≤1000).
Решение:
Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, то выведите "YES", иначе выведите "NO". Напомним, что в соответствии с григорианским календарем, год является високосным, если его номер делится на 4, но при этом не делится на 100, или если он кратен 400.
Входные данные: Вводится одно натуральное число.
Выходные данные: Выведите ответ на задачу.
Решение:
4.7.3 Какое число больше?
Даны два целых числа. Программа должна вывести 1, если первое число больше второго, 2, если второе больше первого, или число 0, если они равны.
Входные данные: Вводятся два целых числа, не превышающие 2109 по абсолютному значению.
Выходные данные: Выведите ответ на задачу.
Решение:
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. По введенным координатам двух полей (k,l) и (m,n) выясните, являются ли эти поля полями одного цвета?
Входные данные: На вход программе подаются четыре целых числа k,l,m,n.
Выходные данные: Выведите YES или NO в зависимости от ответа на вопрос задачи.
Решение:
Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой клетки на вторую одним ходом.
Входные данные: Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.
Выходные данные: Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую, или NO в противном случае.
Решение:
Используя цикл for, можно повторить несколько раз в программе выполнение инструкций для различных значений.
Цикл for, также называемый в языке Python циклом с параметром. В цикле for указывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком.
Пример:
В этом примере в качестве множества значений используется список цветов. Переменная color последовательно принимает значения 'red', 'green', 'blue'.
Пример:
Выведем на экран квадраты первых пяти простых чисел.
Как правило, при использовании цикла for необходимо, чтобы переменная принимала значения от некоторого начального значения до некоторого конечного. Чтобы реализовать это, удобно использовать функцию range().
Пример:
Чтобы вывести на экран числа от 0 до n−1, можно использовать цикл for вместе с функцией range():
В качестве n может использоваться числовая константа или переменная. Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.
Если требуется задать цикл от некоторого числа a до некоторого числа b, то можно использовать функцию range() с двумя параметрами:
Индексная переменная i будет принимать значения от a до b−1, то есть первый параметр функции range(), вызываемой с двумя параметрами, задаёт начальное значение индексной переменной, а второй параметр — значение, которое индексная переменная принимать не будет. Если же b≤a, то цикл не будет выполнен ни разу.
Пример:
Чтобы просуммировать значения чисел от a до b можно воспользоваться следующей программой:
В этом примере переменная i принимает значения от a до b−1, и значение переменной s последовательно увеличивается на указанные значения.
Чтобы организовать цикл, в котором индексная переменная будет уменьшаться, необходимо использовать функцию range с тремя параметрами.
Первый параметр задает начальное значение индексной переменной, второй параметр — значение, до которого будет изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной.
Пример:
Сделать цикл по всем числам от 100 до 1 можно при помощи следующей команды: range(100, 0, -1).
Рассмотрим варианты применения цикла for на примерах задач.
Задача. Числа, не делящиеся на три
Выведите все числа от 1 до 9, которые не делятся на 3.
Даны два целых числа A и B (при этом A≤B). Выведите все числа от A до B включительно.
Входные данные: Вводятся два целых числа, не превосходящие 200 по абсолютному значению.
Выходные данные: Выведите ответ на задачу.
Даны два целых числа A и B. Выведите все числа от A до B включительно в порядке возрастания, если A<B, или в порядке убывания в противном случае.
Входные данные: Вводятся два целых числа, не превосходящих 200 по абсолютному значению.
Выходные данные: Выведите ответ на задачу.
Дано 10-значное число. Выведите все цифры этого числа в обратном порядке по одной.
Входные данные: На вход подаётся натуральное 10-значное число.
Выходные данные: Выведите ответ на задачу. В качестве разделителя между цифрами можно использовать переводы строки и пробелы.
По данным двум натуральным числам A и B (A≤B) выведите все чётные числа на отрезке от A до B.
Входные данные: Вводятся два натуральных числа A и B.
Выходные данные: Выведите ответ на задачу.
По данным двум натуральным числам A и B (A≤B) выведите все нечётные числа на отрезке от A до B.
Входные данные: Вводятся два натуральных числа A и B.
Выходные данные: Выведите ответ на задачу.
Цикл while ("пока") — это так называемый цикл с условием или с предусловием. В цикле for мы явно указываем, какие значения будет принимать переменная i, например, 1 <= i <= 10. В цикле while можно задавать более сложные условия, кроме того можно использовать логические операции "И", "ИЛИ" и т.д.
Цикл while позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while в простейшем случае выглядит так:
while условие:
При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается, и управление передаётся на следующую инструкцию после тела цикла while .
Если условие истинно, то выполняются все инструкции из блока, после чего условие проверяется снова, и снова выполняется блок инструкций. Так продолжается до тех пор, пока условие будет истинно. Как только условие становится ложным, работа цикла завершается, и управление передаётся следующей инструкции после цикла.
While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.
Трискаидекафобия - болезненная боязнь числа
13. Этот страх считается суеверием, исторически связанным с религиозными предрассудками.
Дано число N. Выведите все целые числа по возрастанию, начиная с числа N, пока не встретится число, кратное 13. Его выводить не нужно.
Входные данные: Дано натуральное число N, не превосходящее 1000.
Выходные данные: Выведите ответ на задачу.
Примечание: Программа должна быть решена при помощи одного цикла while, без if внутри цикла.
Числа Фибоначчи — это ряд, состоящий из целых чисел. Их особенность заключается в том, что каждый элемент представляет собой сумму двух предыдущих чисел.
Последовательность Фибоначчи начинается с 0 и 1. Продолжить ряд легко: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 и так до бесконечности.
Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число n. Если A не является числом Фибоначчи, выведите число −1.
Входные данные: Вводится натуральное число A, не превышающее 10000.
Выходные данные: Выведите ответ на задачу.
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Входные данные: Вводится натуральное число, не превосходящее 200.
Выходные данные: Выведите ответ на задачу.
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается.
Определите, через сколько лет вклад составит не менее y рублей.
Проце нт («на сотню; сотая») — сотая часть; обозначается знаком «%»; используется для обозначения доли чего-либо по отношению к целому.
Например, 17 % от 500 кг означает 17 частей по 5 кг каждая, то есть 85 кг. Справедливо также утверждение, что 200 % от 500 кг является 1000 кг, поскольку 1 % от 500 кг равен 5 кг, и 5 × 200 = 1000.
Входные данные: Программа получает на вход три натуральных числа: x, p, y (x≤2000, p≤100, y≤2000).
Выходные данные: Программа должна вывести одно целое число — ответ на задачу.
По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
Входные данные: Вводится натуральное число, не превосходящее 100.
Выходные данные: Выведите ответ на задачу.
Строки в языке Python являются объектами типа str. Переменной можно присвоить значение, являющееся строкой, с помощью двойных или одинарных кавычек:
A = "Hello" Z = 'Hello'
Строка считывается со стандартного ввода функцией input():
Напомним, что для строк определены операции сложения
(конкатенация) и умножения строки на число.
Узнать количество символов (длину строки) можно при помощи функции len():
Для получения одного символа строки используется обращение по индексу. Индексом называется номер символа в строке.
Например, Z[i] — это символ строки, который имеет индекс i, при этом нумерация начинается с числа 0.
Тогда, если Z = 'Hello',
то Z[0] == 'H', Z[1] == 'e', Z[2] == 'l', Z[3] == 'l', Z[4] == 'o'.
Если мы хотим обратиться к последнему элементу некоторой строки, то нужно сначала узнать ее длину, после чего вычесть из полученного значения 1.
Мы уже знаем, что для нахождения длины используется функция len(Z). Таким образом, последний элемент строки будет возвращаться функцией Z[len(Z) - 1]. Однако данная конструкция достаточно громоздка, вместо неё можно использовать отрицательные значения индексов.
Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с -1. То есть Z = 'Hello', то Z[-1] == 'o', Z[2] == 'l', Z[-3] == 'l', Z[-4] == 'e', Z[-5] == 'H'.
Проиллюстрируем индексы строки с помощью таблицы:
Строка Z |
H |
e |
l |
l |
o |
|
Индекс |
S[0] |
S[1] |
S[2] |
S[3] |
S[4] |
|
Индекс |
S[-5] |
S[-4] |
S[-3] |
S[-2] |
S[-1] |
|
|
|
|
|
|
|
|
Если же номер символа строки Z больше либо равен len(Z), или меньше чем -len(Z), то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range.
Задача. Количество букв 'a' в строке
Дана строка, необходимо посчитать количество букв 'a' в ней.
Срез — извлечение из данной строки некоторого фрагмента подстроки или подпоследовательности символов.
Срез можно создать таким образом: S[a : b]. Такой срез возвращает подстроку из b - a символов, начиная с символа c индексом a до символа с индексом b, не включая его. В этом случае a должно быть меньше b, иначе срез вернёт пустую строку.
Будем рассматривать в качестве примера строку S = 'metodichka'. Для нее срез S[2 : 7] == 'todic'.
Можно использовать как положительные, так и отрицательные индексы в одном срезе. Например, S[1 : -1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчивается индексом -1, не включая его).
Для рассмотренной выше строки срез S[1 : -1] == 'etodichk', а срез S[6 : -2] == 'dich'.
При использовании срезов ошибка IndexError никогда не возникает.
Например, срез S[1 : 100000] вернёт строку 'etodichka'.
Можно не указывать второй параметр (но поставить двоеточие), тогда срез берётся до конца строки.
Например, чтобы удалить из строки первый символ, можно взять срез S[1:].
Аналогично можно опустить первый параметр, тогда срез S[:5] берётся от начала строки до указанного параметра 5, не включая его.
Срез S[:] совпадает с самой строкой S.
Пусть нам необходимо взять срез, в котором символы будут идти не подряд, а с некоторым шагом d. Тогда срез будет иметь три параметра: S[a :
b : d]. Третий параметр задаёт шаг, как и в случае с функцией range().
Так, для рассмотренной выше строки S[2 : 9 : 2] вернёт строку 'tdck'.
Кроме того, параметры можно опускать. Например, срез S[ :
: 2] вернёт символы с чётными индексами, а срез S[1 : : 2] — с нечётными.
Mожно взять значение шага среза, равным отрицательному числу, тогда символы будут идти в обратном порядке.
Например, срез S[9 : 4 : -1] == 'akhci', а S[ : : -1] == 'akhcidotem'.
Итак, оператор извлечения среза: [X:Y]. X – начало среза, а Y – окончание; символ с номером Y в срез не входит. По умолчанию первый индекс равен 0, а второй — длине строки.
Методы— это функци, применяемые к объекту, например, к строке или числу.
Метод вызывается в виде ИмяОбъекта.ИмяМетода(параметры).
Рассмотрим методы find и rfind для работы со строками.
Метод find находит в данной строке подстроку, которая передаётся в качестве параметра. Функция возвращает индекс первого (cамого левого) вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. С помощью этого метода можно проверять содержится ли подстрока в строке.
Например:
Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).
Метод подсчитывает количество вхождений одной строки в другую строку. Простейшая форма вызова S.count(T) возвращает число вхождений строки T внутри строки S. При этом подсчитываются только непересекающиеся вхождения, например:
Метод replace заменяет все вхождения одной строки на другую и возвращает полученную. При этом исходная строка не изменяется. Формат: S.replace(old, new) — заменить в строке S все вхождения подстроки old на подстроку new.
Пример:
C помощью метода replace можно изменить саму строку и удалить в ней все символы, равные некоторому, следующим образом:
Cписки (в большинстве языков программирования используется другой термин – "массив") — это такая структура данных, которая позволяет хранить в себе несколько однотипных значений, таких как числа или строки. Например, если мы хотим проверить число на простоту, а потом построить его разложение на простые множители, нам удобно создать список простых чисел. Тогда мы сможем проверять делимость числа на все ранее построенные элементы списка.
Список в Python представляет собой последовательность элементов, пронумерованных от 0, как символы в строке. Тогда список, состоящий из n элементов, будет заканчиваться элементом с индексом n−1.
Пример:
Список можно задать перечислением элементов списка в квадратных скобках, например, список из первых 66 простых чисел можно задать так:
В списке p— 6 элементов, а
именно, p[0] == 2, p[1] == 3, p[2] == 5, p[3] == 7, p[4] == 11, p[5] == 13.
Также как и символы строки, элементы списка в Python можно индексировать отрицательными числами с конца, например, p[-1] == 13.
Длину списка, то есть количество элементов в нём, можно узнать при помощи функции len(), например, len(p) == 6.
Если мы попробуем обраться к элементу списка по некорректному индексу, например, обратимся к элементу p[6], то произойдёт ошибка IndexError: list index out of range.
Пример:
Пусть теперь мы хотим перебрать все элементы списка, при этом выводя их на экран, а потом возводя в квадрат. Организуем цикл следующим образом:
Таким образом, при использовании списков можно присваивать элементам новые значения, в отличие от работы со строками.
Пример:
Пусть нам необходимо хранить базу данных учащихся школы, содержащую данные об учащихся и их оценках для ведения электронного дневника.
Введем списки для хранения имен учащихся names и для хранения их оценок scores, причём элементы с одинаковыми индексами будут соответствовать один и тем же ученикам.
Выведем данные, пронумеровав записи, с помощью следующей программы:
Для списков целиком определены следующие операции: конкатенация списков (добавление одного списка в конец другого) и повторение списков (умножение списка на число). Например:
В результате приведенных выше операций список c будет равен [1, 2, 3, 4, 5], а список d будет состоять из 15 элементов, из элементов 1, 2, 3, повторенных 5 раз.
Операция повторения списка позволяет конструировать большие списки. Например, списки с 1000 элементов, заполненных нулями.
Рассмотрим другой способ создания списков — при помощи метода append, позволяющего помещать элементы в конец списка. Прежде всего можно создать пустой список (не содержащий элементов, имеющий длину 0), в конец списка можно последовательно добавлять элементы.
Элементы списка, разделённые пробелами, могут при вводе находиться в одной строке. В этом случае строку можно считать функцией input(). После этого можно использовать метод строки split, возвращающий список строк, разрезав исходную строку на части по пробелам.
Пример:
Если при запуске этой программы ввести строку '2 3 4 5 6 7 8 9', то список a будет равен ['2', '3', '4', '5', '6,''7', '8', '9']. Обратите внимание, что список будет состоять из строк, а не из чисел!
Если необходимо получить список из чисел, то можно элементы списка по одному преобразовать в числа:
for i in range(len(a)):
В листинге вывода можно понаблюдать работу цикла при последовательном преобразовании элементов из вводимых чисел в список.
В результате получим список, состоящий из чисел: [1,2, 3, 4,5,6, 7,8,9].
Используя функции языка map() и list() то же самое можно сделать в одну строку:
Здесь манипулятор map() применяет функцию int() сразу ко всем элементам, полученным после разделения строки, и организует из них список list. Если нужно считать список действительных чисел, то в данной записи необходимо заменить int() на float().
Научимся выводить элементы списка в одной строке через пробел при помощи однострочной команды. Для этого используется метод join.
У этого метода один параметр — список строк. В результате получается строка, которая является соединением элементов списка (которые были переданы в качестве параметра).
При этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод.
Например:
Следующая программа выведет считанные слова в столбец по одному в каждой строке. Здесь символ \n обзначает переход на новую строчку:
Если же список состоит из чисел, то придется использовать функцию map(). То есть вывести элементы списка чисел, разделяя их пробелами, можно, предварительно преобразовав их в строки следующим образом:
Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например:
Для создания списков, заполненных по более сложным формулам, можно использовать генераторы — выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий:
[выражение for переменная in список]
Здесь переменная — идентификатор некоторой переменной, список — список значений, который принимает данная переменная (как правило, полученный при помощи функции range()), выражение — некоторое выражение, которым будут заполнены элементы списка, как правило, зависящее от использованной в генераторе переменной.
Вот несколько примеров использования генераторов.
Создать список, состоящий из n нулей можно и при помощи генератора:
Создать список, заполненный квадратами целых чисел, можно так: a = [i ** 2 for i in range(n)]
Если нужно заполнить список квадратами чисел от 1 до n, то можно выражение следующим образом:
Другим способом может быть изменение параметров функции range():
Таким образом можно генерировать достаточно сложные выражения и заполнять элементы списка по определенным правилам.
Иногда возникает необходимость использования случайных чисел. Для этого можно использовать, например, функцию randint из модуля random. В начале вашей программы следует подключить этот модуль с помощью команды:
Пример:
Смоделируем n бросков кубика, то есть сгенерируем список, заполненный случайными числами от 1 до 6 включительно:
Рассмотрим еще одно применение списочных выражений — считывание данных.
Пусть список состоит из строк, которые состоят из чисел. Сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range(), потом — заданное количество строк.
Программа для их считывания будет выглядеть следующим образом:
Если список чисел дан в одной строке через пробел, то можно использовать следующую конструкцию: a = list(map(int, input().split())).
Используя генераторы, можно сделать то же самое с использованием следующей конструкции:
В данном случае индексная переменная elem принимает значения,
равные элементам входной строки, разбитой пробелами. После преобразования этих элементов функцией int получим список из целых чисел.
Для списков, как и для строк, имеется операция взятия среза. А именно:
a[i : j] — срез из j−ij−i элементов: a[i], a[i + 1],..., a[j - 1].
+ 1] (то есть меняется порядок элементов).
a[i : j : k] — срез с шагом k: a[i], a[i + k], a[i + 2 * k],....
Любое из чисел i или j может отсутствовать, что означает “начало списка” или “конец списка”.
Списки, в отличие от строк, являются изменяемыми объектами:
можно отдельному элементу списка присвоить новое значение. Можно поменять и целиком срез. Рассмотрим примеры:
Если срезу с шагом k, отличным от 1, присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдёт ошибка ValueError.
Обратите внимание, что операция обращения к элементу по индексу отличается от взятия среза.
a[i] — это элемент списка, а не срез!
Можно получить срез списка с помощью оператора (:):
Со списками можно легко делать много разных операций.
Рассмотрим основные из них:
min(A) |
Наименьший элемент списка. Элементы списка могут быть числами или строками, для строк сравнение элементов проводится в лексикографическом порядке. |
||
max(A) |
Наибольший элемент списка. |
||
sum(A) |
Сумма элементов списка. Элементы обязательно должны быть числами. |
||
x in A |
Проверить, содержится ли элемент в списке. Возвращает True или False . |
|
|
x not in A |
То же самое, что not(x in A). |
|
|
A.index(x) |
Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError. |
|
|
A.count(x) |
Количество вхождений элемента x в список. |
|
|
A.append(x) |
Добавить в конец списка A элемент x. |
|
|
A.insert(i, x) |
Вставить в список A элемент x на позицию с индексом i. Элементы списка A, которые до вставки имели индексы i и больше, сдвигаются вправо. |
|
|
A.extend(B) |
Добавить в конец списка A содержимое списка B. |
|
|
A.pop() |
Удалить из списка последний элемент, возвращается значение удалённого элемента. |
|
|
A.pop(i) |
Удалить из списка элемент с индексом i, возвращается значение удаленного элемента. Все элементы, стоящие правее удаленного, сдвигаются влево. |
|
|
A.remove(x) |
Удаляет первое вхождение элемента x. Если элемента x нет в списке, то получаем ошибку во время выполнения. |
|
|
|
|
||
Рассмотрим на примерах некоторые из приведенных операций.
Поскольку списки изменяемые, менять элементы можно с помощью оператора среза:
Метод insert можно использовать, чтобы вставить элемент в список:
Метод append можно использовать для добавления элемента в список:
Можно добавить в список и больше одного элемента таким способом:
Для сортировки списка нужно использовать метод sort.
Можно развернуть порядок элементов в списке с помощью метода reverse:
Метод index можно использовать для получения индекса элемента:
Удалить элемент можно, написав его индекс в методе pop:
Если не указывать индекс, то функция удалит последний элемент.
Элемент можно удалить с помощью метода remove.
Оператор del также можно использовать для тех же целей:
Можно удалить несколько элементов с помощью оператора среза:
В Python есть некоторые агрегатные функции:
Для этого используется оператор (==):
Математические операции на списках:
Для объединения списков можно использовать оператор (+):
Список можно повторить с помощью оператора умножения:
Вам дано число N и число X. Выведите число X ровно N раз в формате [X, X, X,... ,X]. Используйте функцию print() для вывода списка.
Входные данные: В двух строках входных данных заданы натуральные числа N(N≤1000) и X(X≤109).
Выходные данные: Выведите ответ на задачу.
Дано число N. Выведите N квадратов чисел от 1 до N (включительно) в формате [1, 4, 9, 16,…, N**2]. Используйте функцию print() для вывода списка.
Входные данные: В одной строчке дано натуральное число N≤200.
Выходные данные: Список квадратов в указанном формате.
Выведите все чётные элементы списка.
Входные данные: Вводится список чисел. Все числа списка находятся на одной строке и не превосходят по модулю 1000. Выходные данные: Выведите ответ на задачу.
Выведите все элементы списка с чётными индексами (то есть A[0],A[2],A[4],...).
Программа должна быть эффективной и не выполнять лишних действий!
Входные данные: Вводится список чисел. Все числа списка находятся на одной строке и не превосходят по модулю 1000. Выходные данные: Выведите ответ на задачу.
Дан список чисел. Определите, сколько в этом списке элементов, которые больше двух своих соседей, и выведите количество таких элементов.
Входные данные: Вводится список целых чисел. Все числа списка вводятся на одной строке, разделённые пробелом. Выходные данные: Выведите ответ на задачу.
Часто в задачах приходится хранить прямоугольные таблицы с данными. Такие таблицы называются матрицами или двумерными массивами. В языке программирования Python таблицу можно представить в виде списка, каждый элемент которого тоже является списком, например, списком чисел.
Пример:
Если требуется создать числовую таблицу из двух строк и трёх столбцов, то это можно сделать следующим образом: a = [[2, 3, 4], [5, 6, 7]].
Здесь первый элемент списка a[0] является списком из чисел [2, 3, 4]. То есть a[0][0] равно 2, a[0][1] равно 3, a[0][2] равно 4. Таким образом, чтобы обратиться к элементу, расположенному в i-й строке и j-м столбце, то надо написать a[i][j]. Также можно использовать отрицательные индексы, например, элемент a[-1][-1] нашей таблицы — это элемент из последней строки и последнего столбца, и он равен числу 7.
Приведём программу, в которой создаётся числовая таблица из двух строк и трех столбцов, с которой производятся различные действия.
Здесь первая строка списка a[0] является списком из чисел [1, 2, 3]. То есть a[0][0] == 1, значение a[0][1] == 2, a[0][2] == 3, a[1][0] == 4, a[1][1] == 5, a[1][2] == 6.
Для обработки и вывода списка, как правило, используют два вложенных цикла. Первый цикл перебирает номер строки, второй цикл пробегает по элементам внутри строки.
Например, вывести двумерный числовой список на экран построчно, разделяя числа пробелами внутри одной строки, можно так:
Можно вывести двумерный массив, используя свойство цикла for:
Воспользуемся генератором: создадим список из n элементов, каждый из которых будет списком, состоящих из m нулей:
10.4 Ввод двумерного массива При помощи генератора:
Дано нечётное число n. Создайте двумерный массив из n×n элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа).
Затем заполните символами "" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. Для этого не нужно использовать вложенные циклы.
В результате символы "звёздочка" в массиве должны образовывать изображение снежинки. Выведите полученный массив на экран, разделяя элементы массива пробелами.
Входные данные: В одной строчке задано число n≤21.
Выходные данные: Ответ на задачу.
На шахматной доске стоит конь. Отметьте положение коня на доске и все клетки, которые он бьет. Клетку, где стоит конь, отметьте английской буквой “K”.
Клетки, которые он бьёт, отметьте символами "звёздочка". Остальные клетки заполните точками.
Входные данные: Программа получает на вход два числа — координаты коня на шахматной доске.
Каждая координата вводится на отдельной строке. Первое число обозначает номер строки, а второе — номер столбца.
Все числа принимают значения от 1 до 8.
Выходные данные: Выведите на экран изображение доски.
Дан двумерный массив и два числа: i и j. Поменяйте в массиве столбцы с номерами i и j.
Входные данные: Программа получает на вход в первой строке размеры массива n≤100 и m≤100, затем элементы массива, а в последней строке числа i и j.
Выходные данные: Выведите полученный массив.
10.5.4 Симметричен ли массив?
Дано число n и массив размером n×n. Проверьте, является ли этот массив симметричным относительно главной диагонали. Выведите слово “YES“, если массив симметричный, и слово “NO” в противном случае.
Входные данные: В первой строке дано значение n≤10. Далее идут n строк по n чисел — элементы матрицы.
Выходные данные: Ответ на задачу.
Дан двумерный массив размером n×n. Транспонируйте ( поменяйте местами строки и столбцы) его и результат запишите в этот же массив. Вспомогательный массив использовать нельзя.
Входные данные: На первой строке входных данных задано натуральное число n≤500. В следующих n строках задано по n натуральных чисел — элементы массива.
Выходные данные: Выведите ответ на задачу.
В большинстве языков программирования, в том числе и в Python, реализовано достаточное количество стандартных функций, например функции abs(x) и sqrt(x).
Кроме встроенных и библиотечных функций есть возможность писать собственные функции. Это даёт возможность сократить объём программы, за счет того, что повторяющиеся фрагменты программы, теперь описаны в функции один раз. Это делает программу более понятной. Сначала рассмотрим пример использования стандартных функций:
В этом примере используются четыре функции: input, int, abs и print.
Функции могут принимать какие-то значения в качестве параметров, но могут и не принимать никаких параметров. Например, функция input не получает входных значений.
Также функции могут возвращать какие-то значения, но могут ничего не возвращать. Например, функция print ничего не возвращает.
Описание функции в Python может располагаться в любом месте программы, но до первого её использования.
После описания функции её можно использовать в выражениях как стандартную функцию.
При описании функции указывается служебное слово def, затем после пробела имя функции, после чего в круглых скобках через запятую перечисляются её параметры.
Если функция не принимает входных параметров, то в круглых скобках ничего не пишут. После круглых скобок ставится двоеточие, и затем на следующей строке с отступом задаётся тело функции так, как это делается при написании циклов.
Если функция должна вернуть какое-то значение, то для этого используется служебное слово return.
Инструкция return завершает работу функции и возвращает значение соответствующей переменной (выражения).
Инструкция return может встречаться в произвольном месте
функции, её исполнение завершает работу функции и возвращает указанное значение в место вызова.
Если функция не возвращает значения, то инструкция return используется без возвращаемого значения или инструкция return может отсутствовать.
Например, функция нахождения максимума из двух чисел будет выглядеть следующим образом:
После того как мы написали такую функцию, мы можем ее использовать, например, вот так:
В результате как видно будет напечатано число 8.
Мы можем использовать уже написанные функции для реализации других функций. Например, мы можем реализовать функцию max3, находящую максимум трёх чисел, следующим образом:
Анализируя листинг видим, что функция max3 дважды вызывает функцию max для двух чисел: сначала чтобы найти максимум из a и b, потом чтобы найти максимум из этой величины и c.
В описании функции задаётся список формальных параметров. Каждый параметр, описанный в этом списке, является локальным по отношению к описываемой функции, то есть на него можно ссылаться по его имени только из данной функции, но не из основной программы или другой функции. Свое начальное значение он получает из соответствующего фактического параметра при вызове функции.
Изменения, которые претерпевает формальный параметр, не влияют на значение фактического параметра.
Соответствующее фактическое значение параметра должно иметь тип, совместимый с типом формального параметра. В общем случае можно сказать, что областью действия переменной является блок, в котором она описана.
Функция в python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def.
Функция может быть любой сложности и возвращать любые объекты.
Внутри функции можно использовать переменные, объявленные вне этой функции.
Здесь переменной a присваивается значение 153, и функция f() печатает это значение, несмотря на то, что до объявления функции f() эта переменная не инициализируется. В момент вызова функции f() переменной a уже присвоено значение, поэтому функция f() может вывести его на экран.
Такие переменные (объявленные вне функции, но доступные внутри функции) называются глобальными.
Если инициализировать какую-то переменную внутри функции, использовать эту переменную вне функции не удастся.
Получили ошибку. Такие переменные, объявленные внутри функции, называются локальными. Эти переменные становятся недоступными после выхода из функции.
Функция может вызывать другую функцию. Но функция также может вызывать и саму себя.
Подобный прием (вызов функцией самой себя) называется рекурсией, а сама функция называется рекурсивной.
Вам даны четыре отрезка. Выведите «Составить треугольник из данных отрезков можно», если среди них найдутся три, из которых можно составить треугольник, и «Составить треугольник нельзя», если треугольник составить нельзя.
Для решения напишите функцию triangle(a, b, c), которая будет возвращать True, если из трёх заданных отрезков можно составить треугольник, и False ели треугольник составить нельзя.
Маленький ребенок делает новогоднюю открытку. Для этого ему надо нарисовать ёлочку. Ему сложно самому справиться с этой задачей, помогите ему в этом.
Елочка состоит из n уровней. Первый (верхний) уровень состоит из двух строк, второй — из трех, ..., n-й — из n+1 строк. Все строки заполнены одинаковым символом , при этом длины строк составляют 1, 2,...,i на уровне i.
Например, 2-ой уровень ёлочки выглядит так:
*
**
***
Необходимо по введённому натуральному числу n нарисовать ёлочку из n уровней.
Решение оформить в виде функции для рисования ёлочки tree(n), которая будет вызывать функцию makeLevel(i) для рисования каждого уровня ёлочки при различных значениях i.
У Пети есть X грамм краски, а у Васи — Y грамм краски. Одного грамма краски хватает, чтобы покрасить плитку 1×1. Петя выберет максимальную плитку, на которую у него хватит краски. Вася поступит аналогично. Таня работает в плановом отделе, и в её интересах сделать так, чтобы суммарно было потрачено как можно больше краски.
Поэтому Таня интересуется: а что если Петя отдаст всю свою краску Васе? Получится ли тогда потратить больше краски или нет?
Входные данные: В двух строках входного файла содержатся натуральные числа x и y — количество краски у Пети и Васи соответственно.
Выходные данные: Если выгоднее будет отдать всю краску Васе, то выведите на экран " Петя дает Васе краску".
Если выгоднее оставить краску у Пети, то выведите на экран "Петя оставляет краски себе".
Если расход краски в обоих случаях одинаков, то выведите "Равный".
Написать функцию factorial(), которая принимает один параметр — число, и возвращает значение — факториал этого числа.
Напишите функцию, которая вычисляет среднее арифметическое двух переданных ей числовых аргументов.
Опыт программирования на языке Python, полученный на решении конкретных задач, позволяет подойти к решению и выполнению упражнений как в рамках школьной тематики, так и при желании оттачивать навыки работы с другими языками программирования.
Разработанное методическое пособие позволяет полностью обеспечить занятия по программе «Введение в программирование на языке Python» в объеме 144 часов в очном режиме проведения занятий и удаленном режиме работы с учащимися МБОУ ДО СЮТ г. Ейска.
Подбор задач различной сложности позволяет вести изучение дисциплины с различными учащимися по возрасту. Все приведенные задачи позволяют ребятам самостоятельно проанализировать ход написания кода и применить полученные знания и опыт для решения подобных, что является важным при первичном знакомстве с программированием. Это самый очевидный путь — использование одного из шаблонов при написании кода других программ.
В рассмотренном пособии синтаксис языка изучен и показан на примерах, что в случае с Python оправданным, так как эта часть языка считается достаточно простой.
Были рассмотрены структура программы на языке Python, основные операторы языка, ввод и вывод данных, выражения и многие из встроенных типов данных, кратко объяснены принципы работы Python с именами, приведены примеры программирования на Python, показана работа со списками и строками, рассмотрены двумерные массивы и функции.
Рейтинг Python в последнее время значительно вырос, он стал чуть ли не самым популярным языком программирования.
В рамках курса мы научились решать сравнительно простые задачи, но стали понимать, что данные простые задачи, могут всегда быть совокупностью достаточно сложных практических задач.
Учебное пособие познакомило с основами языка Python и если в процессе более глубокого изучения языка в дальнейшем возникнут вопросы, следует использовать поиск ответов на многочисленных тематических форумах, одним из которых является, например - форум http://python.su/forum/.
Кроме того, в настоящий момент имеется большой список русскоязычных ресурсов Интернет, посвященных Python, для этого необходимо воспользоваться поисковыми системами сети.
Литература:
1. Джозеф Л.Д Изучение робототехники с использованием Python / пер. с анг. А. В. Корягина. – М.: ДМК Пресс, 2019. – 250 с.: ил.
2. Елисеев Д. Рассказы о математике с примерами на языках Python и C. -
Версия текста 1.0. (с) – СПб-2017, 55 с.
3. СысоеваМ.В., СысоевИ.В. Программирование для .нормальных. с нуля на языке Python: Учебник. В двух частях. Часть 1 / Ответственный редактор:
В.Л.Черный : _ М.: Базальт СПО; МАКС Пресс, 2018. 176 с. [+4 с. вкл]: ил.
(Библиотека ALT).
4. Эл Свейгарт. Учим Python, делая крутые игры. Э. Свейгарт. 416 с.
Издательство: Бомбора, 2018 г.
5. Федоров, Д. Ю. Программирование на языке высокого уровня Python : учеб. пособие для прикладного бакалавриата / Д. Ю. Федоров. — 2-е изд., перераб. и доп. — М. : Издательство Юрайт, 2019. — 161 с. — (Серия :
Бакалавр. Прикладной курс).
6. Основы программирования на языке Python : учебное пособие / С. К. Буйначев, Н. Ю. Боклаг. – Екатеринбург : Изд-во Урал. ун-та, 2014. – 9
1, с.
7. «Лэтпай» — интерактивный онлайн-курс по программированию на языке
Python для начинающих. - Pежим доступа: [Электронный ресурс] // https://younglinux.info/python/task (дата обращения 15.12.2020)
8. Питошка. Научно-развлекательный портал - Pежим доступа:
[Электронный ресурс] // https://younglinux.info/python/task (дата обращения 15.12.2020)
9. Сборник задач на Python. Сборник подготовила: Светлана Шапошникова.- Pежим доступа: [Электронный ресурс] // https://younglinux.info/python/task (дата обращения 15.12.2020) Версия: июнь
2020 года
10. Обучение Python - бесплатные уроки по программированию на Python. / Pежим доступа: [Электронный ресурс] // https://pythonru.com/uroki (дата обращения 10.12.2020)
11. Сто задач на Python с решениями. Сборник подготовила: Светлана
Шапошникова (plustilino), Версия: июнь 2020 года/ Pежим доступа:
[Электронный ресурс] // https://younglinux.info/python/task (дата обращения 12.12.2020)
12. Язык программирования Python: практикум : учеб, пособие / Р.А. Жуков. — М.: ИНФРА- 2019. — 216с. + Доп. материалы/ Pежим доступа: [Электронный ресурс] // www.dx.doi.org/10.12737/textbook (дата обращения
10.12.2020)
© ООО «Знанио»
С вами с 2009 года.