Курс: Python

Лекция: Числа. Модули, Графики

Числа в Python 3: целые, вещественные, комплексные. Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций: +, -, *, /, //(целая часть от деления), %(остаток от деления), **(возведение в степень)

def nod(a,b):
    while a!=0:
        a, b = b % a, a
    return b

Обратите внимание на строку №3 приведенного примера, где происходит парное присвоение, часто используемое в языке python.

Модуль числа можно найти при помощи функции abs(x). Функция divmod(x,y) вернет пару чисел (x//y,x%y). Для возведения в степень имеется функция pow(x,y[,z]).

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

Задание 4.1 Длина длинного числа

Запросить у пользователя два целых числа X и Y. Найти число знаков в числе XY.

Системы счисления

Иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

s = 0
for i in range(10):
    s += 0.1
if s==1:
    print ('Нормально')
else:
    print ('Странно')

Вещественные числа не поддерживают длинную арифметику.

Задание 4.2 Калькулятор v2

Необходимо запросить у пользователя строку для вычислений. В качестве операций вводятся символы +, -, *, /. Нужно вывести результат вычислений. Например:

Строка для вычисления: 6*-1+4.2
Результат:-1.8

Комплексные числа (complex)

В Python встроены также и комплексные числа:

x = complex(1, 2)
print(x) #(1+2j)
y = complex(3, 4)
print(y) #(3+4j)
z = x + y
print(x) #(1+2j)
print(z) #(4+6j)
z = x * y
print(z) #(-5+10j)
z = x / y
print(z) #(0.44+0.08j)
print(x.conjugate())  # Сопряжённое число (1-2j)
print(x.imag)  # Мнимая часть 2.0
print(x.real)  # Действительная часть 1.0
print(x > y)  # Комплексные числа нельзя сравнить. Выведет ошибку!
print(x == y)  # Но можно проверить на равенство
abs(3 + 4j)  # Модуль комплексного числа 5.0
pow(3 + 4j, 2)  # Возведение в степень (-7+24j)

Модули

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

Вы можете использовать любой питоновский файл как модуль в другом файле, выполнив в нем команду import. Команда import в Python обладает следующим синтаксисом:

import math
# Используем функцию sqrt из модуля math
print (math.sqrt(9))
# Печатаем значение переменной pi, определенной в math
print (math.pi)

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

Команда from ... import позволяет вам импортировать не весь модуль целиком, а только определенное его содержимое. Например:

# Импортируем из модуля math функцию sqrt
from math import sqrt
# Выводим результат выполнения функции sqrt.
# Обратите внимание, что нам больше незачем указывать имя модуля
print (sqrt(144))
 # Но мы уже не можем получить из модуля то, что не импортировали
print (pi) # Выдаст ошибку

Выражение from ... import не импортирует весь модуль, а только предоставляет доступ к конкретным объектам, которые мы указали.

В Python так же возможно импортировать всё (переменные, функции, классы) за раз из модуля, для этого используется конструкция from ... import *. Например:

from math import *
 
# Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math
 
print (sqrt(121))
print (pi)
print (e)

Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде.

Модуль math

Модуль math – один из наиважнейших в Python. Этот модуль предоставляет обширный функционал для работы с числами. В нем вы найдете такие функции как sin(), cos(), sqrt(), cos(), log(), exp(), trunc(). В нем же определены константы pi, e.

Модуль random

Модуль random предоставляет функции для генерации случайных чисел, букв, случайного выбора элементов последовательности. Модуль собрал разные функции для имитации случайных процессов: random(), randint(), randrange(), choice(), shuffle(), gauss() и другие.

Задание 4.3 Камень, ножницы, бумага

Запрограммируйте игру с компьютером в "Камень, ножницы, бумага". Пример диалога:

Счет 0:0
Ваш ход (0-выход, 1-камень, 2-ножницы, 3-бумага): 1
Мой ход: 2
Вы выиграли!
Счет 0:1
Ваш ход (0-выход, 1-камень, 2-ножницы, 3-бумага): 3
Мой ход: 3
Ничья!
Счет 0:1
Ваш ход (0-выход, 1-камень, 2-ножницы, 3-бумага): 1
Мой ход: 3
Вы проиграли!
Счет 1:1
Ваш ход (0-выход, 1-камень, 2-ножницы, 3-бумага): 0
Игра окончена со счетом 1:1

Построение диаграмм в python

простейший график, который можно построить в Matplotlib, это график синуса и косинуса:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import math

dpi = 80
fig = plt.figure(dpi = dpi, figsize = (512 / dpi, 384 / dpi) )
mpl.rcParams.update({'font.size': 10})

plt.axis([0, 10, -1.5, 1.5])

plt.title('Sine & Cosine')
plt.xlabel('x')
plt.ylabel('F(x)')

xs = []
sin_vals = []
cos_vals = []

x = 0.0 
while x < 10.0:
    sin_vals += [ math.sin(x) ]
    cos_vals += [ math.cos(x) ]
    xs += [x] 
    x += 0.1 

plt.plot(xs, sin_vals, color = 'blue', linestyle = 'solid',
         label = 'sin(x)')
plt.plot(xs, cos_vals, color = 'red', linestyle = 'dashed',
         label = 'cos(x)')

plt.legend(loc = 'upper right')
fig.savefig('trigan.png')
plt.show()

Задание 4.4 График 'Улитки'

Постройте график функции \(r=\phi\)