diff --git a/TEMA4/report.md b/TEMA4/report.md new file mode 100644 index 0000000..e44c3eb --- /dev/null +++ b/TEMA4/report.md @@ -0,0 +1,272 @@ +# Отчет по теме 4 + +Криви Анастасия, А-02-23 + +## 1 Запуск IDLE +Встроенные функции – это готовые к использованию функции, реализующие различные полезные операции, необходимость в которых часто возникает при решении прикладных задач. Часть из них имеется в виде стандартных функций – то есть они не требуют дополнительных усилий (готовы к употреблению сразу после запуска среды Python и относятся к классу 'builtin_function_or_method'). + +## 2 Стандартные функции +```py +import builtins +dir(builtins) +['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '_IncompleteInputError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip'] +``` +## 2.1 Функция round +Округление числа с заданной точностью. Cправка по назначению этой функции: +```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. +``` +Использование функции на примерах +```py +round(123.456,1) + 123.5 +round(123.456,0) + 123.0 +type(round(123.456,0)) #определение типа + +type(round(123.456,1)) + +round(123.456) + 123 +type(round(123.456)) + +``` +## 2.2 Функция range +Создание последовательности целых чисел с заданным шагом или, по умолчанию, с шагом 1 +```py +gg=range(76,123,9) +gg +range(76, 123, 9) #«итерируемый объект» класса range. Чтобы увидеть получившуюся последовательность чисел, его надо преобразовать, например, в список, обычным способом +list(gg) +[76, 85, 94, 103, 112, 121] +``` +где 76 - левая граница, 123 - правая граница, а 9 - шаг +```py +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] +``` +по умолчанию отсчет от нуля с шагом 1 жо заданного 23(не включительно!) + +## 2.3 Функция zip +Создание общего объекта, элементами которого являются кортежи, составленные из элементов двух или более объектов-последовательностей +(zip – застежка-«молния») + +Длина результирующего объекта равна длине самого короткого объекта из двух аргументов функции! +```py +qq = ['Криви','Заленкина', 'Капитонов', 'Киреев']; type(qq) + +ff=zip(gg,qq) +ff + +tuple(ff) +((76, 'Криви'), (85, 'Заленкина'), (94, 'Капитонов'), (103, 'Киреев')) +ff[1] # нельзя обратиться по индексу + Traceback (most recent call last): + File "", line 1, in + ff[1] + TypeError: 'zip' object is not subscriptable +``` +## 2.4 Функция eval +Вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки +```py +fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156') +коэффициент усиления=1 +dan +-151.0 +type(dan) + +``` +## 2.5 Функция exec +Чтение и выполнение объекта-аргумента функции. Этот объект должен представлять собой строку символов с совокупностью инструкций на языке Python + +```py +exec(input('введите инструкции:')) +введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3) +gg +221.456 +``` +## 2.6 Функции abs, pow, max, min, sum, divmod, len, map +```py +abs(-10) # Модуль числа +10 +pow(2, 2) # Возведение числа в степень +4 +max(1426, 54312, 335, 140) +54312 +min(0, 346, 3531, 1450) +0 +sum([1, 12, 0, 6]) +19 +divmod(10,2) # Кортеж с двумя элементами: результатами целочисленного деления и остатком +(5, 0) +len([261, 25426, 23]) +3 +list(map(abs,[-12038, -231974])) +[12038, 231974] +``` +## 3 Функции из стандартного модуля math. +Cовокупность разнообразных математических функций +```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.log10(1) +0.0 +math.acos(1) +0.0 +math.degrees(100) #из радиан в градусы +5729.5779513082325 +math.radians(1029) #из градусов в радианы +17.959438003021653 +math.log(0.321846) +-1.1336821087105013 +math.sqrt(90) +9.486832980505138 +math.ceil(10.1) #округление вверх +11 +math.floor(10.9) #округление вниз +10 +``` +Вычисление значения функции: +![I](f1.png) +```py +math.sin((2*math.pi)/7 + math.exp(0.23)) +0.8334902641414562 +``` +## 4 Функции из модуля cmath +Cовокупность функций для работы с комплексными числами. + +```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 +Cовокупность функций для выполнения операций с псевдослу-чайными числами и выборками + +```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() #функция, задающая случайное начальное состояние для псевдослучайных чисел +random.random() #равномерно распределенное случайное число +0.07336031762583761 +random.uniform(1,2) #равномерно распределенное случайное число +1.137488979303296 +random.randint(1,10) #случайное целое число +9 +random.gauss() #нормально распределенное случайное число +0.014238556699878042 +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([10,104,2,23]) #случайный выбор элемента из совокупности +10 +s = ['12','212','kjd','134nh'] +random.shuffle(s) #перемешивание элементов списка +s +['kjd', '212', '12', '134nh'] +random.sample(s,2) #получение выборки заданной размерности из совокупности +['134nh', '12'] +random.betavariate(1, 232) #cлучайное число с бета-распределением +0.003122288899067793 +random.gammavariate(1, 21) #cлучайное число с гамма-распределением +30.78691787356758 +``` +Создание списка с 4 случайными значениями, подчиняющимися равномерному, нормальному, бета и гамма - рапределениям соответственно + +```py +s=[random.random(), random.gauss(), random.betavariate(1,10), random.gammavariate(1,10)]; s +[0.10166127692065208, -0.9624978096753845, 0.00956693409670233, 3.1161536544662676] +``` +## 6 Функции из модуля time +Работа с календарем и со временем + +```py +c1=time.time() #время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г +c1 +1760880089.5032163 +c2=time.time()-c1 #временной интервал в секундах, со времени ввода предыдущей инструкции +c2 +15.655876636505127 +``` +с помощью этой функции можно измерять временные промежутки в секундах + +Функция, возвращающая объект класса struct_time, содержащий полную информацию о текущем времени: год (tm_year), месяц (tm_mon), день (tm_mday). +```py +dat=time.gmtime() +dat +time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=9, tm_sec=24, tm_wday=6, tm_yday=292, tm_isdst=0) #Эта функция возвращает, так называемое, «Всемирное координированное время» (UTC). Москов-ское время MSK опережает UTC на 3 часа + +dat.tm_mon +10 +dat.tm_hour +14 +dat.tm_year +2025 + +dat=time.localtime(); dat #получение «местного» времени +time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=13, tm_sec=35, tm_wday=6, tm_yday=292, tm_isdst=0) + +l=time.localtime() +time.asctime(l) +'Sun Oct 19 17:20:49 2025' #преобразование представления времени из кортежа в строку +time.ctime() #преобразование времени в секундах, прошедшего с начала эпохи, в строку +'Sun Oct 19 17:15:49 2025' +t=time.asctime();type(t) + +t1=time.ctime(); type(t1) + +time.sleep(3) #прерывание работы программы на заданное время +time.mktime(l) #из кортежа в секунды с начала эпохи +1760883649.0 +time.localtime(c1) #обратное преобразование из секунд в местное время осуществляется той же функцией +time.struct_time(tm_year=2025, tm_mon=10, tm_mday=19, tm_hour=16, tm_min=21, tm_sec=29, tm_wday=6, tm_yday=292, tm_isdst=0) +``` +## 7 Графические функции + +В развернутой версии Python должны быть установлены модули пакета matplotlib, в состав которого входит модуль pylab, содержащий ряд полезных вычислительных функций и графических возможностей. +Импорт модуля инструкции + + diff --git a/TEMA4/ris/f1.png b/TEMA4/ris/f1.png new file mode 100644 index 0000000..2e36163 Binary files /dev/null and b/TEMA4/ris/f1.png differ diff --git a/TEMA4/ris/ris1.png b/TEMA4/ris/ris1.png new file mode 100644 index 0000000..ff312d3 Binary files /dev/null and b/TEMA4/ris/ris1.png differ diff --git a/TEMA4/ris/ris2.png b/TEMA4/ris/ris2.png new file mode 100644 index 0000000..ac856a5 Binary files /dev/null and b/TEMA4/ris/ris2.png differ diff --git a/TEMA4/ris/ris3.png b/TEMA4/ris/ris3.png new file mode 100644 index 0000000..421b3e1 Binary files /dev/null and b/TEMA4/ris/ris3.png differ diff --git a/TEMA4/ris/ris4.png b/TEMA4/ris/ris4.png new file mode 100644 index 0000000..1f09a10 Binary files /dev/null and b/TEMA4/ris/ris4.png differ diff --git a/TEMA4/ris/ris5.png b/TEMA4/ris/ris5.png new file mode 100644 index 0000000..6163e4e Binary files /dev/null and b/TEMA4/ris/ris5.png differ diff --git a/TEMA4/task.md b/TEMA4/task.md new file mode 100644 index 0000000..e2ecb72 --- /dev/null +++ b/TEMA4/task.md @@ -0,0 +1,51 @@ +# Общее контрольное задание по теме 4 +Криви Анастасия А-02-23 + +## Задание +Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия: +1. Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления. +2. Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами. +3. Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. +4. Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3. +5. Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита. +6. Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров. + +## Решение + +1. Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления +```py +import cmath +divmod(round(cmath.phase(0.2+0.8j),2)*20,3) +(8.0, 2.6000000000000014) +``` +2. Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами. +```py +MosTime = time.gmtime() +print("Current time: {}:{}".format(MosTime.tm_hour + 3, MosTime.tm_min)) +Current time: 10:02 +``` +3. Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. +``` +D = ['ПН', 'ВТ', 'СР','ЧТ', 'ПТ', 'СБ', 'ВС'] +random.sample(D,3) +['СБ', 'ПТ', 'ЧТ'] +``` +4. Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3. +```py +random.choice(range(14, 33, 3)) +20 +``` +5. Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита. +```py +N = math.floor(random.gauss(15, 4)); N +15 +l=random.sample(string.ascii_letters, N); l +['P', 'H', 'X', 'B', 's', 'T', 'z', 'N', 'E', 'l', 'I', 'w', 'o', 'u', 'C'] +``` +6.Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров. +```py +t = round(time.time() - time.mktime(localTime)) +t // 60 +6 minutes +``` +