# Введение в Python ## Переменные #### Переменные это коробка куда можно засунуть все, что вам нужно. ``` a = 1 # Целое число b = 1.4 # Число с плавающей точкой c = 'Даров' # Строка d = true # Булевы переменные true или false ``` #### Над переменными можно проводить различные арифметические операции ``` a, b = 5, 2 # a = 5, b = 2 быстрая запись c = a + b # c = 7 c = a - b c = a * b c = a / b c = a % b # Остаток от деления, c = 1 c = a // b # Целочисленное деление, c = 2 (2 * 2 = 4 < 5) c = a ** b # Возведение в степень, c = a * a ``` #### Сокращенная запись ``` a += b # a = a + b a *= b # a = a * b a-=-1 # Загадка (прошу ставьте нормально пробелы) ``` ## Ввод-вывод > Программа должна взаимодействовать с пользователем. Считывать данные, выводить их пользователю ``` age = input() name = input('Введите ваш возраст: ') print('Привет ' + name + '! Тебе ' + age + 'лет!(или годов)') ``` ***Задачки*** 1. Дано два числа a и b. Посчитать гипотенузу треугольника с катетами a и b ``` Input: 3 4 Output: 5 ``` 2. Спросить у пользователя его имя, возраст, город. Красиво вывести всю эту информацию ``` Пример: Введите ваше имя: ____ Введите ваш возраст: ____ Введите ваш город: ____ Ах, вы из города ____. Не знал, что люди с таким именем, как ____ живут ____ лет ``` 3. На вход подается **трех** значйное число. Найти сумму его цифр ``` Input: 149 Output: 14 ``` 4. На вход подается целое число. Вывести следующее четное число ``` Input: Input: 7 8 Output: Output: 8 10 ``` 5. Дан Python-код. Необходимо поменять значения переменных `a` и `b` ``` a = 10 b = 5 ``` ## Массив > Когда нам нужно работать с большим количеством переменных одного типа сложно постоянно придумывать им имена. ``` a = [] # Создание пустого масива а = [] a.append(1) a.append(10) # Добавление элемента в конец массива а = [1, 10] print(a[0]) # Получение доступа к элементу в массиве. Выведет '1' b = a.pop(0) # Удалить из массивы первый элемент и вернуть его значение # a = [10] b = 1 a = [5, 3, 4, 2] a.sort() # Отсортировать массив a = [2, 3, 4, 5] b = len(a) # Получить размер массива b = 4 ``` ***Задачки*** 1. На вход подается 5 чисел. Добавить их в массив и посчитать их сумму ``` Input: 1 5 4 5 2 Output: 17 ``` ## Условия > Условия превращают калькулятор в компуктер. #### Если человеку больше 14 лет, то у него есть паспорт ``` age = 15 # Возраст человека if age > 14: print('У него есть паспорт') else: print('Он еще мелкий') ``` #### Бедный картавый человек. Если слово больше 5 букав, то картавый человек не может его нормально произнести. Если слово больше 10 букав, то и обычному человеку будет трудно его произнести ``` isKartaviy = true word = 'Рыбешка' if isKartaviy and len(word) > 5: print('Р-р-р-ыбешка') elif not isKartaviy and len(word) > 10: print('Да мам, это н-н-н-итроглицерины, невозможно прочитать') else: print('Рыбешка') ``` *Задачки* **Требуется определить, бьет ли ладья, стоящая на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке.** ``` Input: Input: 1 1 1 1 2 2 2 1 Output: Output: NO YES ``` **Максимум из трех** ``` Input: Output: 1 3 2 3 ``` ## Циклы > Компуктер, пожалуйста, посчитай мне эту штуку миллиард раз #### Посчитать сумму от 1 до 99 ``` a = 0 for i in range(1, 100): a += i print(a) ``` #### Написать сообщение для всех своих друзей ``` friends = ['Regina', 'Karina', 'Vaska Frolov', 'Salo Watt'] for friend in friends: print('Hi ' + friend + '! I invite you to InnoCtf 2019!') ``` #### *Задачки* **Вводятся целые числа a и b. Гарантируется, что a не превосходит b. Выведите все числа на отрезке от a до b, являющиеся полными квадратами. Если таких чисел нет, то ничего выводить не нужно.** ``` Input: Output: 2 4 8 ``` **Подсчитайте количество натуральных делителей числа x (включая 1 и само число)** ``` Input: Output: 32 6 ``` ## Функция > "Удобный" способ скомпоновать код> ``` # Функция получает на вход имя и пишет дарова def hello(name): print('Hello ' + name + '!') hello('Artem') # Выведет 'Hello Artem! ``` > Мы можем задать стандартные значения параметрам функций. Таким образом можно иногда опускать эти параметры. ``` def registration(login, password='qwerty'): print(f'User with login: {login} and password: {password} registered') registration('User') # Выведет 'User with login: # User and password: qwerty registered' regestration('New User', 'goodpassword_*()') # Выведет 'User with login: # New User and password: # goodpassword_*() registered ``` > Функция может возвращать значение (или несколько) ``` def multiply(arr): a = 1 for el in arr: a *= el return a result = multiply([1,2,3,4,5]) # Вернет произведение всех чисел в массиве ``` #### Посчитать факториал числа ``` def factorial(n): if n < 0: print('Error') if n == 1 or n == 0: return 1 else: return n * factorial(n - 1) a = factorial(3) # 3! = 6 ``` *Задачки* **Напишите функцию, проверяющая число на простоту. Необходимо вывести строку prime, если число простое, или composite, если число составное.** ``` Input: Output: 5 prime ``` **Последовательность Фибоначчи определена следующим образом: φ0=1, φ1=1, φn=φn-1+φn-2 при n>1. Начало ряда Фибоначчи выглядит следующим образом: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Напишите функцию, которая по данному натуральному n возвращает φn.** ``` Input: Output: 3 3 ``` ## Классы > Функции - чтобы сгруппировать код. Классы - чтобы сгруппировать переменные и функции ``` class Human: age = None gender = None name = None def __init__(self, age, gender, name): self.age = age self.gender = gender self.name = name def say_your_name(self): print(f'Hi, my name is {self.name}!') human = Human(47, 'Трансформер', 'SalloWatt') human.say_your_name() # ``` ## Подключение библиотек > Библиотека - это набор готовых функций и классов, готорые для нас написали другие программисты #### Подключение всей библиотеки ``` import math # Подключить всю библиотеку math.sqrt(4) # Вычислить квадратный корень из 4 (Подсказка: 2) ``` #### Подключение части библиотеки ``` from math import sqrt, sin sqrt(4) # Делает тоже самое ``` #### Подключение всей библиотеки 2-ой тип ``` from math import * # Подключение всех функий и классов библиотеки sqrt(4) sin(10) ``` ## Работа с файлами > На компуктере у нас есть очень большое число файлов и мы можем захотеть работать с ними: анализировать, изменить формат данных в нем и так далее. Работа с файлом ``` f = open('имя файла', 'мод') ``` Моды ``` r - чтение файла w - запись в файл(начнет запись с самого начала, будет его перезаписывать) x - открытие файла на запись, если файла не существует, иначе исключение a - открытие на дозапись. Запись происходит в конец файла r+ или w+ или a+ или x+ - открытие и на запись, и на чтение ``` ### Чтение данных из файла *smth.txt:* ``` Привет Добрый день Bonjour Ola ``` *Python code:* ``` # Прочитать файл целиком f = open('smth.txt', 'r') a = f.read() # a = 'Привет\nДобрый день\nBonjour\nOla\n' f.close() ``` ``` # Прочитать файл построчно f = open('smth.txt', 'r') a = f.readline() # a = 'Привет\n' b = f.readline() # b = 'Добрый день\n' f.close() ``` ``` # Прочитать файл построчно, но полностью f = open('smth.txt', 'r') lines = f.readlines() # lines = ['Привет\n', 'Добрый день\n', 'Bonjour\n', 'Ola\n'] f.close() ``` #### Поздороваться с другом на разных языках ``` f = open('smth.txt') for line in f: print(f'{line.strip()} мой дорогой друг!') f.close() # Выведет: # 'Привет мой дорогой друг!' # 'Добрый день мой дорогой друг!' # 'Bonjour мой дорогой друг!' # 'Ola мой дорогой друг!' ``` ### Запись данных в файл ``` import math f = open('smth.txt', 'w') number = 20 f.write(f'Квадратный корень из {number} - {math.sqrt(number)}') f.close() ``` ### Дополнительная конструкция для работы с файлами Открытие файла с помощью *with* позволяет нам не заботиться о закрытии файла, так как после выхода из блока файл автоматически закроется. ``` with open('smth.txt') as f: ''' do something ''' with open('smth.txt') as f: for line in f: print(line) ```