Лекция 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

Логический тип

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

In [57]:
a = True
b = False
In [58]:
a and b # и
Out[58]:
False
In [59]:
a or b # или
Out[59]:
True
In [60]:
not a # отрицание
Out[60]:
False

Строки

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

In [62]:
a = "Hello, "
b = "world"
a
Out[62]:
'Hello, '
In [63]:
a + b # сложение строк, называется "конкатенация"
Out[63]:
'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 [76]:
# Очень полезная функция - разбить строку
a1, b1 = c.split() # по пробелу
a1
Out[76]:
'Hello,'
In [77]:
b1
Out[77]:
'world'
In [78]:
a2, b2 = c.split(", ") # по какой-то строке
a2
Out[78]:
'Hello'
In [80]:
b2
Out[80]:
'world'

Ввод

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

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'

Вывод

Самый простой способ - использовать функцию 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

Условные инструкции

Строго говоря, такая одна - if .. else

In [ ]:
# Не запускать, просто пример
if condition:
    do_smth1
else: 
    do_smth2
In [93]:
a = input()
a = int(a)
if a > 10:
    print("a is greater than 10")
else:
    print("a is less than 10")
10
a is less than 10

else часть можно опускать

In [99]:
a = input()
a = int(a)
if a % 2 != 0:
    a = a - 1
print(a)
10
10

Циклы

Чаще всего используется цикл for, второй цикл (while, разберем в другой раз). И тут разберем его простешую форму

In [101]:
for i in range(100): # делать 100 раз, i примет значения от 0 до 99
    if i % 17 == 0:
        print(i)
0
17
34
51
68
85

Два важных соуса к for - это операторы break и continue

break позволяет досрочно выйти из цикла

In [116]:
# Проверка того, что число простое
a = input()
a = int(a)

if a > 1:
    is_prime = True
    for i in range(2, a): # итерироваться, начиная с 2 и заканчивая a - 1
        if a % i == 0: # если число делится на что-то из этого без остатка, 
            # то оно не простое
            is_prime = False
            break  # можем досрочно завершить цикл, 
            # у нас нет смысла что-либо проверять дальше
else:
    is_prime = False
    
print(is_prime)
11
True

continue позволяет досрочно перейти к следующей итерации цикла

In [118]:
for i in range(5):
    if i == 2:
        continue
    print(i)
0
1
3
4

Запуск интерпретатора

С Python можно общаться интерактивно:

Для этого:

  1. Если вы на Windows, то откройте Far Manager и там наберите команду python

  2. Если вы на Mac/Linux, то откройте терминал и введите python там.

Интерпретатор - удобный способ для проверки того, что маленькие части вашего кода работают.

Второй способ - Jupyter Notebook (http://jupyter.org), но это для тех, кому интересно. Вторая часть этой лекции сделана в нем.

Задания на урок..

а мы сюда точно доберемся?..

Откройте интерпретатор и введите bruce + 4.

Вы увидите сообщение об ошибке

NameError: name ’bruce’ is not defined

Присвойте переменной bruce значение так, чтобы bruce + 10 стало равным 10.

In [121]:
bruce + 4 
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-121-365fde905f14> in <module>()
----> 1 bruce + 4

NameError: name 'bruce' is not defined
In [122]:
bruce = 0
bruce + 10
Out[122]:
10

Пользователь вводит через стандартный ввод одну из четырех букв (A, T, G, C), программа заменяет ее на U, если была введена T, и возвращает исходную в остальных трех случаях.

In [123]:
character = input()
if character == "T":
    character = "U"

print (character)
T
U