Лекция 1. Основы Python

Пример кода из лекции. По прохождении курса, скорее всего, вы будете понимать, что здесь написано.. Я надеюсь:)

In [107]:
max_iters = 1000
eps = 1e-10
A = input()
A = float(A)
approx_x = A / 2
for it in range(max_iters):
    prev_approx_x = approx_x
    approx_x = 1 / 2 * (approx_x + A / approx_x)
    if abs(prev_approx_x - approx_x) < eps:
        break
        
print(approx_x)
121
11.0

Каждый язык программирования (за редким исключением ) реализует в себе набор базовых инструкций, позволяющих писать программы

  1. Базовые типы - базовые виды данных, с которыми приходится сталкиваться (числа, строки, последовательности объектов)
  2. Ввод - получение данных через клавиатуру, файл или через другой источник
  3. Вывод - отображение данных на экране, в файле или другом источнике
  4. Условные инструкции - проверка на определенные условия и исполнения кода только если они выполняются/не выполняются
  5. Циклы - повторять какое-то действие много раз

Переменная

Переменная - поименованная область памяти, который хранит значение какого-то типа.

Проще говоря - мы взяли ящик, положили в него кошку Василису и назвали этот ящик cat. cat теперь переменная.

cat

Базовые типы

Python, как и множество других подобных ему языков, реализует множество типов данных, которые наиболее часто встречаются программисту и наиболее часто им используются при решении задач. К таким типам относятся:

  1. Целые числа
  2. Числа с плавающей запятой
  3. Логический тип
  4. Строковый тип
  5. То, что мы разберем на следующих лекциях:)

Целые числа

In [22]:
a = 11 # мы присвоили целочисленное значение нашей переменной
b = 5 # ну и вторую для порядку

Над целыми числами можно выполнять множество математических операций

In [23]:
a - b # вычитание
Out[23]:
6
In [24]:
a + b # сложение
Out[24]:
16
In [25]:
a * b # умножение
Out[25]:
55

С делением чуть посложнее, если хотим продолжить работать с целыми числами:

In [29]:
a // b # целочисленное деление
Out[29]:
2
In [30]:
a % b # остаток от целочисленного деления
Out[30]:
1
In [31]:
a ** b # возведение в степень 
Out[31]:
161051
In [32]:
abs(-10) # взятие модуля
Out[32]:
10

Числа с плавающей запятой

Числа с плавающей запятой в Python - способ хранения значений вещественных чисел

In [35]:
a = 10 / 2 # выполняем обычное деление
a 
Out[35]:
5.0

Заметьте, что a поменяла свой тип, это одна из фишек Python - переменная может спокойно менять свой тип. Переменным с вещественным типом доступны те же операции

In [36]:
b = 5.2 
a - b
Out[36]:
26.0
In [40]:
a + b
Out[40]:
10.2
In [44]:
a * b
Out[44]:
26.0
In [45]:
a / b
Out[45]:
0.9615384615384615
In [46]:
a ** 0.5
Out[46]:
2.23606797749979
In [48]:
b // a # ТАК МОЖНО, НО НЕ НУЖНО!!!
Out[48]:
1.0
In [50]:
round(a ** 0.5, 2) # можем округлять переменную до нужного нам числа знаков после запятой
Out[50]:
2.24

Вывод

Самый простой способ - использовать функцию print

In [89]:
a = 45
print(a)
45

А если хотим вывести две переменные? Можно так:

In [90]:
a = 10
b = "Hi"
print (a, b)
10 Hi

А можно так:

In [91]:
a = 10
b = "Hi"
print (str(a) + ", " + str(b) )
10, Hi

Ввод

Самое простое - читать, что нам ввели с клавиатуры

In [81]:
a = input() 
крапива
In [84]:
a # теперь a хранит значение, которое ввел пользователь
Out[84]:
'крапива'
In [85]:
a = input() # а если хотим получить число? 
55
In [86]:
int(a) # преобразование того, что хранится в a к целочисленной переменной
Out[86]:
55
In [87]:
float(a) # преобразование того, что хранится в a к вещественной переменной
Out[87]:
55.0
In [88]:
str(a) # преобразование того, что хранится в a к строковой переменной
Out[88]:
'55'

Операторы присваивания

Чтобы понимать часть происходящих далее вещей, полезно понимать операторы присваиввания.

In [1]:
x = 3
y = 5
z = x + y # создаём новую переменную z и присваиваем ей значение суммы x и y
z
Out[1]:
8
In [ ]:
x = 3
y = 5
x = x + y # оператор + создаёт новый объект, равный сумме x и y, а оператор = присваивает новый объект переменной x
x
In [ ]:
x = 3
y = 5
x += y # оператор += обновляет переменную x, добавляя к её значению значение y. Эквивалент: x = x + y
x

Другие операторы присваивания:

In [2]:
x, y, z = 3, 4, 5 #Оператор = может работать сразу с несколькими переменными и значениями! (обязательно с запятыми)
a, b, c = 1, 2, 3

z -= x # z = z - x
print('z =', z)

y *= x # y = y * x
print('y =',y)

x //= x # x = x // x
print('x =',x)

c %= b # c = c % b
print('c =',c)

b **= b # b = b**b
print('b =',b)
z = 2
y = 12
x = 1
c = 1
b = 4

А вот так в питоне запросто можно обменять значения двух переменных:

In [3]:
x = 3
y = 5

x, y = y, x #Правда ведь красиво?

print(x,y)
5 3

Логический тип (bool)

Переменные логического типа могут хранить два значения - True и False

In [1]:
a = True
b = False
In [2]:
a and b # и
Out[2]:
False
In [3]:
a or b # или
Out[3]:
True
In [4]:
not a # отрицание
Out[4]:
False

Сравнение

Результаты сравнений переменных принимают значения типа bool.

В Python существуют следующие операторы сравнения:

  • == - проверка равенства
  • > - больше
  • < - меньше
  • >= - больше либо равно
  • <= - меньше либо равно
  • != - проверка НЕравенства

Смотрите сами:

In [6]:
print(5 == 7)
print(8 > 0)
print(-10 <= 9)
print('Курица' == 'Птица')
print('делать мне' > 'Нечего') # Как может работать сравнение строк?
print('Делать мне' > 'Нечего') # Как может работать сравнение строк?
print('Лекция' != 'Семинар')
print(3.0 == 3) # Python может даже сравнивать разные типы данных!
False
True
True
False
True
False
True
True
In [27]:
a = 0.3 + 0.3 + 0.3
a
Out[27]:
0.8999999999999999
In [28]:
0.9 == a
Out[28]:
False
In [ ]:
eps = 0.00001
In [ ]:
abs(0.9 - a) < eps

Строки

Строковые переменные хранят строки..

In [5]:
a = "Hello, "
b = "world"
a
Out[5]:
'Hello, '
In [6]:
a + b # сложение строк, называется "конкатенация"
Out[6]:
'Hello, world'
In [7]:
print(a+b)
Hello, world
In [64]:
a - b # не, ну а вы что ожидали? 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-64-89323daed4c2> in <module>()
----> 1 a - b # не, ну а вы что ожидали?

TypeError: unsupported operand type(s) for -: 'str' and 'str'
In [65]:
a * b # однако кто ищет..
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-65-c0856cd6fa5b> in <module>()
----> 1 a * b # однако, кто ищет..

TypeError: can't multiply sequence by non-int of type 'str'
In [68]:
a * 5 # тот всегда найдет! нечасто такое нужно, правда
Out[68]:
'Hello, Hello, Hello, Hello, Hello, '
In [69]:
a[0] # у строки можно взять какой-то определенный символ, отсчет с нуля..
Out[69]:
'H'
In [70]:
a[0:5] # или несколько, называется "срез"
Out[70]:
'Hello'
In [73]:
c = a + b
c
Out[73]:
'Hello, world'
In [14]:
path_to_dir = "abs/"
filename = "name"
file_ext = ".txt"

path = path_to_dir + filename + file_ext
path = "{}{}{}".format(path_to_dir, filename,
                      file_ext)
print(path)
abs/name.txt
In [16]:
pi = 3.141592653589793
In [17]:
r = input()
r = int(r)
r
5
Out[17]:
5
In [18]:
r = input()
r = int(r)
length = 2 * pi * r
print(length)
10
62.83185307179586
Формат
In [19]:
print("{}".format(length))
62.83185307179586
In [21]:
print("{:.3f}".format(length))
62.832
In [22]:
print("{:.6f}".format(length))
62.831853
In [23]:
float(5)
Out[23]:
5.0
In [24]:
a = "Hello, world"
Длина строки
In [26]:
len(a)
Out[26]:
12