#Тема 4 Туровец Евгений ## 2. Стандартные функции. Находятся в модуле builtins, который становится доступным без импорта при запуске среды IDLE. ### 2.1. Функция round – округление числа с заданной точностью. ```py round(123.456,1) 123.5 round(123.456,0) 123.0 type(round(123.456,1)) type(round(123.456,0)) type(123.0) type(123.5) round(123.456) 123 type(123) type(round) ``` ### 2.2. Функция range – создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1. ```py gg=range(76,123,9) #генерирует числа, начиная с 76 и прибавляя 9, пока не достигнет числа, которое больше или равно 123 type(gg) list(gg) [76, 85, 94, 103, 112, 121] range(23) #функция создаст последовательность чисел от 0 до 22 включительно с шагом 1 range(0, 23) ``` ### 2.3. Функция zip – создание общего объекта, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей (zip – застежка-«молния»). Длина результирующего объекта равна длине самого короткого объекта из двух аргументов функции. ```py qq=["Снегура", "Туровец", "Хатюхин", "Шабатов"] list(gg) [76, 85, 94, 103, 112, 121] ff=zip(gg,qq) ff type(ff) #количество элементов-кортежей в объекте определяется размерностью меньшего объекта tuple(ff) ((76, 'Снегура'), (85, 'Туровец'), (94, 'Хатюхин'), (103, 'Шабатов')) ff[1] #непосредственно объект ff, возвращаемый функцией zip, является итератором. У итераторов нет метода __getitem__, который позволяет обращаться к элементам по индексу. Попытка сделать это вызовет ошибку TypeError. Traceback (most recent call last): File "", line 1, in ff[1] TypeError: 'zip' object is not subscriptable c= list(zip(gg, qq)) #для обращения по индексу можно преобразовать в другой тип c[1] (85, 'Туровец') ``` ### 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и пред-ставленного в виде символьной строки. ```py fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156') коэффициент усиления=4 dan -136.0 ``` ### 2.5. Функция exec – чтение и выполнение объекта-аргумента функции. Этот объект должен представ-лять собой строку символов с совокупностью инструкций на языке Python. ```py exec(input('введите инструкции:')) #ввела perem=-123.456;gg=round(abs(perem)+98,3) после инструкции введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3) gg 221.456 ``` ### 2.6. Самостоятельно изучите и попробуйте применить функции abs, pow, max, min, sum, divmod, len, map. ```py abs(-5) 5 ``` ```py len('Длина строки') 12 ``` ```py max(2,3,4) 4 ``` ```py min(2,3,4) 2 ``` ```py pow(2,3) 8 ``` ```py sum(a) 22 ``` ```py numbers = [1, 2, 3, 4, 5] list(map(str, numbers)) ['1', '2', '3', '4', '5'] ``` ```py #divmod() — это встроенная функция, которая принимает два числа и возвращает пару чисел (кортеж), состоящую из результата целочисленного деления (частного) и остатка от деления. divmod(3,7) (0, 3) ``` ## 3. Функции из стандартного модуля math – совокупность разнообразных математических функций. ```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', '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.8011526357338304) #из радиан в значение косинуса 2.500015072176682 math.degrees(180) #из радиан в градусы 10313.240312354817 math.exp(2) #e в степени 2 7.38905609893065 math.log(10) #натуральный логарифм по основанию e 2.302585092994046 math.log(8, 2) #логарифм 8 по основанию 2 3.0 math.log10(10) #логарифм 10 по основанию 10 1.0 math.sqrt(4) 2.0 math.ceil(2.3) #наименьшее целое число, большее или равное 2.3(округление вверх) 3 math.ceil(-2.3) -2 math.floor(2.3) #округление вниз 2 math.floor(-2.3) -3 math.pi 3.141592653589793 ``` ## 4. Функции из модуля 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 – совокупность функций для выполнения операций с псевдослучайными числами и выборками. ```py import random dir(random) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', '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(42) # Фиксируем seed для одинаковых результатов #random() - равномерное распределение [0, 1) random.random() 0.6394267984578837 # uniform(a, b) - равномерное распределение [a, b] random.uniform(5, 15) 5.25010755222667 # randint(a, b) - случайное целое [a, b] random.randint(1, 100) 36 # gauss(mu, sigma) - нормальное распределение random.gauss(0, 1) 0.017593105583573694 # choice(sequence) - случайный выбор a=[1,2,3,4,5,6,7] random.choice(a) 1 # shuffle(sequence) - перемешивание random.shuffle(a) a [4, 2, 3, 1, 5, 7, 6] # sample(population, k) - выборка без повторений random.sample(range(100), 5) [4, 3, 11, 27, 29] # betavariate(alpha, beta) - бета-распределение random.betavariate(2, 5) 0.3918844780644009 # gammavariate(alpha, beta) - гамма-распределение random.gammavariate(2, 1) 2.219353519271194 ``` ## 5.1. Создание списка с 4 случайными значениями ```py random_values = [ # 1. Равномерное распределение [0, 10) random.uniform(0, 10), # 2. Нормальное распределение (mu=50, sigma=10) random.gauss(50, 10), # 3. Бета-распределение (alpha=2, beta=5) random.betavariate(2, 5), # 4. Гамма-распределение (alpha=3, beta=2) random.gammavariate(3, 2) ] random_values [5.892656838759088, 55.47961646339978, 0.5314696353281997, 2.163791803055314] distributions = [ "Равномерное [0, 10)", "Нормальное (μ=50, σ=10)", "Бета (α=2, β=5)", "Гамма (α=3, β=2)" ] list(zip(random_values, distributions)) [(5.892656838759088, 'Равномерное [0, 10)'), (55.47961646339978, 'Нормальное (μ=50, σ=10)'), (0.5314696353281997, 'Бета (α=2, β=5)'), (2.163791803055314, 'Гамма (α=3, β=2)')] ``` ## 6. Функции из модуля 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() #функция time возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г. c1 1758211745.990668 c2=time.time()-c1 #временной интервал в секундах, со времени ввода предыдущей инструкции c2 87.25691390037537 dat=time.gmtime() #получение объекта класса struct_time, содержащего полную информацию о текущем времени. Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC). Московское время MSK опережает UTC на 3 часа dat time.struct_time(tm_year=2025, tm_mon=9, tm_mday=18, tm_hour=16, tm_min=12, tm_sec=46, tm_wday=3, tm_yday=261, tm_isdst=0) dat.tm_mon 9 dat.tm_year 2025 dat.tm_mday 18 dat.tm_hour 16 dat.tm_min 12 dat.tm_sec 46 dat.tm_wday #День недели - четверг (дни недели: 0=понедельник, 1=вторник, 2=среда, 3=четверг, 4=пятница, 5=суббота, 6=воскресенье) 3 dat.tm_yday #День года - 261-й день в году (считая с 1 января = 1) 261 dat.tm_isdst #Летнее время - не действует (0 = зимнее время, 1 = летнее время, -1 = неизвестно) 0 ``` ```py time.localtime() #Получение местного времени time.struct_time(tm_year=2025, tm_mon=9, tm_mday=18, tm_hour=19, tm_min=22, tm_sec=25, tm_wday=3, tm_yday=261, tm_isdst=0) time.asctime() #Получение текущего времени, представление времени из кортежа в строку 'Thu Sep 18 19:26:35 2025' time.ctime() #Преобразование времени в секундах, прошедшего с начала эпохи, в строку 'Thu Sep 18 19:28:56 2025' time.sleep(3) #Прерывание работы программы на заданное время(3 секунды) time_tuple = (2025, 9, 18, 16, 12, 46, 3, 261, 0) time_obj = time.struct_time(time_tuple) time_obj time.struct_time(tm_year=2025, tm_mon=9, tm_mday=18, tm_hour=16, tm_min=12, tm_sec=46, tm_wday=3, tm_yday=261, tm_isdst=0) seconds = time.mktime(time_obj) #Преобразование времени из типа кортежа или struct_time в число секунд с начала эпохи seconds 1758201166.0 back_to_time = time.localtime(seconds) #Обратное преобразование back_to_time time.struct_time(tm_year=2025, tm_mon=9, tm_mday=18, tm_hour=16, tm_min=12, tm_sec=46, tm_wday=3, tm_yday=261, tm_isdst=0) ``` ## 7. Графические функции. ```py 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, 0, 'время') pylab.ylabel('сигнал') Text(0, 0.5, 'сигнал') pylab.show() #Отображение графика на экране ``` ![alt text]({58781A87-6633-474F-A77A-BE36643822E4}.png) ```py X1=[12,6,8,10,7] X2=[5,7,9,11,13] pylab.plot(X1) [] pylab.plot(X2) [] pylab.show() ``` ![alt text]({32B82522-D8D5-43AA-9C7F-4991CE02A603}.png) ```py # Данные для гистограмм и столбчатых диаграмм grades = [85, 92, 78, 65, 90, 85, 88, 72, 95, 81, 85, 90, 78, 85, 92] categories = ['A', 'B', 'C', 'D', 'F'] values = [3, 7, 8, 2, 1] pylab.hist(grades, bins=5, edgecolor='black', alpha=0.7, color='skyblue') (array([1., 1., 3., 5., 5.]), array([65., 71., 77., 83., 89., 95.]), ) pylab.title('Гистограмма распределения оценок') Text(0.5, 1.0, 'Гистограмма распределения оценок') pylab.xlabel('Оценки') Text(0.5, 0, 'Оценки') pylab.ylabel('Частота') Text(0, 0.5, 'Частота') pylab.grid(axis='y', alpha=0.75) pylab.show() ``` ![alt text]({A5B2DC00-DB40-42EF-B410-DAA0781F2422}.png) ```py pylab.bar(categories, values, color=['red', 'orange', 'yellow', 'green', 'blue'], alpha=0.7) pylab.title('Столбчатая диаграмма распределения по категориям') Text(0.5, 1.0, 'Столбчатая диаграмма распределения по категориям') pylab.xlabel('Категории') Text(0.5, 0, 'Категории') pylab.ylabel('Количество') Text(0, 0.5, 'Количество') pylab.grid(axis='y', alpha=0.75) pylab.show() ``` ![alt text]({7D368B80-7126-4808-B3BC-84E476BAECC5}.png) ```py # Данные для статистического анализа data = [23, 45, 67, 34, 89, 56, 72, 41, 58, 64, 39, 51, 47, 62, 55] import statistics mean_value = statistics.mean(data) median_value = statistics.median(data) mode_value = statistics.mode(data) stdev_value = statistics.stdev(data) variance_value = statistics.variance(data) quantiles_value = statistics.quantiles(data, n=4) harmonic_mean_value = statistics.harmonic_mean(data) pylab.hist(data, bins=6, edgecolor='black', alpha=0.7, color='lightgreen', label='Распределение данных') (array([1., 3., 4., 4., 2., 1.]), array([23., 34., 45., 56., 67., 78., 89.]), ) pylab.axvline(mean_value, color='red', linestyle='--', linewidth=2, label=f'Среднее: {mean_value:.2f}') pylab.axvline(median_value, color='blue', linestyle='--', linewidth=2, label=f'Медиана: {median_value}') pylab.axvline(mode_value, color='green', linestyle='--', linewidth=2, label=f'Мода: {mode_value}') pylab.title('Гистограмма данных со статистическими показателями') Text(0.5, 1.0, 'Гистограмма данных со статистическими показателями') pylab.xlabel('Значения') Text(0.5, 0, 'Значения') pylab.ylabel('Частота') Text(0, 0.5, 'Частота') pylab.legend() pylab.grid(alpha=0.3) pylab.show() ``` ![alt text]({30B6F251-3FE2-4A0E-9F0D-99FBE95923B5}.png)