Artyom 2 недель назад
Родитель 9a8d376c28
Сommit e79b8cd1f8

Двоичные данные
TEMA4/pictures/Bar1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.3 KiB

Двоичные данные
TEMA4/pictures/Hist1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.9 KiB

Двоичные данные
TEMA4/pictures/Ris1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
TEMA4/pictures/Ris2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 26 KiB

Двоичные данные
TEMA4/pictures/Ris3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
TEMA4/pictures/figure0.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 25 KiB

@ -0,0 +1,351 @@
# Отчет по теме 4
Степанов Артём, А-02-23
## Встроенные функции
### 1. Установка рабочего каталога. Создание рабочего протокола.
В оболочке IDLE установил актуальный рабочий каталог, а затем в нём создал рабочий протокол.
![Скриншот созданного рабочего протокола](pictures/figure0.png)
### 2. Изучение стандартных функций.
#### 2.1. Функция __round__.
Функция __round__ позволяет округлить переданное ей число до указанного количества знаков после запятой или, если последнее не указано, до целой части числа.
```py
>>> help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
>>> round(123.456, 1) # Округление до 1-го знака в дробной части
123.5 # Результат - вещественное число
>>> round(123.456, 0) # Округление до 0-го знака в дробной части
123.0 # Результат - вещественное число
>>> round(123.456) # Округление без указания знака, до которого нужно округлять (по умолчанию - округление до целой части)
123 # Результат - целое число
```
#### 2.2. Функция __range__.
Функция __range__ позволяет создать "итерируемый объект" класса range, содержащий последовательность целых чисел с заданным шагом. При передаче в эту функцию только одного аргумента, он будет считаться как правая граница диапазона значений, а левой границей и шагом будут числа 0 и 1 соответственно.
```py
>>> gg = range(76, 123, 9) # Создание "итерируемого объекта" класса range с указанными границами и шагом
>>> gg
range(76, 123, 9)
>>> list(gg) # Преобразование "итерируемого объекта" класса range в список
[76, 85, 94, 103, 112, 121]
>>> range(23) # Создание "итерируемого объекта" класса range без указания левой границы и шага
range(0, 23)
>>> list(range(23))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
```
#### 2.3. Функция __zip__.
Функция __zip__ позволяет создать общий объект, элементами которого являются кортежи, состоящие из элементов переданных объектов последовательностей. Важно заметить, что длина результирующего объекта равна длине самого короткого объекта из переданных функции.
```py
>>> qq = ["Степанов", "Киреев", "Беженарь", "Володин"]
>>> ff = zip(gg ,qq)
>>> ff
<zip object at 0x000001A72E8E9900>
>>> tuple(ff)
((76, 'Степанов'), (85, 'Киреев'), (94, 'Беженарь'), (103, 'Володин'))
>>> ff[1] # К "итерируему объекту" класса zip нельзя обратиться оп индексу
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
#### 2.4. Функция __eval__.
С помощью функции __eval__ можно вычислять значения выражений, представленных в виде символьной строки и корректно записаннх нааа языке Python.
```py
>>> fff = float(input("Коэффициент усиления = ")); dan = eval('5 * fff - 156')
Коэффициент усиления = 50
>>> dan
94.0
```
#### 2.5. Функция __exec__.
Существует также достаточно похожая на __eval__ функция __exec__, которая позволяет записывать и выполнять объекты-аргументы функции, которые также должны быть записаны в соответствии с синтаксисом языка Python.
```py
>>> exec(input('Введите инструкции: '))
Введите инструкции: perem = -123.456; gg = round(abs(perem) + 98, 3)
>>> gg
221.456
```
#### 2.6. Остальные встроенные функции.
Помимо рассмотренных выше встроенных функциий существует и масса других. Работа некоторых из них представлена ниже.
```py
>>> abs(-100) # Получение модуля числа
100
>>> pow(2, 5) # Возведение чисда в степень
32
>>> max(1, 2, 3, 10) # Получение максимального числа из переданной последовательности
10
>>> min(1, 2, 3, 10) # Получение минимального числа из переданной последовательности
1
>>> sum([1, 2, 3, 10]) # Суммирование элементов переданной последовательности
16
>>> divmod(11, 4) # Получение кортежа с двумя элементами: результатами целочисленного деления и деления с остатком
(2, 3)
>>> def square(x):
... return x ** 2
...
>>> map(square, [1, 2, 3, 10]) # Применение заданной функции ко всем элементам переданной последовательности
<map object at 0x000001A72E8BB1C0>
>>> list(map(square, [1, 2, 3, 10]))
[1, 4, 9, 100]
```
### 3. Изучение функций из стандартного модуля __math__.
Стандартный модуль __math__ содержит в себе множество математических функций, работа которых будет рассмотрена ниже. Для того, чтобы использовать данные функции, необходимо предварительно загрузить сам модуль с мощью инструкции __import__.
```py
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
Raise a ValueError if x is negative or non-integral.
>>> math.factorial(5) # Расчет факториала числа
120
>>> math.sin(math.pi / 6) # Расчет синуса числа
0.49999999999999994
>>> math.acos(0.5) * 180 / math.pi # Расчет арккосинуса числа
60.00000000000001
>>> math.degrees(math.pi / 6) # Перевод угла в радианах в градусы
29.999999999999996
>>> math.radians(60) # Перевод угла в градусах в радианы
1.0471975511965976
>>> math.exp(2) # Возведение числа Эйлера в определенную степень
7.38905609893065
>>> math.log(8, 2) # Вычисление логарифма с определенным основанием
3.0
>>> math.log10(100) # Вычисление десятичного логарифма
2.0
>>> math.sqrt(64) # Вычисление квадратного корня
8.0
>>> math.ceil(4.25) # Округление в большую сторону
5
>>> math.floor(4.25) # Округление в меньшую сторону
4
```
С помощью функций из модуля __math__ можно вычислять значения сложных математических выражений:
```py
>>> math.sin(2 * math.pi / 7 + math.exp(0.23))
0.8334902641414562
```
### 4. Изучение функций из модуля __cmath__.
Модуль __cmath__ предлагает функции для работы с комплексными числами.
```py
>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(1.2 - 0.5j) # Вычисление квадратного корня из комплексного числа
(1.118033988749895-0.22360679774997896j)
>>> cmath.phase(1 - 0.5j) # Вычисление фазы комплексного числа
-0.4636476090008061
```
### 5. Изучение стандартного модуля __random__.
В стандартном модуле __random__ находятся функции для выполнения операций с псевдослучайнми числами и выборками.
```py
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_index', '_inst', '_isfinite', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
>>> random.seed()
>>> random.random() # Равномерно распределенное случайное число
0.1152129653955114
>>> random.uniform(1, 2) # Равномерно распределенное случайное число
1.652820336318591
>>> random.randint(5, 6) # Случайное целое число
5
>>> random.gauss(5, 0.2) # Нормально распределенное случайное число
5.586721832935044
>>> random.choice(["Apple", "Orange", "Pear"]) # Случайный выбор элемента из совокупности
'Pear'
>>> fruits = ["Apple", "Orange", "Pear"]
>>> random.shuffle(fruits) # Перемешивание элементов списка
>>> fruits
['Orange', 'Pear', 'Apple']
>>> random.sample(fruits, 2) # Получение выборки заданной размерности из совокупности
['Pear', 'Orange']
>>> random.betavariate(1, 2) # Случайное число с бета-распределением
0.3607912068298316
>>> random.gammavariate(1, 2) # Случайное число с гамма-распределением
3.0315991157427007
```
Создан список с 4 случайными значениями, подчиняющимися равномерному, нормальному, бета и гамма - рапределениям соответственно:
```py
>>> [random.uniform(1, 5), random.gauss(2, 1), random.betavariate(1, 2), random.gammavariate(1, 2)]
[4.634488864215074, 3.6175843692296463, 0.03744862534726113, 0.6504992939184938]
```
### 6. Изучение функций из модуля __time__.
Модуль __time__ позволяет использовать функции для работы с календарем и временем.
```py
>>> import time
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
>>> c1 = time.time() # Время в секундах, прошедшее с начала эпохи
>>> c1
1760195668.18832
>>> c2 = time.time() - c1 # Получение времени со ввода предыдущей команды
>>> c2
48.85673546791077
>>> dat = time.gmtime() # Получение полной информации о текущем времени
>>> dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=11, tm_hour=15, tm_min=15, tm_sec=48, tm_wday=5, tm_yday=284, tm_isdst=0)
>>> dat.tm_mon # Получение текущего месяца
10
>>> dat.tm_hour # Получение текущего часа
15
>>> datLocal = time.localtime() # Получение полной информации о текущем "местном" времени
>>> datLocal
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=11, tm_hour=18, tm_min=16, tm_sec=38, tm_wday=5, tm_yday=284, tm_isdst=0)
>>> time.asctime(datLocal) # Преобразование представления времени из кортежа в строку
'Sat Oct 11 18:16:38 2025'
>>> time.ctime(c1) # Преобразование времени в секундах, прошедшего с начала эпохи, в строку
'Sat Oct 11 18:14:28 2025'
>>> time.sleep(10) # Прерывание работы программы на заданное количество секунд
>>> time.mktime(datLocal) # Преобразование времени из кортежа или структуры в число секунд с начала эпохи
1760195798.0
```
### 7. Графические функции.
В развернутой версии Python присутствуют модули пакета matplotlib, в состав которого входит модуль pylab, содержащий ряд полезных функций для графического представления данных.
```py
>>> import pylab
>>> x = list(range(-3, 55, 4))
>>> t = list(range(15))
>>> pylab.plot(t, x) # Создание графика в оперативной памяти компьютера
[<matplotlib.lines.Line2D object at 0x0000025E22D08350>]
>>> pylab.title("Первый график") # Добавление названия графика
Text(0.5, 1.0, 'Первый график')
>>> pylab.xlabel("Время") # Добавление названия оси абсцисс
Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал") # Добавление названия оси ординат
Text(0, 0.5, 'Сигнал')
>>> pylab.show() # Отображение графика
```
![Первый график](pictures/Ris1.png)
На одном рисунке можно отобразить несколько графиков:
```py
>>> X1 = [12, 6, 8, 10, 7]; X2 = [5, 7, 9, 11, 13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000025E22D11090>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000025E22CFCB90>]
>>> pylab.show()
```
![Второй график](pictures/Ris2.png)
Также данный модуль дает возможность строить круговые и столбиковые диаграммы и гистограммы.
```py
>>> region = ["Центр", "Урал", "Сибирь", "Юг"]
>>> naselen = [65, 12, 23, 17]
>>> pylab.pie(naselen, labels = region)
([<matplotlib.patches.Wedge object at 0x0000025E26522390>, <matplotlib.patches.Wedge object at 0x0000025E265230D0>, <matplotlib.patches.Wedge object at 0x0000025E26534DD0>, <matplotlib.patches.Wedge object at 0x0000025E26535350>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()
```
![Круговая диаграмма](pictures/Ris3.png)
```py
>>> pylab.hist([1, 2, 3, 1, 1, 2, 2, 2, 2], bins = 3)
(array([3., 5., 1.]), array([1. , 1.66666667, 2.33333333, 3. ]), <BarContainer object of 3 artists>)
>>> pylab.show()
```
![Гистограмма](pictures/Hist1.png)
```py
>>> pylab.bar(region, naselen)
<BarContainer object of 4 artists>
>>> pylab.show()
```
![Столбиковая диаграмма](pictures/Bar1.png)
### 8. Статистические функции из модуля __statistics__.
В составе модуля __statistics__ находятся различные статистические функции. Работа некоторых из них представлена ниже.
```py
>>> import statistics
>>> dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_mean_stdev', '_normal_dist_inv_cdf', '_sqrt_bit_width', '_ss', '_sum', 'bisect_left', 'bisect_right', 'correlation', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'mul', 'multimode', 'namedtuple', 'numbers', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sqrt', 'stdev', 'sys', 'tau', 'variance']
>>> statistics.mean([1, 2, 3, 4, 5, 6, 7, 8, 9]) # Вычисление среднего
5
>>> statistics.stdev([1, 2, 3, 4, 5, 6, 7, 8, 9]) # Вычисление среднеквадратичного отклонения
2.7386127875258306
>>> statistics.median([1, 2, 3, 4, 5, 6, 7, 8]) # Вычисление медианы
4.5
```
### 9. Завершение работы со средой.
Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.

@ -0,0 +1,51 @@
# Общее контрольное задание по теме 4
Степанов Артём, А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
* Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
* Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
* Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
* Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
* Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
* Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
>>> #1
>>> exec('''
... import cmath
... result = divmod(round(cmath.phase(0.2 + 0.8j), 2) * 20, 3)
... print(result)
... ''')
(8.0, 2.6000000000000014)
>>> #2
>>> import time
>>> localTime = time.localtime()
>>> print("Current time: {}:{}".format(localTime.tm_hour, localTime.tm_min))
Current time: 23:30
>>> #3
>>> weekDays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
>>> import random
>>> random.sample(weekDays, 3)
['Saturday', 'Monday', 'Thursday']
>>> #4
>>> random.choice(range(14, 33, 3))
23
>>> #5
>>> N = math.floor(random.gauss(15, 4))
>>> N
17
>>> import string
>>> letters = random.sample(string.ascii_letters, N)
>>> letters
['P', 'b', 't', 'z', 'R', 'f', 'm', 'O', 'p', 'i', 'j', 'a', 'E', 'r', 'B', 'd', 'y']
>>> #6
>>> timeDiff = round(time.time() - time.mktime(localTime))
>>> print(timeDiff // 60, "minutes and", timeDiff % 60, "seconds")
19 minutes and 52 seconds
```
Загрузка…
Отмена
Сохранить