# Введение в 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)
```