01

Введение в Python и работа с Jupyter Notebook

Рабочая тетрадь Jupyter Notebook состоит из последовательного набора ячеек, которые могут содержать код, текст, картинки (для того чтобы увидеть как вставить картинку, дважды щелкните по логотипу Физтеха выше), таблицы, формулы или даже интерактивные элементы.

Hello World!

Для того что бы выполнить код, написанный в ячейке, нужно выбрать ячейчу и нажать Shift+Enter, при этом после ячейки (эта зона называется Out) появится результат работы ячейки.

In [31]:
print("Hello World!") # Функция print выводит текст в `Out` ячейки
Hello World!
In [32]:
# Эта строка -- комментарий. То, что здесь написано, не будет выполняться как код. 
# print("Я не печатаюсь")

Калькулятор

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

In [33]:
2+2*2 # Шесть или восемь? Что надо сделать чтобы получить восемь?
Out[33]:
6
In [34]:
2+2*2 # Значение этого выражение не будет выведено в `Out`
(2+1j)*(-1j) # Встроена поддержка комплексных чисел
Out[34]:
(1-2j)
In [61]:
2**1.5 # Возведение в степень
Out[61]:
2.8284271247461903
In [63]:
print("Деление нацело: ", 23 // 5)
print("Остаток от деления: ", 23 % 5)
Деление нацело:  4
Остаток от деления:  3
In [1]:
# Python поодерживает длинную арифметику для целых чисел
# Иначе говоря длина целых чисел ограничена только 
# размером оперативной памяти вашего компьютера
1234567890**123
Out[1]:
180443894485522835714954192172999280028845717532682776236340940102536698145222569108484463188835141501257568786614496374890490631237110580592001682129147574651845715171456148359301092015447205623057495772659564027213301182232076238590331900681806078027178740976490955033321310868454820309128358774485790967770683032944024352558539124788679067434454263656340662912379366253271751953736731074819372491000795297394853010105837025484346139393089929535058486260828830048634323191537485125711757553017086494262086507174576160642886415424336562785001644174485982226421972489721110767356064962137106505728778418700556641023076586539800506459911177905554903899443902042199874341653922049139720885160820424705059531702449496414152206583904252440335125073512355264351679192059781951740756716496372272101373104569806788535169770019927578333904122000732663242308371786294445444694565563343590247938552086658203292972070407426713686306344322058332865613102498986620473134625473086906778038872631750464721441869000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
In [70]:
abs(-1), abs(3+4j) # Модуль числа
Out[70]:
(1, 5.0)
In [62]:
"Двойный кавычки не отличаются от одинарных"
Out[62]:
'Двойный кавычки не отличаются от одинарных'

Объявление переменных и функций

In [36]:
some_variable = 1 # Объявляем переменную, переменым лучше давать значащие имена
In [37]:
print(some_variable) # Объявленная переменная доступна из любой ячейки
1
In [38]:
some_variable # Для втодополнения имени переменной можно использовать клавишу `Tab`
Out[38]:
1
In [39]:
a = "Строка"
In [40]:
print(a)
Строка

Чтобы вывести данные в определенном формате, используется так называемое форматирование строк, есть несколько разных методво форматирования.

In [1]:
a = 3.14
print(f"a = {a}") # `f`- форматирование
b = 3.14525436356546
print(f"b = {b:.4}") # `f`- форматирование, с ограничением числа значащих цифр
my_string = "Привет"
my_number = 5
print("%s! %d" % (my_string, my_number)) # `%`-форматирование, счиатется устаревшим
# Далее будут даны ещё методы форматирования
a = 3.14
b = 3.145
Привет! 5

Для ввода данных в программу можно использовать функцию input(). Она считывает одну строку. Применение этой функции в интереснов основном при написании отдельных программ, а не работе в рабочих тетрадях.

In [42]:
a = input()
print(a)
1
1

Функции — это такие участки кода, которые изолированы от остальный программы и выполняются только тогда, когда вызываются. Код с объявлением функции должен быть вызван раньше кода в котором вызвается функция, поэтому ячейку с функций крайне желательно располагать раньше ячейки с вызовом функции (иначе нельзя будет исполнять ячейки последовательно). В круглых скобках после названия функции пичется список параметров, return возвращает некоторое значение.

In [43]:
def to_fahrenheit_degree(celsius_degree):
    """
    Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта
    Пригодится при работе с имперским оборудованием
    """
    return (9/5)*celsius_degree + 32
In [44]:
data = [10,20,30] # Результаты измерений в градусах Цельсия сохранены в списке - одном из типов коллекций (наборов элементов) предоставляемых Python
for element in data: # Так называемы цикл for-each  - в переменную element по очередно записываются элементы набора data
    print(element, "градусов Цельсия это" , to_fahrenheit_degree(element), "градусов Фаренгейта")
    
# Больше о циклах и коллекциях будет написано в следующих разделах  пмс  
10 градусов Цельсия это 50.0 градусов Фаренгейта
20 градусов Цельсия это 68.0 градусов Фаренгейта
30 градусов Цельсия это 86.0 градусов Фаренгейта

Обратите внимание что входным типом данных были целые числа, а выходным чилса с плавающей точкой.

Также обращу ваше внимание на текст:

    """
    Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта
    Пригодится при работе с имперским оборудованием
    """

приведенный в начале функции to_fahrenheit_degree - это так называемый docstring - строка содержащая документацию по функции, для обращения в данной документации используется встроенная функция help.

In [45]:
help(to_fahrenheit_degree)
Help on function to_fahrenheit_degree in module __main__:

to_fahrenheit_degree(celsius_degree)
    Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта
    Пригодится при работе с имперским оборудованием

В хорошо оформленных библиотеках функция help позволяет получить исчерпывающую справку об работе функции (на английском языке конечно).

In [46]:
help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None

In [47]:
def my_print(x):
    print(x + '!')
    
print(my_print('qwe'))
qwe!
None

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

In [48]:
def add(a, b, c=2): # c - необязательный аргумент
    return a + b + c
print(add(1, 2))
print(add(1, 2, 3))
5
6

Подключение дополнительных библиотек

При написаннии программ не обойти без использования сторонних или даже ваших собсвенных библиотек с кодом. Python ищет библиотеки по определенным путям, включая директорию в которой мы сейчас расположены. Стандратная билиотека Python содрежит много полезных при написании программ функций и классов, а дистрибутив Anaconda предоставлет большое множество библиотке для научного программирования.

В качесве примера рассмотрим использование стандартной математической билиотеки.

In [49]:
import math # Подключение билотеки по её полному имени
In [50]:
math.log(math.e) # Обращение к элементам библиотеки
Out[50]:
1.0
In [51]:
math.log(1000, 10) # Кто не прогуливал лекции по информатике, тот сможет объяснить почему результат оказался не равным 3.0
Out[51]:
2.9999999999999996
In [52]:
dir(math) # Функция dir позволяет узнать какие имена используются в библиотеке
Out[52]:
['__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'acos',
 'acosh',
 'asin',
 'asinh',
 'atan',
 'atan2',
 'atanh',
 'ceil',
 'copysign',
 'cos',
 'cosh',
 'degrees',
 'e',
 'erf',
 'erfc',
 'exp',
 'expm1',
 'fabs',
 'factorial',
 'floor',
 'fmod',
 'frexp',
 'fsum',
 'gamma',
 'gcd',
 'hypot',
 'inf',
 'isclose',
 'isfinite',
 'isinf',
 'isnan',
 'ldexp',
 'lgamma',
 'log',
 'log10',
 'log1p',
 'log2',
 'modf',
 'nan',
 'pi',
 'pow',
 'radians',
 'sin',
 'sinh',
 'sqrt',
 'tan',
 'tanh',
 'tau',
 'trunc']
In [53]:
import math as m # Можно вместо полного имени использовать псевдоним,
                 # наиболее популярные билиотеки имеют общепринятые псевдонимы
In [54]:
m.sin(m.pi) # Очень близко, но из=за конечной точности все же не ноль
Out[54]:
1.2246467991473532e-16
In [55]:
from math import cos, tan # Можно импортировать одно или несколько имен
In [56]:
cos(3.14)
Out[56]:
-0.9999987317275395
In [57]:
# Самый плохой вариант - импортирует все имена из билиотеки, 
# при этом возмозможно перекрытие имен (смотри код далее)
from math import *
In [58]:
cos(pi)
Out[58]:
-1.0
In [59]:
pi = 4 # Согласно приказу Минобрнауки значение числа пи принять равным 4
In [60]:
cos(pi)
Out[60]:
-0.6536436208636119

Поскольку поиск подобных ошибок затруднен использование синтаксиса from module import * крайне не желательно.

^Наверх
Вниз