Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

24 KiB

Отчет тема 4

Пункт 2 Стандартные функции (модуль builtins, импортированный по умолчанию)

Пункт 2.1

round() - округление с заданной точностью

>>> 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
>>> type(round(123.456,1))
<class 'float'>
>>> round(123.456,0)
123.0
>>> type(round(123.456,0))
<class 'float'>
>>> round(123.456)
123
>>> type(round(123.456))
<class 'int'>

Если ndigits не указан, функция возвращает округленное целое число. Если указано, то число с плавающей точкой

Пункт 2.2

Функция range создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1.

>>> gg=range(76,123,9)
>>> gg
range(76, 123, 9)
>>> type(gg)
<class 'range'>
>>> list(gg)
[76, 85, 94, 103, 112, 121]

Можно и не задавать шаг

>>> range(23)
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 – создание общего объекта, элементами которого являются кортежи, составленные из эле-ментов двух или более объектов-последовательностей

>>> qq = ['Цветкова', 'Снегура','Зеленкина']
>>> ff=zip(gg,qq)
>>> ff
<zip object at 0x000001903C06A5C0>
>>> tuple(ff)
((76, 'Цветкова'), (85, 'Снегура'), (94, 'Зеленкина'))
>>> ff[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'zip' object is not subscriptable
>>> ff[1]
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    ff[1]
TypeError: 'zip' object is not subscriptable

Объект класса zip неизменяемый.

Пункт 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.

>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
>>> dan
-131.0
>>> fff
5.0

eval() — Это встроенная функция в Python, которая выполняет строку кода как программу. Как работает: 1)Компилирует строку в байт-код 2)Выполняет этот байт-код в заданном контексте

Пункт 2.5. Похожая на eval функция exec – чтение и выполнение объекта-аргумента функции. Этот объ-ект должен представлять собой строку символов с совокупностью инструкций на языке Python.

>>> exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
>>> gg
221.456
Пояснение:
    eval превращает текст в работающий код
    exec может выполнять любой код, но не возвращает значение.
## Пункт 2.6. Самостоятельно изучите и попробуйте применить функции abs, pow, max, min, sum, divmod, len, map. 
```py
Возведение модуля (abs)
```py
>>> abs(-5)
5
>>> abs(5+5j)
7.0710678118654755
>>> abs(4**(-10))
9.5367431640625e-07
>>> abs(-4**10)
1048576
>>> abs(-4**(-10))
9.5367431640625e-07

Возведение степени

>>> pow(5,2)
25
>>> pow(-5,-2)
0.04
>>> pow(5,4,2)
1
>>> pow(5+5j,2)
50j

Максимальное значение

>>> max(2,5.8,7)
7
>>> max([4,0,-7])
4
>>> max({'a': 1, 'b': 2, 'c': 3}) #выбор большего происходит из ключей
'c'
>>> max(["ee", "eee", "eeeeeee"], key = len)
'eeeeeee'
>>> max("b", "B") #сравнивает коды символов в unicode
'b'
>>> max([34,5,6, "e", 5+2j])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'

Видно что с разными типами данных не работает

Минимальное значение

>>> min(2,5.8,7)
2
>>> min(({'a': 1, 'b': 2, 'c': 3})) #по ключу
'a'
>>> min(-7,-6,abs(-8))
-7

Сумма элементов

>>> sum([1,2,3,4])
10
>>> sum([1,2,3,4], -2)
8
>>> sum("bbbb", "аааа")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
>>> sum(5+5j,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not iterable
>>> sum(5+5j,5+5j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not iterable
>>> sum(4.5,5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object is not iterable
>>> sum(4.5,4.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object is not iterable

Возвращение кортежа из целой части и остатка от деления

>>> help(divmod)
Help on built-in function divmod in module builtins:
divmod(x, y, /)
    Return the tuple (x//y, x%y).  Invariant: div*y + mod == x.
>>> divmod(20,3)  
(6, 2)            #20 // 3 = 6 (целая часть)   20 % 3 = 2 (остаток)
>>> divmod(20,-3)
(-7, -1)          20 ÷ (-3) = -6.666... округляем вниз -7    20 % -3 = 1 

Длина объекта

>>> len((1,2,2))
3
>>> len("aaaaaaaaaa")
10
>>> len(["aaaa","ddddddddddd"])
2
>>> len({'a': 1, 'b': 2, 'c': 3})
3
>>> len(12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Применение функции к каждому элементу коллекции

>>> help(map)
Help on class map in module builtins:
class map(object)
 |  map(func, *iterables) --> map object
 |  
 |  Make an iterator that computes the function using arguments from
 |  each of the iterables.  Stops when the shortest iterable is exhausted.

>>> map(int, ["1", "2"])
<map object at 0x000001903C2BB5E0>
>>> list(map(int, ["1", "2"]))
[1, 2]

Останавливается когда самая короткая коллекция заканчивается "Лишние" элементы из более длинных коллекций игнорируются

Пункт 3 Стандартный модуль math

>>> 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

Нахождение синуса

>>> 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/2)
1.0
>>> math.sin(0.96)
0.8191915683009983

Нахождение арккосинуса

>>> math.acos(1)
0.0
>>> math.acos(-1)
3.141592653589793
>>> math.acos(-0.54)
2.1412334361948187
>>> math.acos(5)   #больше 1 нельзя
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

Перевод из радиан в градусы

>>> help(math.degrees)
Help on built-in function degrees in module math:

degrees(x, /)
    Convert angle x from radians to degrees.

>>> math.radians(math.pi)
0.05483113556160755

>>> math.radians(360)
6.283185307179586

>>> math.radians(90)
1.5707963267948966

Число е в степени заданного

>>> help(math.exp)
Help on built-in function exp in module math:
exp(x, /)
    Return e raised to the power of x.
>>> math.exp(0)
1.0
>>> math.exp(1)
2.718281828459045
>>> math.exp(-5)
0.006737946999085467
>>> math.exp(1/2)
1.6487212707001282

Нахождение логарифма

>>> 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(math.e)
1.0
>>> math.log(5)
1.6094379124341003
>>> math.log(25,5)
2.0
>>> math.log(-25,5)           #с отрицательными числами не работает
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.log(25,-5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

Десятичный логарифм

>>> math.log10(10)
1.0
>>> math.log10(0.01)
-2.0

Извлечение квадратного корня

>>> math.sqrt(25)
5.0
>>> math.sqrt(26)
5.0990195135927845
>>> math.sqrt(26.7)
5.167204273105526
>>> math.sqrt(-25)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.sqrt(26.7+7j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be real number, not complex

Округление числа до ближайшего целого вверх

>>> 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(1.2)
2
>>> math.ceil(9.99)
10
>>> math.ceil(-6.2)
-6
>>> math.ceil(-6.9)
-6

Округление вниз

>>> math.floor(1.2)
1
>>> math.floor(9.99)
9
>>> math.floor(-6.2)
-7
>>> math.floor(-6.9)
-7
>>> math.floor(-6.9+5j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be real number, not complex

Константа: число пи

>>> math.pi
3.141592653589793

комбинированное использование

>>> math.sin(2 * math.pi / 7 + math.exp(0.23))
0.8334902641414562

Пункт 4 Модуль 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 Модуль random для генерации псевдослучайных чисел и работы с ними

>>> 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()
>>> help(random.random)
Help on built-in function random:

random() method of random.Random instance
    random() -> x in the interval [0, 1).

Случайное число от 0 до 1

>>> random.random()
0.23002075073724337
>>> random.random()
0.535712008113208
>>> random.random()
0.4738049347613569
>>> help(random.uniform)
Help on method uniform in module random:

uniform(a, b) method of random.Random instance
    Get a random number in the range [a, b) or [a, b] depending on rounding.

Равномерно распределенное случайное число

>>> random.uniform(20,30)
22.41214721441803

Равномерное случайное целое

>>> help(random.randint)
Help on method randint in module random:

randint(a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.

>>> random.randint(20,30)
21
>>> random.randint(20,30)
27

Случайное из коллекции

>>> help(random.choice)
Help on method choice in module random:

choice(seq) method of random.Random instance
    Choose a random element from a non-empty sequence.

>>> random.choice([ъъъ, "уууууууe", 80, 7, 5+5j])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ъъъ' is not defined
>>> random.choice(["ffff", "уууууууe", 80, 7, 5+5j])
80
>>> random.choice(["ffff", "уууууууe", 80, 7, 5+5j])
(5+5j)

Нормально распределенное случайное число

>>> help(random.gauss)
Help on method gauss in module random:

gauss(mu=0.0, sigma=1.0) method of random.Random instance
    Gaussian distribution.

    mu is the mean, and sigma is the standard deviation.  This is
    slightly faster than the normalvariate() function.

    Not thread-safe without a lock around calls.

>>> random.gauss(0,1)
-0.43812614222540897
>>> random.gauss(7,8)
11.287669776968896

Случайное подмножество

>>> help(random.sample)
Help on method sample in module random:

sample(population, k, *, counts=None) method of random.Random instance
    Chooses k unique random elements from a population sequence.

    Returns a new list containing elements from the population while
    leaving the original population unchanged.  The resulting list is
    in selection order so that all sub-slices will also be valid random
    samples.  This allows raffle winners (the sample) to be partitioned
    into grand prize and second place winners (the subslices).

    Members of the population need not be hashable or unique.  If the
    population contains repeats, then each occurrence is a possible
    selection in the sample.

    Repeated elements can be specified one at a time or with the optional
    counts parameter.  For example:

        sample(['red', 'blue'], counts=[4, 2], k=5)

    is equivalent to:

        sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)

    To choose a sample from a range of integers, use range() for the
    population argument.  This is especially fast and space efficient
    for sampling from a large population:

        sample(range(10000000), 60)

>>> lst=('a','b','c')
>>> random.sample(lst, 2)
['a', 'c']
>>> random.sample(lst, 0)
[]
>>> random.sample(list, 7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\random.py", line 439, in sample
    raise TypeError("Population must be a sequence.  "
TypeError: Population must be a sequence.  For dicts or sets, use sorted(d).

Случайное число, подчиняющееся бета-распределению

>>> help(random.betavariate)
Help on method betavariate in module random:

betavariate(alpha, beta) method of random.Random instance
    Beta distribution.

    Conditions on the parameters are alpha > 0 and beta > 0.
    Returned values range between 0 and 1.

>>> random.betavariate(3,4)
0.4104754948305531
>>> random.betavariate(3,4)
0.4104754948305531

Случайное число, подчиняющееся гамма-распределению

>>> help(random.gammavariate)
Help on method gammavariate in module random:

gammavariate(alpha, beta) method of random.Random instance
    Gamma distribution.  Not the gamma function!

    Conditions on the parameters are alpha > 0 and beta > 0.

    The probability distribution function is:

                x ** (alpha - 1) * math.exp(-x / beta)
      pdf(x) =  --------------------------------------
                  math.gamma(alpha) * beta ** alpha

>>> random.gammavariate(3,4)
18.75253913135498

Список из четырех чисел с разными законами распределения:

>>> rd=[random.uniform(3,4),random.gauss(3,4),random.betavariate(3,4),random.gammavariate(3,4)]
>>> rd
[3.9065412706472173, 5.093585831129117, 0.423027969366889, 7.115102862880251]

Пункт 6 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']

UNIX-время

>>> c1=time.time()
>>> c1
1760272978.995956
>>> c2=time.time()-c1
>>> c2
12.162038326263428

Текущее время

>>> time.gmtime
<built-in function gmtime>
>>> help(time.gmtime)
Help on built-in function gmtime in module time:

gmtime(...)
    gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,
                           tm_sec, tm_wday, tm_yday, tm_isdst)

    Convert seconds since the Epoch to a time tuple expressing UTC (a.k.a.
    GMT).  When 'seconds' is not passed in, convert the current time instead.

    If the platform supports the tm_gmtoff and tm_zone, they are available as
    attributes only.

>>> dat=time.gmtime()
>>> list(dat)
[2025, 10, 12, 12, 44, 15, 6, 285, 0]
>>> dat.tm_year
2025
>>> dat.tm_yday
285
>>> dat.tm_isdst #Показывает, действует ли летнее время (0 - нет, 1 - да, -1 - нет данных)
0

Текущее время с учетом часового пояса

>>> here = time.localtime()
>>> here
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=15, tm_min=44, tm_sec=59, tm_wday=6, tm_yday=285, tm_isdst=0)

Время из кортежа в строку

>>> time.asctime(here)
'Sun Oct 12 15:44:59 2025'

Время из секунд в строку

>>> time.ctime()
'Sun Oct 12 15:46:30 2025'

Пауза

>>> time.sleep(5)

Из кортежа в секунды с начала эпохи

>>> time.mktime(here)
1760273099.0

Пункт 7 Графические функции модуля pylab пакета matplotlib

>>> import matplotlib
>>> import pylab

>>> x=list(range(-3,55,4))
>>> t=list(range(15))

>>> pylab.plot(t,x)  #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x00000158D9921670>]

>>> pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')

>>> pylab.xlabel('время')
Text(0.5, 0, 'время')
>>> pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')

>>> pylab.show()

Два графика на одном окне

>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x000001905007A090>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000019050064D90>]
>>> pylab.show()

Круговая диаграмма:

>>> region=['Центр','Урал','Сибирь','Юг']
>>> naselen=[65,12,23,17]
>>> pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x00000158DBCC8820>, <matplotlib.patches.Wedge object at 0x00000158DBCC8760>, <matplotlib.patches.Wedge object at 0x00000158DBCC8FD0>, <matplotlib.patches.Wedge object at 0x00000158DBCDE490>], [Text(-0.1910130855889933, 1.083288512416601, 'Центр'), Text(-0.8613283319035216, -0.6841882085072037, 'Урал'), Text(0.04429273729355889, -1.0991078898011077, 'Сибирь'), Text(0.9873752043868569, -0.4848610169543564, 'Юг')])
>>> pylab.show()

Гистограмма:

>>> region=['Центр','Урал','Сибирь','Юг']  #Метки для диаграммы
>>> naselen=[65,12,23,17]  # Значения для диаграммы
>>> pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x000001904BFBD350>, <matplotlib.patches.Wedge object at 0x000001904F822550>, <matplotlib.patches.Wedge object at 0x000001904F83E5D0>, <matplotlib.patches.Wedge object at 0x000001904F83FC50>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show()  #Отображение диаграммы

Столбиковая диаграмма:

>>> a=['cat','dog','frog']
>>> v=[10,55,100]
>>> pylab.bar(a,v,color='purple')
<BarContainer object of 3 artists>
>>> pylab.show()

Пункт 8

Статистический модуль 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', '_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']

Математическое ожидание

>>> data = [0,11,8,5]
>>> statistics.mean(data)
6

Медиана

>>> statistics.median(data)
6.5

Среднеквадратичное отклонение

>>> statistics.stdev(data)
4.69041575982343

Дисперсия

>>> statistics.variance(data)
22

Квантили

>>> statistics.quantiles(data)
[1.25, 6.5, 10.25]