diff --git a/TEMA4/Figure1.png b/TEMA4/Figure1.png new file mode 100644 index 0000000..b3922ca Binary files /dev/null and b/TEMA4/Figure1.png differ diff --git a/TEMA4/Figure2.png b/TEMA4/Figure2.png new file mode 100644 index 0000000..77ef418 Binary files /dev/null and b/TEMA4/Figure2.png differ diff --git a/TEMA4/Figure3.png b/TEMA4/Figure3.png new file mode 100644 index 0000000..0654f48 Binary files /dev/null and b/TEMA4/Figure3.png differ diff --git a/TEMA4/Figure4.png b/TEMA4/Figure4.png new file mode 100644 index 0000000..0155b37 Binary files /dev/null and b/TEMA4/Figure4.png differ diff --git a/TEMA4/Figure5.png b/TEMA4/Figure5.png new file mode 100644 index 0000000..d108e77 Binary files /dev/null and b/TEMA4/Figure5.png differ diff --git a/TEMA4/report.md b/TEMA4/report.md new file mode 100644 index 0000000..e7e9b63 --- /dev/null +++ b/TEMA4/report.md @@ -0,0 +1,602 @@ +# Отчет по теме 4 +## Подольский Никита, А-01-23 +### 1. Запуск интерактивной оболочки IDLE + +### 2. Стандартные функции +#### 2.1 Функция round – округление числа с заданной точностью +```python +>>> 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) +123.5 +>>> round(123.456,0) +123.0 +>>> round(123.456) +123 +>>> type(round(123.456,1)) + +>>> type(round(123.456,0)) + +>>> type(round(123.456)) + +``` + +#### 2.2 Функция range – создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1. +```python +>>> gg=range(76,123,9) +>>> list(gg) +[76, 85, 94, 103, 112, 121] +>>> range(23) +range(0, 23) +>>> type(range(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] +``` + +Объект `range(23)` будет содержать последовательность целых чисел, начиная с 0 и до 22 (так как 23 не включается). Чтобы это увидить, необходимо применить `list()`. range — это легковесный объект, который генерирует числа на лету, а не хранит их все в памяти, поэтому преобразование в list нужно только для просмотра. Границы диапазона: от 0 и до 23, проход с шагом 1 по умолчанию(Если вызываем просто `range(23)`, выводится только начальное и конечное значение). +#### 2.3 Функция zip - создание итерируемого объекта из кортежей +``` python +>>> qq = ["Podolsky", "Zhalnin", "Melnikov", "Bushmanov"] +>>> ff = zip(gg, qq) +>>> ff + +>>> tuple(ff) +((76, 'Podolsky'), (85, 'Zhalnin'), (94, 'Melnikov'), (103, 'Bushmanov')) +``` + +``` python +>>> ff[1] +Traceback (most recent call last): + File "", line 1, in + ff[1] +TypeError: 'zip' object is not subscriptable +``` +К объекту ff нельзя обратиться по индексу из-за того что он не итерируемый, так же он является не изменяемым. + +#### 2.4 Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки. +```python +>>> fff = float(input('коэффициент усиления=')); dan=eval('5*fff-156') +коэффициент усиления=73 +>>> fff +73.0 +>>> dan +209.0 +``` + +#### 2.5 Функция exec – чтение и выполнение объекта-аргумента функции. +``` python +>>> exec(input('введите инструкции:')) +введите инструкции: +>>> perem=-123.456;gg=round(abs(perem)+98,3) +>>> gg +221.456 +``` +Функции eval() и exec() нужно использовать с осторожностью, так как они затрудняют чтение и понимание программ. Отличие eval() от exec() в том, что eval() вычисляет выражение (expression), а exec() выполняет инструкции (statements). Выражения — подмножество инструкций, отличающееся наличием результата. Например, 1, 1+2, a+3 — выражения, а присваивание или условный оператор — инструкции. +#### 2.6. Функции abs, pow, max, min, sum, divmod, len, map. + +```python +# Функция abs (возвращает модуль числа) +>>> x = abs(-25) +>>> x +25 + +# Функция pow (возведение в степень) +>>> pow(3, 4) +81 +>>> pow(7, 3, 5) # 7**3 = 343, затем 343 % 5 = 3 +3 + +# Функции max и min (поиск максимума и минимума) +>>> max(12, 7, 29) +29 +>>> min(-8, 15, 0) +-8 + +# Функция sum (суммирование элементов) +>>> sum([5, 10, 15]) +30 +>>> sum([5, 10, 15], 5) +35 + +# Функция divmod (возвращает кортеж: целая часть и остаток) +>>> divmod(47, 6) +(7, 5) + +# Функция len (возвращает длину последовательности) +>>> len(['a', 'b', 'c', 'd']) +4 + +# Функция map (применяет функцию к каждому элементу) +>>> a = [2, 4, 6] +>>> b = [1, 3, 5] +>>> result = list(map(lambda x, y: x * y, a, b)) +>>> result +[2, 12, 30] + +``` + +### 3. Функции из стандартного модуля math – совокупность разнообразных математических функций. + +```python +>>>import math +>>>dir(math) +['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', '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(x, /) + Find x!. + + Raise a ValueError if x is negative or non-integral. + +>>>math.factorial(5) +120 +``` + +Аналогичным образом изучим и попробуем применить некоторые другие функции из этого модуля: sin, acos, degrees, radians, exp, log, log10, sqrt, ceil, floor, pi. + +- Функция sin + +```python +>>>help(math.sin) +Help on built-in function sin in module math: +sin(x, /) + Return the sine of x (measured in radians). +>>>math.sin(math.pi / 3) +0.8660254037844386 +``` + +- Функция acos + +```python +>>>help(math.acos) +Help on built-in function acos in module math: +acos(x, /) + Return the arc cosine (measured in radians) of x. + + The result is between 0 and pi. +>>>math.acos(1) +0.0 +``` + +- Функция degrees + +```python +>>>help(math.degrees) +Help on built-in function degrees in module math: +degrees(x, /) + Convert angle x from radians to degrees. +>>>math.degrees(math.pi / 2) +90.0 +``` + +- Функция radians + +```python +>>>help(math.radians) +Help on built-in function radians in module math: + +radians(x, /) + Convert angle x from degrees to radians. +>>>math.radians(360) +6.283185307179586 +>>>math.radians(157) +2.7401669256310974 +``` + +- Функция exp + +```python +>>>help(math.exp) +Help on built-in function exp in module math: +exp(x, /) + Return e raised to the power of x. +>>>math.exp(3) +20.085536923187668 +>>>math.exp(5) +148.4131591025766 +``` + +- Функция log + +```python +>>>help(math.log) +Help on built-in function log in module math: + +log(...) + log(x, [base=math.e]) + Return the logarithm of x to the given base. + + If the base not specified, returns the natural logarithm (base e) of x. +>>>math.log(10) +2.302585092994046 +>>>math.log(math.e) +1.0 +``` + +- Функция log10 + +```python +>>>help(math.log10) +Help on built-in function log10 in module math: + +log10(x, /) + Return the base 10 logarithm of x. +>>>math.log10(10) +1.0 +>>>math.log10(100) +2.0 +>>>math.log10(105) +>>>2.0211892990699383 +``` + +- Функция sqrt + +```python +>>>help(math.sqrt) +Help on built-in function sqrt in module math: + +sqrt(x, /) + Return the square root of x. +>>>math.sqrt(16) +4.0 +>>>math.sqrt(25) +5.0 +``` + +- Функция ceil(округление в большую сторону) + +```python +help(math.ceil) +Help on built-in function ceil in module math: + +ceil(x, /) + Return the ceiling of x as an Integral. + + This is the smallest integer >= x. + +>>>math.ceil(4.56) +5 +>>>math.ceil(130.1) +131 +``` + +- Функция floor(округление в меньшую сторону) + +```python +>>>help(math.floor) +Help on built-in function floor in module math: + +floor(x, /) + Return the floor of x as an Integral. + + This is the largest integer <= x. + +>>>math.floor(99.999) +99 +``` + +- Функция pi + +```python +>>>math.pi +3.141592653589793 +``` + +### 4. Функции из модуля cmath – совокупность функций для работы с комплексными числами. + +```python +>>>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 - равномерно распределенное случайное число; +uniform- равномерно распределенное случайное число в диапазоне, заданном двумя аргументами; +randint - случайные целые числа в диапазоне от значения первого аргумента до значения второго; gauss - нормально распределенное случайное число с средним равным первому аргументу и стандартным отклонением равным второму аргументу; choice - случайный выбор из совокупности указанной в аргументе; shuffle - случайная перестановка элементов списка в аргументе; sample - случайный выбор подмножества элементов из списка в первом аргументе (количество элементов равно числу, указанному во втором аргументе); betavariate - случайное число с бета-распределением, где альфа равна первому аргументу, а бета равна второму аргументу; gammavariate - случайное число с гамма-распределением, где альфа равна первому аргументу, а бета равна второму аргументу. + +```python +>>>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.seed() инициализирует начальное состояние генератора псевдослучайных чисел. + +- Функци random(равномерно распределенное случайное число от 0 до 1) + +```python +>>>random.random() +0.15224090837130377 +>>>random.random() +0.8451183120672832 +>>>random.random() +0.8392090272295469 +``` + +- Функция uniform (равномерно распределенное случайное число) + +```python +>>>random.uniform(1, 5) +1.4822447721210175 +>>>random.uniform(1, 500) +11.101749613668387 +``` + +- Функция gauss(нормально распределенное случайное число) + +```python +>>>random.gauss(1, 5) +5.705708773458442 +>>>random.gauss(12, 57) +-14.33510203993609 +``` + +- Функция randint(случайные целые числа) + +```python +>>>random.randint(3, 19) +4 +>>>random.randint(3, 19) +5 +``` + +- Функция choice (случайный выбор из совокупности) + +```python +>>>random.choice([True, "ababba", 35, 90.3, 3+5j]) +90.3 +>>>random.choice([True, "ababba", 35, 90.3, 3+5j]) +(3+5j) +``` + +- Функця shuffle (случайная перестановка элементов списка) + +```python +>>>lst = [True, "ababba", 35, 90.3, 3+5j] +>>>random.shuffle(lst) +>>>lst +[35, 'ababba', 90.3, (3+5j), True] +``` + +- Функция sample (случайный выбор подмножества элементов) + +```python +>>>random.sample(lst, 5) +['ababba', 90.3, True, (3+5j), 35] +>>>random.sample(lst, 1) +['ababba'] +``` + +- Функция betavariate(случайное число с бета-распределением) + +```python +>>>random.betavariate(1, 2) +0.3174347054415454 +>>>random.betavariate(1, 2) +0.17833765040946833 +``` + +- Функция gammavariate(случайное число с гамма-распределением) + +```python +>>>random.gammavariate(2, 5) +18.174658510394487 +>>>random.gammavariate(2, 5) +29.01757536081825 +``` + +- Создание списка с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений. + +```python +>>>ls_r = [0] * 4 +>>>ls_r[0] = random.uniform(0, 5) +>>>ls_r[1] = random.gauss(0, 2) +>>>ls_r[2] = random.betavariate(1, 3) +>>>ls_r[3] = random.gammavariate(3, 2) +>>>ls_r +[3.940448252721481, -0.9946853417283795, 0.04299068887668711, 8.97265061419367] +``` + +### 6. Функции из модуля time – работа с календарем и со временем. + +- UNIX время и текущее время + time - возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г; gmtime - возвращает объект класса struct_time, содержащий полную информацию о текущем времени (UTC): год (tm_year), месяц (tm_mon), день tm_mday)...; localtime - для получения «местного» времени (которое стоит на компьютере); asctime - преобразовывает представление времени из кортежа в строку (просто отображает время в формате строки); ctime - преобразовывает время в секундах, прошедшего с начала эпохи, в строку; sleep - прерывает работу программы на заданное время в секундах; mktime - преобразовает время из типа кортежа или struct_time в число секунд с начала эпохи. +```python +>>>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 +1759739386.6377628 +>>>c2=time.time()-c1 # временной интервал в секундах, со времени ввода предыдущей инструкции +>>>c2 +26.08662247657776 +>>>dat = time.gmtime() # Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC) +>>>dat.tm_mon # получение номера месяца +10 +>>>dat +time.struct_time(tm_year=2025, tm_mon=10, tm_mday=6, tm_hour=8, tm_min=57, tm_sec=30, tm_wday=0, tm_yday=279, tm_isdst=0) +``` + +``` python + +- Текущее время с учетом часового пояса + +```python +>>>mestn = time.localtime() +>>>list(mestn) +[2025, 10, 6, 12, 18, 35, 0, 279, 0] +``` + +- Функция asctime (преобразование представления времени из кортежа в строку) + +```python +>>>time.asctime(mestn) + +'Mon Oct 6 12:18:35 2025' +``` + +- Функция ctime (преобразование времени в секундах, прошедшего с начала эпохи, в строку) + +```python +>>>time.ctime() + +'Mon Oct 6 12:22:01 2025' +``` + +- Функция sleep (прерывание работы программы на заданное время) + +```python +>>>time.sleep(5) +``` + +- Функция mktime (преобразование времени из типа кортежа или struct_time в число секунд с начала эпохи) + +```python +>>>time.mktime(mestn) + +1759742315.0 +``` + +- Обратное преобразование из секунд в местное время + +```python +>>>time.localtime(c1) + +time.struct_time(tm_year=2025, tm_mon=10, tm_mday=6, tm_hour=11, tm_min=29, tm_sec=46, tm_wday=0, tm_yday=279, tm_isdst=0) +``` + +### 7. Графические функции + +Импортируем модули mathplotlib и pylab для построения графика. + +-Создание и отображение графика x(t): + +``` python +>>>import matplotlib +>>>import pylab + +>>>x=list(range(-3,55,4)) +>>> t=list(range(15)) +>>> pylab.plot(t,x) +[] +>>> pylab.title('Первый график') +Text(0.5, 1.0, 'Первый график') +>>> pylab.xlabel('время') +Text(0.5, 47.04444444444444, 'время') +>>> pylab.ylabel('сигнал') +Text(93.94444444444443, 0.5, 'сигнал') +>>> pylab.show() +``` +![[Figure1.png]] + +- Рассмотрим способ построения нескольких графиков на одном рисунке. + +``` python +>>> import matplotlib +>>> import pylab +>>> X1 = [12, 6, 8, 10, 7] +>>> X2 = [5, 7, 9, 11, 13] +>>> pylab.plot(X1) +[] +>>> pylab.plot(X2) +[] +>>> pylab.show() +``` +![[Figure2.png]] +- Теперь изучим возможность построения круговой диаграммы. + +```python +>>>region=['Центр','Урал','Сибирь','Юг'] +>>> naselen=[65,12,23,17] +>>> pylab.pie(naselen,labels=region) +([, , , ], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')]) +>>> pylab.show() +``` +![[Figure3.png]] +- Построение гистограммы + +```python +>>>pylab.show() +>>>data = [1, 2, 2, 3, 3, 3, 4, 4, 5] +>>>pylab.hist(data) +(array([1., 0., 2., 0., 0., 3., 0., 2., 0., 1.]), array([1. , 1.4, 1.8, 2.2, 2.6, 3. , 3.4, 3.8, 4.2, 4.6, 5. ]), ) +>>>pylab.title('Простая гистограмма') +Text(0.5, 1.0, 'Простая гистограмма') +>>>pylab.xlabel('Значения') +Text(0.5, 0, 'Значения') +>>>pylab.ylabel('Частота') +Text(0, 0.5, 'Частота') +>>>pylab.show() +``` +![[Figure4.png]] +- Построение столбиковой диаграммы + +```python +>>> import matplotlib +>>> import pylab + +>>> data = [1, 2, 2, 3, 3, 3, 4, 4, 5] + +# Гистограмма +>>> pylab.hist(data, bins=10, edgecolor='black') +>>> pylab.title('Простая гистограмма') +>>> pylab.xlabel('Значения') +>>> pylab.ylabel('Частота') +>>> pylab.grid(axis='y', alpha=0.3) +>>> pylab.show() + +``` +![[Figure5.png]] + +### 8. Статистический модуль statics + +```python +>>>import statistics +>>>data = [10, 20, 30, 40, 50] +>>> statistics.mean(data) +30 +>>> statistics.median(data) +30 +>>> statistics.stdev(data) +15.811388300841896 +>>> statistics.variance(data) +250 +>>> statistics.mode(data) +10 +``` + +### 9. Завершение работы \ No newline at end of file diff --git a/TEMA4/task.md b/TEMA4/task.md new file mode 100644 index 0000000..a93fcac --- /dev/null +++ b/TEMA4/task.md @@ -0,0 +1,47 @@ +# Общее контрольное задание по теме 4 +Подольский Никита, А-01-23 +## Задание +Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия: + +• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления. + +• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами. + +• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. + +• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3. + +• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита. + +• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров. + +## Решение +``` python +>>> import cmath +>>> import random +>>> import time +>>> divmod((round(cmath.phase(0.2 + 0.8j), 2) * 20), 3) +(8.0, 2.6000000000000014) +>>> msc_t = time.localtime() +>>> msc_t +>>> time.struct_time(tm_year=2025, tm_mon=10, tm_mday=24, tm_hour=11, tm_min=21, tm_sec=49, tm_wday=4, tm_yday=297, tm_isdst=0) +>>> nows = str(msc_t.tm_hour) + " " + str(msc_t.tm_min) +>>> nows +'11 21' +>>> liist = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"] +>>> random.sample(liist, 3) +['среда', 'воскресенье', 'четверг'] +>>> random.choice(range(14, 33, 3)) +29 +>>> N = round(random.gauss(15,4)) +>>> N +19 +>>>spis = list('qawsedrftgyhujikol') +>>> spis = list('qawsedrftgyhujikolp') +>>> random.sample(spis, N) +['i', 't', 'h', 'q', 'j', 's', 'f', 'k', 'u', 'a', 'g', 'l', 'p', 'o', 'd', 'w', 'y', 'r', 'e'] +>>> (time.mktime(time.localtime()) - time.mktime(msc_t)) / 60 +5.533333333333333 + + +``` \ No newline at end of file