diff --git a/TEMA4/Ris1.1.png b/TEMA4/Ris1.1.png new file mode 100644 index 0000000..e5e0673 Binary files /dev/null and b/TEMA4/Ris1.1.png differ diff --git a/TEMA4/Ris1.png b/TEMA4/Ris1.png new file mode 100644 index 0000000..f1a2ae4 Binary files /dev/null and b/TEMA4/Ris1.png differ diff --git a/TEMA4/Ris2.png b/TEMA4/Ris2.png new file mode 100644 index 0000000..482e3d9 Binary files /dev/null and b/TEMA4/Ris2.png differ diff --git a/TEMA4/Ris3.png b/TEMA4/Ris3.png new file mode 100644 index 0000000..3f37912 Binary files /dev/null and b/TEMA4/Ris3.png differ diff --git a/TEMA4/Ris4.png b/TEMA4/Ris4.png new file mode 100644 index 0000000..fc0aa40 Binary files /dev/null and b/TEMA4/Ris4.png differ diff --git a/TEMA4/report.md b/TEMA4/report.md new file mode 100644 index 0000000..b154e64 --- /dev/null +++ b/TEMA4/report.md @@ -0,0 +1,394 @@ +# Отчет по теме 4 + +Голощапов Дмитрий, А-01-23 + +# 1 Подготовка к началу работы + +Запуск оболочки IDLE и установка рабочего каталога + + >>>import os + >>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA4') + +# 2 Изучение стандартных встроенных функций + +# 2.1 Изучение функции округления + +Была применена функция round с одним и двумя аргументами и изучены различия между указанием одного и двух аргументов. + + >>>round(123.456,1) + 123.5 + >>>round(123.456,0) + 123.0 + >>>type(round(123.456,1)) + + >>>type(round(123.456,0)) #В результате получаются числа класса float, так как указано сколько цифр после запятой нужно оставить. Два вышеупомянутых варианта отличаются именно количесивом цифр, оставленных после запятой при округлении. + + >>>round(123.456) + 123 + >>>type(round(123.456)) #В данном случае получается число типа int, так как не указано количество цифр после запятой, и по умолчанию число округляется до целого. + + +# 2.2 Изучение функции создания последовательности + +Была применена функция range с тремя и с одним аргументо и изучена разница между этими способами применения функции. + + >>>gg=range(76,123,9) + >>> type(gg) + + >>>list(gg) + [76, 85, 94, 103, 112, 121] + >>>range(23) #При указывание одного аргумента строится последовательность от 0 до указанного числа не включительно, с шагом 1. + 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 и произведена попытка обращения к элементу созданной последовательности по индексу. + + >>> qq=["Goloshchapov", "Filipov", "Xodyuck", "Ivanov"] + >>> ff=zip(gg,qq) + >>> tuple(ff) #В итоге получится последовательность из 4 элементов, так как в qq 4 элемента, а в gg 6. Длина равна длине самого короткого списка. + ((76, 'Goloshchapov'), (85, 'Filipov'), (94, 'Xodyuck'), (103, 'Ivanov')) + >>> ff[1] #Исходя из текста ошибки, можно сказать, что zip обьекты не поддерживают доступ по индексу. + Traceback (most recent call last): + File "", line 1, in + ff[1] + TypeError: 'zip' object is not subscriptable + +# 2.4 Изучение функции eval + +Была применена функция eval. + + >>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156') + коэффициент усиления=5 + >>> fff + 5.0 + >>> dan + -131.0 + +# 2.5 Изучение функции exec + +Была применена функция exec. + + >>> exec(input('введите инструкции:')) + введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3) + >>> gg + 221.456 + +# 2.6 Изучение ряда полезных функций (abs, pow, max, min, sum, divmod, len, map) + +Был изучен и применен ряд полезных функций: + +abs - выдает значение по модулю; +len - выдает длину обьекта; +max - выдает максимальное число из списка введенных в аргумент; +min - выдает минимальное число из списка введенных в аргумент; +pow - при двух аргументах: возводит первый в степень второго, при наличие третьего аргумента делит получившийся результат на третий аргумент и показывает остаток; +sum - суммирует числа; +divmod - возвращает кортеж (a // b, a % b), где а и b соответственно первый и второй аргумент; +map - применяет функцию из первого аргумента к каждому элементу итерируемого обьекта, который указан во втором аргументе. + + >>>abs(-5) + 5 + >>>len("hi") + 2 + >>>max(3, 4) + 4 + >>>min(3, 4) + 3 + >>>pow(3, 2) + 9 + >>>pow(3, 2, 3) + 0 + >>>sum([2, 3]) + 5 + >>>divmod(7, 2) + (3, 1) + >>>list(map(lambda x: x*2, [1, 2, 3, 4])) + [2, 4, 6, 8] + +# 3 Изучение функций из модуля math для работы с математическими выражениями и операциями. + +Был импортирован и изучен модуль math. Были изучены и применены некоторые функции из модуля math. + +sin - считает и выдает синус аргумента в радианах; +acos - считает и выдает арккосинус аргумента в радианах; +degrees - переводит число в радианах в градусы; +radians - переводит число в градусах в радианы; +exp - выдает значение числа e возведенного в степень, которая указана в аргументе; +log - считает натуральный логарифм числа; +log10 - считает делятичный логарифм числа; +sqrt - считает корень из числа в аргументе; +ceil - округляет число вверх; +floor - округляет число вниз; +pi - данная функция является представлением числа пи в питоне. + + >>>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', 'fma', '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', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp'] + >>>help(math.factorial) + Help on built-in function factorial in module math: + + factorial(n, /) + Find n!. + + >>>math.factorial(5) + 120 + >>>math.sin(180) + -0.8011526357338304 + >>>math.acos(0.5) + 1.0471975511965979 + >>>help(math.degrees) + Help on built-in function degrees in module math: + + degrees(x, /) + Convert angle x from radians to degrees. + + >>>math.degrees(0.5) + 28.64788975654116 + >>>math.radians(28) + 0.4886921905584123 + >>>math.exp(1) + 2.718281828459045 + >>>math.log(1) + 0.0 + >>>math.log10(1) + 0.0 + >>>math.sqrt(9) + 3.0 + >>>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.7) + 5 + >>>math.floor(4.7) + 4 + >>>math.pi + 3.141592653589793 + >>>math.sin(2*math.pi/7+math.exp(0.23)) + 0.8334902641414562 + +# 4 Изучение модуля cmath для работы с комплексными числами + +Был импортирован и изучен модуль cmath и применены функции для извлечения корня и расчета фазы комплексного числа. + + >>>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 Изучения стандартного модуля randon для работы с псевдослучайными числами + +Были самостоятельно изучены и применены методы модуля random: + +random - равномерно распределенное случайное число; +uniform- равномерно распределенное случайное число в диапазоне, заданном двумя аргументами; +randint - случайные целые числа в диапазоне от значения первого аргумента до значения второго; +gauss - нормально распределенное случайное число с средним равным первому аргументу и стандартным отклонением равным второму аргументу; +choice - случайный выбор из совокупности указанной в аргументе; +shuffle - случайная перестановка элементов списка в аргументе; +sample - случайный выбор подмножества элементов из списка в первом аргументе (количество элементов равно числу, указанному во втором аргументе); +betavariate - случайное число с бета-распределением, где альфа равна первому аргументу, а бета равна второму аргументу; +gammavariate - случайное число с гамма-распределением, где альфа равна первому аргументу, а бета равна второму аргументу. + +Также был самостоятельно создан список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений. + + >>>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() + >>> r = random.random() + >>> r + 0.566968813410544 + >>> u = random.uniform(1, 10) + >>> u + 8.395257535596317 + >>> rnd = random.randint(1, 10) + >>> rnd + 1 + >>> g = random.gauss(0, 1) + >>> g + 0.7923172140812969 + >>> l = ["a", "b", "c"] + >>> ch = random.choice(l) + >>> ch + 'b' + >>> random.shuffle(l) + >>> l + ['b', 'c', 'a'] + >>> s = random.sample(l, 2) + >>> s + ['c', 'b'] + >>> b = random.betavariate(2, 5) + >>> b + 0.30401704168811955 + >>> g = random.gammavariate(2, 2) + >>> g + 4.631853628453073 + >>> random_list = [random.uniform(1, 10), random.gauss(5, 2), random.betavariate(2, 5), random.gammavariate(2, 2)] + >>> random_list + [3.2315627374553832, 4.74773932227122, 0.25797354673276174, 2.476042709934176] + +# 6 Изучение модуля time для работы со временем и календарями + +Были изучены и применены методы из модуля time: + +time - возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г; +gmtime - возвращает объект класса struct_time, содержащий полную информацию о текущем времени (UTC): год (tm_year), месяц (tm_mon), день tm_mday)...; +localtime - для получения «местного» времени (которое стоит на компьютере); +asctime - преобразовывает представление времени из кортежа в строку (просто отображает время в формате строки); +ctime - преобразовывает время в секундах, прошедшего с начала эпохи, в строку; +sleep - прерывает работу программы на заданное время в секундах; +mktime - преобразовает время из типа кортежа или struct_time в число секунд с начала эпохи. + + >>> 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 + 1759240944.8244405 + >>> c2=time.time()-c1 + >>> c2 + 19.052595853805542 + >>> dat=time.gmtime() + >>> dat + time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=14, tm_min=3, tm_sec=22, tm_wday=1, tm_yday=273, tm_isdst=0) + >>> dat.tm_mon + 9 + >>> dat.tm_hour + 14 + >>> tim=time.localtime() + >>> tim + time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=5, tm_sec=35, tm_wday=1, tm_yday=273, tm_isdst=0) + >>> time.asctime() + 'Tue Sep 30 17:06:29 2025' + >>> time.ctime() + 'Tue Sep 30 17:06:47 2025' + >>> time.sleep(2) #Две секунды в IDLE не появлялось приглашение для ввода команды. + >>> time.mktime(tim) + 1759241135.0 + >>> time.localtime(c1) + time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=2, tm_sec=24, tm_wday=1, tm_yday=273, tm_isdst=0) + +# 7 Изучение графических функций + +Был создан линейный график, на котором изображена зависимость сигналов от времени. + + >>> import pylab + >>> x=list(range(-3,55,4)) + >>> t=list(range(15)) + >>> x;t + [-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53] + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + >>> pylab.plot(t,x) + [] + >>> pylab.title('Первый график') + Text(0.5, 1.0, 'Первый график') + >>> pylab.xlabel('время') + Text(0.5, 0, 'время') + >>> pylab.ylabel('сигнал') + Text(0, 0.5, 'сигнал') + >>> pylab.show() + +![](Ris1.png) + +Далее были созданы два линейных графика на одном поле. (По оси y - значения из списка, по оси х - порядковый номер значений). + + >>> X1=[12,6,8,10,7] + >>> X2=[5,7,9,11,13] + >>> pylab.plot(X1) + [] + >>> pylab.plot(X2) + [] + >>> pylab.show() + +![](Ris1.1.png) + +Также была создана круговая диаграмма. + + >>> 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() + +![](Ris2.png) + +Самостоятельно была создана гистограмма (по оси у - частота повторения значений, по оси х сами значения) + + >>> data = [1, 2, 3, 3, 2, 3, 3, 3, 2] + >>> pylab.hist(data, bins=3) + (array([1., 3., 5.]), array([1. , 1.66666667, 2.33333333, 3. ]), ) + >>> pylab.title("Гистограмма") + Text(0.5, 1.0, 'Гистограмма') + >>> pylab.show() + +![](Ris3.png) + +Самостоятельно была создана столбиковая диаграмма, где по оси х - категории, а по оси у - значения, относящиеся к каждой категории. + + >>> c = ['A', 'B', 'C', 'D'] + >>> v = [25, 40, 30, 50] + >>> pylab.bar(c, v) + + >>> pylab.title("Столбиковая диаграмма") + Text(0.5, 1.0, 'Столбиковая диаграмма') + >>> pylab.show() + +# 8 Изучение модуля statistics для работы в сфере статистики + +Самостоятельно был импортирован и изучен модуль statistics. Из него были использованы функции подсчета среднего значения, медианы и моды для выборки в списке. + + >>> 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', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtupl e', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance'] + >>> data = [1, 2, 2, 3, 4, 5, 5, 5, 6] + >>> mean = statistics.mean(data) + >>> mean + 3.6666666666666665 + >>> median = statistics.median(data) + >>> median + 4 + >>> mode = statistics.mode(data) + >>> mode + 5 + +# 9 Завершение работы в IDLE + +Был завершен сеанс в среде IDLE. + + + + + + + + diff --git a/TEMA4/report.txt b/TEMA4/report.txt new file mode 100644 index 0000000..e69de29 diff --git a/TEMA4/task.md b/TEMA4/task.md new file mode 100644 index 0000000..83f0662 --- /dev/null +++ b/TEMA4/task.md @@ -0,0 +1,57 @@ +# Общее контрольное задание по теме 4 + +Голощапов Дмитрий, А-01-23 + +# Задание + +Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия: + +• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления. + +• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами. + +• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. + +• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3. + +• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита. + +• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров. + +# Решение + + >>> divmod((round(cmath.phase(0.2+0.8j), 2))*20, 3) + (8.0, 2.6000000000000014) + >>> divmod(math.floor((round(cmath.phase(0.2+0.8j), 2))*20), 3) #Для получения остатка в целом виде и делении целых чисел, можно использовать такое выражение. + (8, 2) + + >>> v = time.localtime() + >>> v + time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=18, tm_min=48, tm_sec=25, tm_wday=1, tm_yday=273, tm_isdst=0) + >>> st = v.tm_hour, v.tm_min + >>> st + (18, 48) + >>> st = str(v.tm_hour)+" hour "+str(v.tm_min)+" min " + >>> st + '18 hour 48 min ' + + >>> ned = ["пн", "вт", "ср", "чт", "пт", "сб", "вскр"] + >>> random.sample(ned, 3) + ['чт', 'сб', 'пт'] + + >>> random.choice(list(range(14, 33, 3))) + 26 + + >>> N = round(random.gauss(15, 4)) + >>> N + 12 + >>> import string #Импортировали модуль в котором есть латинский алфавит, чтобы из него выбрать буквы. Без использования этого модуля создавать список с алфавитом нужно было бы вручную. + >>> random.sample(string.ascii_letters, N) + ['q', 'F', 'z', 'E', 'd', 'C', 'k', 'N', 'e', 'n', 'm', 'V'] + + >>> time.localtime().tm_min - v.tm_min + 21 + + + + diff --git a/TEMA4/task.txt b/TEMA4/task.txt new file mode 100644 index 0000000..e69de29