diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index e3232d56..514c2c9d 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -13,3 +13,17 @@ Подсказка: для получения отдельных цифр числа используйте арифм. операции и НЕ ИСПОЛЬЗУЙТЕ операции с массивами """ + +users_input = int(input("Enter you number which contains 3 digits: ")) + +first = users_input // 100 +second = (users_input // 10) % 10 +third = users_input % 10 + + +# print(first) +# print(second) +# print(third) + +print(f"The sum of digits from your number is {first + second + third}") +print(f"The multiplication of digits from your number is {first * second * third}") diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index b14becdd..2c074283 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -1,8 +1,53 @@ """ Задание 2. Выполнить логические побитовые операции "И", "ИЛИ" -и др. над числами 5 и 6. Выполнить -над числом 5 побитовый сдвиг вправо и влево на два знака. +и др. над числами 5 и 6. +Выполнить над числом 5 побитовый сдвиг вправо и влево на два знака. Подсказка: это стандартные операции, которые осуществляются с помощью стандартных операторов. Попробуйте найти каких именно. """ + +num_1 = 5 +print(bin(num_1)) +num_2 = 6 +print(bin(num_2)) + +# Bit operation INVERSE +print('Print result for Inverse operation') +num_1_inv = ~num_1 +num_2_inv = ~num_2 +print(bin(num_1_inv)) +print(bin(num_2_inv)) + +# Bit operation AND +print('Print result for AND operation') +print(num_1 & num_2) +print(bin(num_1 & num_2)) + +# Bit operation XOR +print('Print result for XOR operation') +print(num_1 ^ num_2) +print(bin(num_1 ^ num_2)) + +# Bit operation OR +print('Print result for OR operation') +print(num_1 | num_2) +print(bin(num_1 | num_2)) + +# Bit operation left shift +print('Print result for left shift operation') +print(bin(num_1 << 2)) +print(bin(num_2 << 2)) + +# Bit operation right shift +print('Print result for right shift operation') +print(bin(num_1 >> 2)) +print(bin(num_2 >> 2)) + + +# над числом 5 побитовый сдвиг вправо и влево на два знака +print(num_1 << num_2) +print((num_1 * 2**num_2)) + +print(num_1 >> num_2) +print((num_1) // 2 ** num_2) diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index ab7f1346..cc75d6ef 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -13,3 +13,20 @@ X1_VAL = 2, Y1_VAL = 3, X2_VAL = 4, Y2_VAL = 5 Уравнение прямой, проходящей через эти точки: y = 1.0x + 1.0 """ + +X1_VAL = int(input('Введите значение х1 для точки 1: ')) +Y1_VAL = int(input('Введите значение у1 для точки 1: ')) +X2_VAL = int(input('Введите значение х2 для точки 2: ')) +Y2_VAL = int(input('Введите значение у2 для точки 2: ')) + +while (X2_VAL - X1_VAL) == 0: + print("Получившаяся прамая параллельна оси OY и рассчетами не предусмотрена. Введите координаты точек снова") + X1_VAL = int(input('Введите значение х1 для точки 1: ')) + Y1_VAL = int(input('Введите значение у1 для точки 1: ')) + X2_VAL = int(input('Введите значение х2 для точки 2: ')) + Y2_VAL = int(input('Введите значение у2 для точки 2: ')) +a = (Y2_VAL - Y1_VAL) / (X2_VAL - X1_VAL) +b = Y2_VAL - a * X2_VAL +print(f"Угловой коэффициент a равен: {a}") +print(f"Коэффициент b равен: {b}") +print(f"Уравнение прямой выглядит: y = {a}x + {b}") diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" index 05c98422..d5475759 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" @@ -14,3 +14,18 @@ Функцию random() использовать можно Опирайтесь на пример к уроку """ +import random +import string as list_symbols + + +start = int(input('Введите первое число: ')) +stop = int(input('Введите второе число: ')) +step = random.randrange(start, stop, 5) +symbols_list = list(list_symbols.printable) + + +integer = random.randrange(start, stop, step) +float_number = random.randrange(start, stop, step) / step +print(f'Случайное целое число: {integer}') +print(f'Случайное вещественное число: {float_number}') +print(f'Случайное символ: {symbols_list[integer+9]}') diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" index d4db92c5..32a2d2cc 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" @@ -10,3 +10,17 @@ В обоих случаях программа должна вывести корректный результат. В обоих случаях он 24, но никак не -24 """ + +letter_1 = input('Enter the first letter: ') +letter_2 = input('Enter the second letter: ') + +num_let_1 = ord(letter_1) +num_let_2 = ord(letter_2) + +print(num_let_1) +print(num_let_2) + +if num_let_1 < num_let_2: + print(f'Между введенными буквами {letter_1} и {letter_2} находится {num_let_2 - num_let_1 - 1} букв') +else: + print(f'Между введенными буквами {letter_1} и {letter_2} находится {num_let_1 - num_let_2 - 1} букв') diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" index e5380773..21e28ac7 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" @@ -8,3 +8,8 @@ Подсказка: используйте ф-ции chr() и ord() """ + + +letter_number = int(input('Enter number of letter: ')) +x = (chr(letter_number)) +print(x) diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" index ab1fcee8..3a19e0cc 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" @@ -4,3 +4,22 @@ составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним, равнобедренным или равносторонним. """ + +length_1 = int(input('Enter the length for an side of triangle 1: ')) +length_2 = int(input('Enter the length for an side of triangle 2: ')) +length_3 = int(input('Enter the length for an side of triangle 3: ')) + +if length_1 == length_2 or length_1 == length_3 or length_2 == length_3: + if length_1 == 0 or length_2 == 0 or length_3 == 0: + print('Looks like you entered a zero value for one of the side of the triangle') + else: + print('The triangle is isosceles triangle') +elif length_1 == length_2 == length_3: + print('The triangle is equilateral triangle') +elif length_1 != length_2 != length_3: + if length_1 == 0 or length_2 == 0 or length_3 == 0: + print( + 'Looks like you entered a zero value for one of the ' + 'side of the triangle OR you missed to enter on of the side') + else: + print('The triangle is versatile triangle') diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" index 75a42e17..b265725b 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" @@ -16,3 +16,10 @@ Он просто позволяет протестировать условие в одной строке, заменяя многострочное if-else, делая код компактным. """ + +year = int(input('Enter a number of year to determine is it a leap year or not: ')) + +if year % 4 == 0 or (year % 100 != 0 and year % 400 == 0): + print("leap year") +else: + print("usual year") diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" index 59898c6f..ced33792 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" @@ -4,3 +4,38 @@ Подсказка: можно добавить проверку, что введены равные числа """ + +int_1 = int(input('Enter first number: ')) +int_2 = int(input('Enter second number: ')) +int_3 = int(input('Enter third number: ')) + +if int_1 > int_2: + if int_2 > int_3: + print(f'Average number is {int_2} marker 1') + else: + print(f'Average number is {int_1} marker 2') +elif int_2 > int_1: + if int_1 > int_3: + print(f'Average number is {int_1} marker 3') + else: + print(f'Average number is {int_2} marker 4') +elif int_3 > int_1: + if int_1 > int_2: + print(f'Average number is {int_1} marker 5') + else: + print(f'Average number is {int_2} marker 6') +elif int_3 > int_2: + if int_2 > int_1: + print(f'Average number is {int_2} marker 7') + else: + print(f'Average number is {int_1} marker 8') +elif int_2 > int_3: + if int_3 > int_1: + print(f'Average number is {int_3} marker 9') + else: + print(f'Average number is {int_1} marker 10') + +# NOT COMPLETED TASK + + + diff --git "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/\320\237\321\200\320\270\320\274\320\265\321\207\320\260\320\275\320\270\320\265.txt" "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/\320\237\321\200\320\270\320\274\320\265\321\207\320\260\320\275\320\270\320\265.txt" index b0738925..b3285b5f 100644 --- "a/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/\320\237\321\200\320\270\320\274\320\265\321\207\320\260\320\275\320\270\320\265.txt" +++ "b/\320\243\321\200\320\276\320\272 1. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/\320\237\321\200\320\270\320\274\320\265\321\207\320\260\320\275\320\270\320\265.txt" @@ -1,4 +1,4 @@ - : -1. ( 2 ). -2. . 1. 3, . -3. , . +Ïðèìå÷àíèÿ êî âñåì çàäà÷àì óðîêà: +1. Ðåøèòå çàäà÷ó ïðè ïîìîùè ëèíåéíîãî àëãîðèòìà èëè àëãîðèòìà ñ âåòâëåíèåì (öèêë è ðåêóðñèè áóäóò íà óðîêå 2 è òóò èõ íå èñïîëüçóåì äëÿ ðåøåíèÿ). +2. Àíàëîãè÷íî ï. 1. ìàññèâû ïðîéä¸ì íà óðîêå 3, ïîýòîìó ïîñòàðàéòåñü ðåøèòü çàäà÷è áåç íèõ. +3. Åñëè ðå÷ü èä¸ò î ñèìâîëàõ, èñïîëüçóéòå òîëüêî ñòðî÷íûå áóêâû àíãëèéñêîãî àëôàâèòà. diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_1.py" index eef38aad..9c681fa3 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_1.py" @@ -32,3 +32,99 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + +# First solution +cont = True +while cont: + try: + first_number = int(input("Enter first number: ")) + second_number = int(input("Enter second number (it shouldn't be the zero!): ")) + sign_operation = input("Enter the sigh for operation. '+', '-', '*', '/' or '0' to quit.: ") + + while True: + if sign_operation == '+': + print(first_number + second_number) + break + elif sign_operation == '-': + print(first_number - second_number) + break + elif sign_operation == '*': + print(first_number * second_number) + break + elif sign_operation == '/': + print(first_number / second_number) + break + elif sign_operation == '0': + cont = False + print('You entered a zero to quite. The calculation will be stopped') + break + elif sign_operation not in ['0','+','-','*', '/']: + print('You entered a wrong symbol. Try again') + break + except ZeroDivisionError: + print("You are trying to divide by zero, it's wrong") + +# Second solution + +# while True: +# first_number = int(input("Enter first number: ")) +# second_number = int(input("Enter second number (it shouldn't be the zero!): ")) +# sign_operation = input("Enter the sigh for operation. '+', '-', '*', '/' or '0' to quit.: ") +# +# if sign_operation == '0': +# print('You entered a zero to quite. The calculation will be stopped') +# break +# if sign_operation in {'+', '-', '*', '/'}: +# try: +# if sign_operation == '+': +# print(first_number + second_number) +# elif sign_operation == '-': +# print(first_number - second_number) +# elif sign_operation == '*': +# print(first_number * second_number) +# elif sign_operation == '/': +# print(first_number / second_number) +# except ZeroDivisionError: +# print("You are trying to divide by zero, it's wrong") +# else: +# print('Wrong sign for operation. Try again') + + +#Solution from teacher +# while True: +# OPER_TYPE = input("Enter operation type (+,-,*,/ or 0 to quit): ") +# if OPER_TYPE == '0': +# break +# if OPER_TYPE in "+-*/": +# try: +# NUM_1 = int(input('Enter first number: ')) +# NUM_2 = int(input('Enter second number: ')) +# if OPER_TYPE == '+': +# RES = NUM_1 + NUM_2 +# if OPER_TYPE == '-': +# RES = NUM_1 - NUM_2 +# if OPER_TYPE == '*': +# RES = NUM_1 * NUM_2 +# if OPER_TYPE == '/': +# if NUM_2 != 0: +# RES = NUM_1 / NUM_2 +# else: +# print("Error. Divide by zero! Try again") +# continue +# print(f"Result {NUM_1} {OPER_TYPE} {NUM_2} = {RES}") +# except ValueError: +# print("You enetered a wrong value. Please correct it.") +# else: +# print("Wrong operation. Try repeat again") + + + + + + + + + + + + diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_2.py" index 342d0a7a..0698bff8 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1/task_1_2.py" @@ -33,3 +33,43 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def calc(): + oper_type = input("Enter type of operation (+,-,*,/ or 0 to quit): ") + if oper_type == '0': + return "Exit" + + else: + if oper_type in "+-*/": + try: + num_1 = int(input("Enter the first number: ")) + num_2 = int(input("Enter the second number: ")) + + if oper_type == '+': + res = num_1 + num_2 + print(f"You result is {res}") + return calc() + + if oper_type == '-': + res = num_1 - num_2 + print(f"You result is {res}") + return calc() + + if oper_type == '*': + res = num_1 * num_2 + print(f"You result is {res}") + return calc() + + if oper_type == '/': + if oper_type != 0: + res = num_1 / num_2 + print(f"You result is {res}") + else: + print("Dividing by zero is impossible. ") + return calc() + except ValueError: + print("Wrong value. Try again") + return calc() diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_1.py" index c2e12627..de7469ea 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_1.py" @@ -12,3 +12,53 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + + +# Solution 1 +# num = input('enter a number:') +# even = 0 +# odd = 0 +# list_digits = list(map(int, str(num))) +# print(list_digits) +# +# for i in list_digits: +# if i % 2 == 0: +# even += 1 +# else: +# odd += 1 +# print(f"There are {even} even digits and {odd} odd digits") + + +# Solution 2 +# num = int(input('enter a number:')) +# even = 0 +# odd = 0 +# while num > 0: +# if num % 2 == 0: +# even += 1 +# else: +# odd += 1 +# num = num // 10 +# print(f"There are {even} even digits and {odd} odd digits") + +# Solution from teacher + + +def cycle_method(numb): + evens = 0 + odds = 0 + while numb != 0: + cur_n = numb % 10 + numb = numb // 10 + if cur_n % 2 == 0: + evens += 1 + else: + odds += 1 + return evens, odds + + +try: + NUMB = int(input("Enter natural number: ")) + print(f"Number odd and eve digits in this natural number is: {cycle_method(NUMB)}") +except ValueError: + print("You entered a wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_2.py" index 893f1b5e..89aa75b9 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2/task_2_2.py" @@ -15,3 +15,28 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def recur_method(numb, even=0, odd=0): + # all digits are extracted + if numb == 0: + return even, odd + else: + # get the following digit + cur_n = numb % 10 + # the number becomes shorter + numb = numb // 10 + # check is this digit odd or even? + if cur_n % 2 ==0: + even += 1 + return recur_method(numb, even, odd) + else: + odd +=1 + return recur_method(numb, even, odd) +try: + NUMB = int(input("Enter natural number: ")) + print(f"Number odd and eve digits in this natural number is: {recur_method(NUMB)}") +except ValueError: + print("You entered a wrong value. Try again") \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_1.py" index d7067abf..f3932a71 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_1.py" @@ -12,3 +12,62 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + +#Solution 1 +# number = input('Enter you number: ') +# list_digits = list(map(int, str(number))) +# new = int +# new_list = [] +# +# while len(list_digits) > 0: +# new = list_digits[-1] +# new_list.append(new) +# list_digits.remove(new) +# print(int(''.join(map(str, new_list)))) + + +#Solution 2 +# BASE = 10 +# num = input('Enter you number: ') +# result = 0 +# while num > 0: +# result = result * BASE + num % BASE +# num = num // BASE +# print(result) + + +#Solution 3 - will consume RAM +# num = input('Enter you number: ') +# result = '' +# for i in num: +# result = i + result +# print(result) + + +#Solution 4 - without cylce +# num = input('Enter you number: ') +# result = num[::-1] +# print(result) + + +#Solution from teacher + + +def cycle_method(numb): + flip = 0 + while numb != 0: + flip = (flip * 10) + (numb %10) + numb = numb //10 + return flip + +try: + NUMB = int(input("Enter a number: ")) + print(f"Inverted number is {cycle_method(NUMB)}") +except ValueError: + print("You entered a wrong value. Try again") + + + + + + diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_2.py" index c139669e..3dbd8166 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3/task_3_2.py" @@ -14,3 +14,19 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def recur_method(numb, flip=0): + if numb == 0: + return flip + else: + flip = (flip * 10) + (numb % 10) + numb = numb // 10 + return recur_method(numb, flip) +try: + NUMB = int(input("Enter a number: ")) + print(f"Inverted number is {recur_method(NUMB)}") +except ValueError: + print("You entered a wrong value. Try again") \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_1.py" index 0a96b2c3..19d55688 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_1.py" @@ -8,3 +8,42 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + + +#Solution 1 +# n = int(input('Enter how many elements to sum:')) +# digit = 1 +# summary = 0 +# +# while n > 0: +# summary += digit +# digit /= -2 +# n -= 1 +# print(summary) + + +#Solution 2 +# n = int(input('Enter how many elements to sum:')) +# sum_ = 1 * (1 - (-0.5)**n) / (1 - (-0.5)) +# print(sum_) + + +# Solution from teacher + +def cycle_method(n_count): + numb = 1 + i = 0 + common_sum = 0 + while i < n_count: + common_sum += numb + numb = numb / 2 * -1 + i += 1 + return common_sum + +try: + N_COUNT = int(input("Enter number of elements: ")) + print(f"Number of elements - {N_COUNT}, their sum - {cycle_method(N_COUNT)}") +except ValueError: + print("You entered a wrong value. Try again.") + + diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_2.py" index 02adc999..8c40de89 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4/task_4_2.py" @@ -8,3 +8,19 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def recur_method(i, numb, n_count, common_sum): + if i == n_count: + print(f"Number of elements - {n_count}, their sum is - {common_sum}") + elif i < n_count: + return recur_method(i + 1, numb / 2 * -1, n_count, common_sum + numb) + + +try: + N_COUNT = int(input("Enter number of elements: ")) + recur_method(0, 1, N_COUNT, 0) +except ValueError: + print("You entered a wrong value. Try again.") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_1.py" index bc8285be..2b262d25 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_1.py" @@ -17,3 +17,31 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ +# Solution 1 + +first = 32 +last = 127 +step = 10 + +for i in range(first, last + 1): + print(f'\t{i}->"{chr(i)}"', end='') + if i % step == 1: + print() + + +# Solution from teacher + +def cycle_method(from_symbol, to_symbol, output_str=''): + for i in range(from_symbol, to_symbol): + if i <= LAST_ASCII_NUM: + output_str = f'{i} - {chr(i)}' + return output_str + + +first_ascii_num = 32 +LAST_ASCII_NUM = 127 +STEP = 10 + +print("This is a cycle representation: ") +for i in range(first_ascii_num, LAST_ASCII_NUM + 1, STEP): + print(cycle_method(i, i + STEP)) \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_2.py" index feb0e323..49697c95 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5/task_5_2.py" @@ -17,3 +17,22 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def recur_method(from_symbol, to_symbol, output_str=''): + for i in range(from_symbol, to_symbol): + if i <= LAST_ASCII_NUM: + output_str = f'{i} - {chr(i)}' + print(output_str) + if to_symbol < LAST_ASCII_NUM: + return recur_method(from_symbol + STEP, to_symbol + STEP) + + +first_ascii_num = 32 +LAST_ASCII_NUM = 127 +STEP = 10 + +print("This is a cycle representation: ") +recur_method(first_ascii_num, first_ascii_num + STEP) diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_1.py" index ddbc867a..427b9cf1 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_1.py" @@ -7,3 +7,67 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + +# Solution 1 +# import random +# +# random_digit = random.randint(0, 100) +# counter = 10 +# +# while counter > 0: +# users_number = int(input('Please try to guess a number: ')) +# if users_number != random_digit: +# print('Wrong number') +# if users_number > random_digit: +# print('The digit is less than entered. Try again') +# else: +# print('The digit is bigger than entered. Try again') +# elif users_number == random_digit: +# print('You won!') +# break +# counter -= 1 +# print(f'The right number was {random_digit}') + + +# Solution 2 +# import random +# num = random.randint(0, 100) +# print('Guess a number during 10 attempts') +# for i in range(1,11): +# answer = int(input(f'Attempt {i}: ')) +# if num < answer: +# print('The number is less') +# elif num > answer: +# print('The number is bigger') +# else: +# print(f'You guessed from {i} attempt! You won!') +# break +# else: +# print(f'You failed. it was {num}') + + +# Solution from teacher + +import random + + +def cycle_method(): + numb = random.randint(0, 100) + count = 1 + + while count < 11: + print(f"Attempt № {count}") + answer = int(input("Enter a number from 0 to 100: ")) + if answer != numb: + if numb < answer: + print(f"Guessed number is less then {numb}") + if numb > answer: + print(f"Guessed number is greater then {numb}") + else: + print("You are right!") + break + count += 1 + return numb + + +print(f"Guessed number was - {cycle_method()}") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_2.py" index 30af7191..019b314f 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6/task_6_2.py" @@ -7,3 +7,22 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ +import random + + +def recur_method(count, numb): + print(f"Attempt № {count}") + answer = int(input("Enter a number from 0 to 100: ")) + if count == 10 or answer == numb: + if answer == numb: + print("You are right!") + print(f"Guessed number was: {numb}") + else: + if numb > answer: + print(f"Guessed number is greater then {numb}") + else: + print(f"Guessed number is less then {numb}") + recur_method(count + 1, numb) + + +recur_method(1, random.randint(0, 100)) diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_1.py" index c8f24b6d..c1c97d47 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_1.py" @@ -5,3 +5,20 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + + +# Solution from teacher + +def cycle_method(numb): + s = 0 + for i in range(1, numb + 1): + s += i + m = numb * (numb + 1) // 2 + print(f"Equality: {s == m}") + + +try: + NUMB = int(input("Enter a number: ")) + cycle_method(NUMB) +except ValueError: + print("Wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_2.py" index 492fc7de..6463aae7 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7/task_7_2.py" @@ -5,3 +5,41 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Подсмотренное решение, не засчитывайте его + + +# def sum_natural(n): +# assert n < 999, 'To big number' +# if n == 1: +# return n +# sum_n = n + sum_natural(n -1) +# return sum_n +# +# +# n = int(input('Enter any natural number: ')) +# +# left = sum_natural(n) +# right = n * (n + 1) // 2 +# +# print(f'left {left}') +# print(f'right {right}') +# print('Right' if left == right else 'Wrong') + + +# Solution from teacher + +def recur_method(numb, s=0, m=1): + if s == m: + print(f"Equality: {s == m}") + + elif s < m: + return recur_method(numb, s + 1, numb * (numb + 1) // 2) + + +try: + NUMB = int(input("Enter a number: ")) + recur_method(NUMB) +except ValueError: + print("Wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_1.py" index 6a6ae98c..adfeb6d8 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_1.py" @@ -12,3 +12,43 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + + +# BASE = 10 +# +# num = int(input('How many numbers: ')) +# digit = int(input('Which digit need to count?: ')) +# counter = 0 +# +# for i in range(1, num + 1): +# ans = int(input(f'Enter number {i}: ')) +# while ans > 0: +# if ans % BASE == digit: +# counter += 1 +# ans //= BASE +# +# print(f'Were entered {counter} digits of {digit}') + + +# Solution from teacher + +def cycle_method(n, b): + count = 0 + for i in range(n, n + 1): + try: + m = int(input(f"Number {str(i)}: ")) + while m > 0: + if m % 10 == b: + count += 1 + m = m // 10 + except ValueError: + print("Wrong value. Try again") + print(f"Were entered {count} digits of {b}") + + +try: + N = int(input("How many numbers?: ")) + B = int(input("Which digit is calculate: ")) + cycle_method(N, B) +except ValueError: + print("Wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_2.py" index c66ced94..621d15ad 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8/task_8_2.py" @@ -12,3 +12,27 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + +# Solution from teacher +COUNT = 0 + + +def recur_method(n, b): + global COUNT + if n == 0: + return (f"Were entered {COUNT} digits of {b}") + m = int(input(f"Number: ")) + + while m > 0: + if m % 10 == b: + COUNT += 1 + m = m // 10 + return recur_method(n - 1, b) + + +try: + N = int(input("How many numbers?: ")) + B = int(input("Which digit is calculate: ")) + print(recur_method(N, B)) +except ValueError: + print("Wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_1.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_1.py" index 414cd456..df187e16 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_1.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_1.py" @@ -10,3 +10,51 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ ЦИКЛ """ + + +# Не законченное решение. Не хватило времени + +# num = int(input('How many numbers: ')) +# max_number = 0 +# sum_digits = 0 +# +# for i in range(1, num + 1): +# user_number = int(input(f"Enter your {i} number: ")) +# list_digits = list(map(int, str(user_number))) +# inter_number = 0 +# for _ in list_digits: +# inter_number += _ +# if inter_number > max_number: +# max_number = user_number +# sum_digits = inter_number +# else: +# continue +# print(f'The max number is {max_number} and the sum of it digits is {sum_digits}') + + +# Solution from teacher + +def cycle_method(quant): + steps = 0 + max_sum = 0 + + for _ in range(0, quant): + try: + numb = input("Entere the next number: ") + summ = 0 + for i in numb: + summ += int(i) + if summ > max_sum: + max_sum = summ + highest_numb = numb + steps += 1 + except ValueError: + print("Wrong value. Try again") + return f"Highest munber by summ of digits: {highest_numb}, the sum of digits: {max_sum}" + + +try: + QUANT = int(input("Enter number of digits: ")) + print(cycle_method(QUANT)) +except ValueError: + print("Wrong value. Try again") diff --git "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_2.py" "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_2.py" index 1ca50d66..71283bd8 100644 --- "a/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_2.py" +++ "b/\320\243\321\200\320\276\320\272 2. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9/task_9_2.py" @@ -10,3 +10,28 @@ ЗДЕСЬ ДОЛЖНА БЫТЬ РЕАЛИЗАЦИЯ ЧЕРЕЗ РЕКУРСИЮ """ + + +# Solution from teacher + +def recur_method(quantity, steps, highest_numb, max_sum): + summ = 0 + try: + numb = input("Enter a number: ") + for i in numb: + summ += int(i) + if summ > max_sum: + max_sum = summ + highest_numb = numb + steps += 1 + if steps == quantity: + return f"Highest number by summ of digits: {highest_numb}, the sum of digits: {max_sum}" + else: + return recur_method(quantity, steps, highest_numb, max_sum) + except ValueError: + print("Wrong value. Try again") + + +STEPS = 0 +HIGHEST_NUMB = 0 +MAX_SUM = 0 diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index a3eb8cb5..5c8eed03 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -14,3 +14,39 @@ В диапазоне 2-99: 12 чисел кратны 8 В диапазоне 2-99: 11 чисел кратны 9 """ + + +# first = 2 +# last = 9 +# +# for x in range(first, last + 1): +# multiples = 0 +# for y in range(2, 100): +# if y % x == 0: +# multiples += 1 +# print(f"В диапазоне 2-99: {multiples} чисел кратны {x}") + + +# Solution from teacher + +def task_1_1(): + lst_1 = list(range(2, 100)) + lst_2 = list(range(2, 100)) + for elem in lst_2: + numb = 0 + for i in lst_1: + if i % elem == 0: + numb += 1 + print(f"В диапазоне 2-99: {numb} чисел кратны {elem}") + + +# task_1_1() +# print() + + +def task_1_2(): + for i in range(2, 10): + new_list = [el for el in range(2, 100) if el % i == 0] + print(f"В диапазоне 2-99: {len(new_list)} чисел кратны {i}") +task_1_2() +print() \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index af8e1d66..82daa466 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -10,3 +10,44 @@ Пример: Исходный массив: [8, 3, 15, 6, 4, 2], результат: [0, 3, 4, 5] """ + + +# Solution with cycle +# for num in initial: +# if num % 2 == 0: +# final.append(initial.index(num)) +# else: +# continue +# print(final) + +# initial = [8, 3, 15, 6, 4, 2] +# final = [] +# x = [num for num in range(len(initial) + 1) if num % 2 == 0] +# print(x) + +# y = list(filter(lambda num: num % 2 == 0, initial)) # using lambda function - how to get even numbers +# print(y) + + +# В этой задаче есть вопросы: +# 1. насколько оправдано использование index в решении с циклами? +# как при помощи lambda фунцкии сделать такое решение? Пробовал сам, но не получилось - при использовании if else выдает ошибки + + +# Solution from teacher +def task_2_1(origin_lst): + new_lst = [] + for elem in origin_lst: + if elem % 2 == 0: + new_lst.append(origin_lst.index(elem)) + print(f"Исходный массив: {origin_lst}, результат: {new_lst}") + + +def task_2_2(origin_lst): + print(f"Исходный массив: {origin_lst}") + print(f"{[elem for elem in range(len(origin_lst)) if origin_lst[elem] % 2 == 0]}") + + +ORIGIN_LIST = [8, 3, 15, 6, 4, 2] +task_2_1(ORIGIN_LIST) +task_2_2(ORIGIN_LIST) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index f987b9cc..a99d9e04 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -11,3 +11,45 @@ 6 позиции, а минимальное число -49 стоит на 0 позиции [-49, 26, 41, 75, 23, 52, 88, 60, 69, -18] """ +# initial_list = [88, 26, 41, 75, 23, 52, -49, 60, 69, -18] +# +# in_max = 0 +# in_min = 0 +# +# for x in range(len(initial_list)): +# if initial_list[x] < initial_list[in_min]: +# in_min = x +# elif initial_list[x] > initial_list[in_max]: +# in_max = x +# print(f"Minimal number is: {initial_list[in_min]} index was {in_min}") +# print(f"Maximum number is: {initial_list[in_max]} index was {in_max}") +# initial_list[in_max], initial_list[in_min] = initial_list[in_min], initial_list[in_max] +# print(initial_list) + +# Solution from teacher + +from random import randint + + +def task_3(lst): + max_val = max(lst) + min_val = min(lst) + ind_max = lst.index(max_val) + ind_min = lst.index(min_val) + + print(f"В данном массиве чисел максимальное число {max_val:4} стоит на {ind_max:4} позиции", + f"а минимальное число {min_val:4} стоит на {ind_min:4} позиции") + print('Заменяем их') + print(lst) + + lst[ind_max], lst[ind_min] = min_val, max_val + ind_max = lst.index(max_val) + ind_min = lst.index(min_val) + print(f"В данном массиве чисел максимальное число {max_val:4} стоит на {ind_max:4} позиции", + f"а минимальное число {min_val:4} стоит на {ind_min:4} позиции") + + print(lst) + + +LST = [randint(-100, 100) for i in range(10)] +task_3(LST) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" index d906bdaa..780c078a 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_4.py" @@ -3,3 +3,45 @@ Подсказка: можно применить ф-цию max с параметром key """ +# list_dig = [1, 2, 2, 1, 3, 1, 5, 6, 5, 6, 6, 2] +# +# +# def most_frequent(list_dig) -> str: +# counter = {} +# max = 1 +# number = None +# for x in list_dig: +# if x in counter: +# counter[x] += 1 +# else: +# counter[x] = 1 +# if counter[x] > max: +# max = counter[x] +# number = x +# if number is not None: +# return f"The number {number} is presented {max} times" +# else: +# print("All elements are unique") +# +# +# print(most_frequent(list_dig)) + +# В этой задаче есть вопрос: +# Если несколько числе встречаютс яодинаковое количество раз, то как их все вывести? +# Выводится первое число, которое встречается чаще всего. Вданном случае число 1 + +# Solution from teacher + +import random + + +def task_4(lst): + print(f"Исходный массив: {lst}") + + numb = max(lst, key=lst.count) + # print(numb) + print(f"Число {numb} встречается {lst.count(numb)} раза") + + +LST = [random.randint(-100, 100) for i in range(50)] +task_4(LST) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" index c6d2fdde..60ad5a76 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" @@ -8,3 +8,32 @@ Базовый список: [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1] Максимальный отрицательный элемент в данном массиве = -5, его индекс 2 """ +base_list = [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1] + +# def find_max_neg(base_list) -> list: +# index = -1 +# for x in range(len(base_list)): +# if base_list[x] and index == -1: +# index = 1 +# elif 0 > base_list[x] > base_list[index]: +# index = x +# return [base_list[index], index] +# +# +# print(find_max_neg(base_list)) + + +# Solution from teacher + +from random import randint + + +def task_5(lst_base): + print(f"Базовый список: {lst_base}") + lst = [el for el in lst_base if el < 0] + print(f"Максимальный отрицательный элемент в данном массиве = {max(lst)}", + f"его индекс {lst_base.index(max(lst))}") + + +LST_BASE = [randint(-100, 100) for i in range(10)] +task_5(LST_BASE) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" index 923e89af..a3be1488 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" @@ -13,3 +13,37 @@ Массив: [88, 58, 50, 77, 49, 6, 42, 67, 14, 79] Сумма элементов между минимальным (6) и максимальным (88) элементами: 234 """ + +# Solution from teacher +from random import randint + +def task_6(lst): + + print(f"Массив: {lst}") + + min_index = 0 + max_index = 0 + step = 1 + common_sum = 0 + + for i in lst: + if lst[min_index] > i: + min_index = lst.index(i) + elif lst[max_index] < i: + max_index = lst.index(i) + + if max_index - min_index < 0: + step = -1 + + for i in lst[min_index + step:max_index:step]: + common_sum += 1 + + print(f"Сумма элементов между минимальным ({lst[min_index]})", + f"и максимальным ({lst[max_index]}) элементами: {common_sum}") + +try: + NUM = int(input('Введите количество элементов в массиве: ')) + LST = [randint(1, 100) for x in range(NUM)] + task_6(LST) +except ValueError: + print("Вы вместо числа ввели строку. Исправьте") \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" index 7e93662d..4a6266db 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" @@ -7,3 +7,25 @@ Наименьший элемент: -86, встречается в этом массиве 1 раз Второй наименьший элемент: -73 """ + +# Solution from teacher +from random import randint + + +def task_7(lst_base): + print(f"Исходный массив: {lst_base}") + + min_1 = min(lst_base) + count = 0 + for el in lst_base: + if el == min_1: + lst_base.remove(el) + count += 1 + print(f"Наименьший элемент: {min_1}, встречается в этом массиве {count} раз") + + if count == 1: + min_2 = min(lst_base) + print(f"Второй наименьший элемент: {min_2}") + +LST_BASE = [randint(-100, 100) for i in range(10)] +task_7(LST_BASE) \ No newline at end of file diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" index e6e47a32..d012ff10 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" @@ -36,3 +36,27 @@ [3, 3, 3, 3, 12] [3, 3, 3, 3, 12] """ + + + + +# Solution from teacher + +def task_8(): + row_n = 5 + col_n = 4 + matrix = [] + for i in range(row_n): + string = [] + s = 0 + print(f"{i+1}-я строка:") + for j in range(col_n): + n = int(input()) + s += n + string.append(n) + string.append(s) + matrix.append(string) + + for i in matrix: + print(i) +task_8() diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" index 5380a1d5..ad67f81d 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" @@ -11,3 +11,34 @@ [13, 12, 7, 15] минимальные значения по столбцам Максимальное среди них = 15 """ + +# Solution from teacher + +from random import randint + + +def task_9(row_numb, col_numb): + matrix = [] + for i in range(row_numb): + string = [] + for j in range(col_numb): + string.append(randint(0, 50)) + print(f"{string[j]:3}", end='') + matrix.append(string) + print() + + min_lst = [] + for i in range(col_numb): + min_l = [] + for j in range(row_numb): + min_l.append(matrix[j][i]) + min_lst.append(min(min_l)) + print(f"{min_lst} минимальные значения по столбцам") + print(f"Максимальное среди низ = {max(min_lst)}") + +try: + ROW_NUMB = int(input("Задайте количество строк в матрице:")) + COL_NUMB = int(input("Задайте количество столбцов в матрице:")) + task_9(ROW_NUMB, COL_NUMB) +except ValueError: + print("Вы ввели не верные знаяения. Попробуйте еще раз") diff --git "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index ad375e7b..39c2294d 100644 --- "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -12,3 +12,189 @@ ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО """ +import timeit + +""" +Пример сравнения 1 +""" + + +# First solution + + +def first_function(): + cont = True + while cont: + first_number = 123456789 + second_number = 123456789 + sign_operation = '*' + + if sign_operation == '+': + return first_number + second_number + elif sign_operation == '-': + return first_number - second_number + elif sign_operation == '*': + return first_number * second_number + elif sign_operation == '/': + return first_number / second_number + elif sign_operation == '0': + return 'You entered a zero to quite. The calculation will be stopped' + + elif sign_operation not in ['0', '+', '-', '*', '/']: + return 'You entered a wrong symbol. Try again' + + +# first_function() +print(timeit.timeit("first_function()", setup="from __main__ import first_function", number=1000)) + + +# Second solution + + +def second_function(): + first_number = 123456789 + second_number = 123456789 + sign_operation = '*' + + if sign_operation == '0': + print('You entered a zero to quite. The calculation will be stopped') + if sign_operation in {'+', '-', '*', '/'}: + try: + if sign_operation == '+': + return first_number + second_number + elif sign_operation == '-': + return first_number - second_number + elif sign_operation == '*': + return first_number * second_number + elif sign_operation == '/': + return first_number / second_number + except ZeroDivisionError: + return "You are trying to divide by zero, it's wrong" + else: + return 'Wrong sign for operation. Try again' + + +# second_function() +print(timeit.timeit("second_function()", setup="from __main__ import second_function", number=1000)) + + +# Third solution + + +def third_function(): + OPER_TYPE = '*' + if OPER_TYPE in "+-*/": + try: + NUM_1 = 123456789 + NUM_2 = 123456789 + if OPER_TYPE == '+': + RES = NUM_1 + NUM_2 + if OPER_TYPE == '-': + RES = NUM_1 - NUM_2 + if OPER_TYPE == '*': + RES = NUM_1 * NUM_2 + if OPER_TYPE == '/': + if NUM_2 != 0: + RES = NUM_1 / NUM_2 + else: + print("Error. Divide by zero! Try again") + return f"Result {NUM_1} {OPER_TYPE} {NUM_2} = {RES}" + except ValueError: + return "You entered a wrong value. Please correct it." + else: + return "Wrong operation. Try repeat again" + + +# third_function() +print(timeit.timeit("third_function()", setup="from __main__ import third_function", number=1000)) + +""" +Первые две фунцкии отрабатывают одинаково быстро, поскольку реализация в целом похожая на замерах 1000 запусков +0.0002571719999999722 +0.00023741999999993268 +0.0007426790000000238 +Но третья функция медленнее почти всегда на 0,005 секунды + +""" +# ======================================================================================================================= +""" +Пример сравнения 2 - Во втором массиве сохранить индексы четных элементов первого массива +""" +import random + + +# Solution with cycle + + +def generator_function(): + initial = [random.randint(1, 100) for item in range(1000)] + final = [] + for num in initial: + if num % 2 == 0: + final.append(initial.index(num)) + else: + continue + return final + + +print(timeit.timeit("generator_function()", setup="from __main__ import generator_function", number=1000)) + + +# Solution with cycle +def cycle_function(): + initial = [random.randint(1, 100) for item in range(1000)] + return [num for num in range(len(initial) + 1) if num % 2 == 0] + + +print(timeit.timeit("cycle_function()", setup="from __main__ import cycle_function", number=1000)) + +""" +Первая функция через цикл for на замерах 1000 запусков работает в 2 раза медленее чем вторая реализованная через +генератор. Разница почти в 2 раза +2.126314305 +1.251248333 +""" + +# ======================================================================================================================= +""" +Пример сравнения 3 - В диапазоне натуральных чисел от 2 до 99 определить, +сколько из них кратны каждому из чисел в диапазоне от 2 до 9. + +""" + + +# solution with fucntion and cycle for + + +def func_cycle_range(): + final = [] + for x in range(2, 10): + multiples = 0 + for y in range(2, 100): + if y % x == 0: + multiples += 1 + final.append(f"В диапазоне 2-99: {multiples} чисел кратны {x}") + return '\n'.join(final) + + +print(timeit.timeit("func_cycle_range()", setup="from __main__ import func_cycle_range", number=1000)) + + +def func_gen_range(): + final = [] + for i in range(2, 10): + new_list = [el for el in range(2, 100) if el % i == 0] + final.append(f"В диапазоне 2-99: {len(new_list)} чисел кратны {i}") + return '\n'.join(final) + + +print(timeit.timeit("func_gen_range()", setup="from __main__ import func_gen_range", number=1000)) + +""" +Странно, но функция func_cycle_range() с двумя вложенными циклами быстрее чем +функция func_gen_range() с 1 вложенным циклом и генератором. +Почему? + +0.05109987599999943 +0.052662662999999554 +""" diff --git "a/\320\243\321\200\320\276\320\272 5. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 5. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 82b46bcf..0dc4f550 100644 --- "a/\320\243\321\200\320\276\320\272 5. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 5. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -4,12 +4,10 @@ Программа должна определить среднюю прибыль (за год для всех предприятий) и вывести наименования предприятий, чья прибыль выше среднего и отдельно вывести наименования предприятий, чья прибыль ниже среднего. - Подсказка: Для решения задачи обязательно примените какую-нибудь коллекцию из модуля collections Для лучшее освоения материала можете даже сделать несколько решений этого задания, применив несколько коллекций из модуля collections - Пример: Введите количество предприятий для расчета прибыли: 2 Введите название предприятия: Рога @@ -25,3 +23,48 @@ Предприятия, с прибылью ниже среднего значения: Копыта """ +from collections import namedtuple + +Company = namedtuple('Company', 'name first second third fourth') +list_companies = [] +total_income = 0 + +comp_number = int(input('How many companies?: ')) +for i in range(1, comp_number + 1): + counter = comp_number + comp_name = input(f'Enter a name of {i} company: ') + comp_income = (input(f'Enter income for each quarter for {i} company: ').split()) + Company = namedtuple('Company', 'name first second third fourth') + Comp = Company( + name=comp_name, + first=comp_income[0], + second=comp_income[1], + third=comp_income[2], + fourth=comp_income[3] + ) + list_companies.append(Comp) + counter -= 1 + +# В цикле определяем какая из компаний имеет макисмльную прибыль и определяем среднюю прибыль для всех компаний за год +for j in list_companies: + comp_income = int(j.first) + int(j.second) + int(j.third) + int(j.fourth) + total_income += comp_income +average_profit = (total_income / comp_number) +print(f"The total income of {comp_number} companies is {total_income} ") +print(f"The average profit for a year for {comp_number} companies is {average_profit} ") + +# В цикле опредялем какая из компаний имеет выше или ниже среднегодовой доход чем среднегодовой доход по всем компаниям +for x in list_companies: + if (int(x.first) + int(x.second) + int(x.third) + int(x.fourth)) > average_profit: + print( + f"The '{x.name}' company has higher income than the average profit for all companies, " + f"which is {average_profit}") + elif (int(x.first) + int(x.second) + int(x.third) + int(x.fourth)) < average_profit: + print( + f"The '{x.name}' company has lower income than the average profit for all companies, " + f"which is {average_profit}") + elif (int(x.first) + int(x.second) + int(x.third) + int(x.fourth)) == average_profit: + print(f"The '{x.name}' company has the average profit, which is {average_profit}") + else: + print( + f'Looks like there are something wrong in entered data. Please, check it again') diff --git "a/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 0bbcc43f..6a70ff0c 100644 --- "a/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -12,3 +12,298 @@ ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО """ + +# Laptop Windows 7 64 bit OS, Python version 3.7 + + +from memory_profiler import profile +from sys import getrefcount +from guppy import hpy, heapy +from timeit import timeit +import random + +# First example of function +# Count memory usage with memory-profile + +# @profile() +# def first_function(): +# cont = True +# while cont: +# first_number = 123456789 +# second_number = 123456789 +# sign_operation = '*' +# +# if sign_operation == '+': +# return first_number + second_number +# elif sign_operation == '-': +# return first_number - second_number +# elif sign_operation == '*': +# return first_number * second_number +# elif sign_operation == '/': +# return first_number / second_number +# elif sign_operation == '0': +# return 'You entered a zero to quite. The calculation will be stopped' +# +# elif sign_operation not in ['0', '+', '-', '*', '/']: +# return 'You entered a wrong symbol. Try again' +# +# first_function() +""" +Использование памяти 48.7 Mib для цифр 123456789 и 123456789 +Results ot memory-profile + +Line # Mem usage Increment Line Contents +================================================ + 24 48.7 MiB 48.7 MiB @profile() + 25 def first_function(): + 26 48.7 MiB 0.0 MiB cont = True + 27 48.7 MiB 0.0 MiB while cont: + 28 48.7 MiB 0.0 MiB first_number = 123456789 + 29 48.7 MiB 0.0 MiB second_number = 123456789 + 30 48.7 MiB 0.0 MiB sign_operation = '*' + 31 + 32 48.7 MiB 0.0 MiB if sign_operation == '+': + 33 return first_number + second_number + 34 48.7 MiB 0.0 MiB elif sign_operation == '-': + 35 return first_number - second_number + 36 48.7 MiB 0.0 MiB elif sign_operation == '*': + 37 48.7 MiB 0.0 MiB return first_number * second_number + 38 elif sign_operation == '/': + 39 return first_number / second_number + 40 elif sign_operation == '0': + 41 return 'You entered a zero to quite. The calculation will be stopped' + 42 + 43 elif sign_operation not in ['0', '+', '-', '*', '/']: + 44 return 'You entered a wrong symbol. Try again' + + + + +""" +# @profile() +# def first_function(): +# cont = True +# while cont: +# first_number = 123456789123456789 +# second_number = 123456789123456789 +# sign_operation = '*' +# +# if sign_operation == '+': +# return first_number + second_number +# elif sign_operation == '-': +# return first_number - second_number +# elif sign_operation == '*': +# return first_number * second_number +# elif sign_operation == '/': +# return first_number / second_number +# elif sign_operation == '0': +# return 'You entered a zero to quite. The calculation will be stopped' +# +# elif sign_operation not in ['0', '+', '-', '*', '/']: +# return 'You entered a wrong symbol. Try again' +# first_function() + +""" +Если мы берем большие числа для расчета (123456789123456789 и 123456789123456789), то использование памяти не растет. +Те же 48.7 MiB + +Line # Mem usage Increment Line Contents +================================================ + 78 48.7 MiB 48.7 MiB @profile() + 79 def first_function(): + 80 48.7 MiB 0.0 MiB cont = True + 81 48.7 MiB 0.0 MiB while cont: + 82 48.7 MiB 0.0 MiB first_number = 123456789123456789 + 83 48.7 MiB 0.0 MiB second_number = 123456789123456789 + 84 48.7 MiB 0.0 MiB sign_operation = '*' + 85 + 86 48.7 MiB 0.0 MiB if sign_operation == '+': + 87 return first_number + second_number + 88 48.7 MiB 0.0 MiB elif sign_operation == '-': + 89 return first_number - second_number + 90 48.7 MiB 0.0 MiB elif sign_operation == '*': + 91 48.7 MiB 0.0 MiB return first_number * second_number + 92 elif sign_operation == '/': + 93 return first_number / second_number + 94 elif sign_operation == '0': + 95 return 'You entered a zero to quite. The calculation will be stopped' + 96 + 97 elif sign_operation not in ['0', '+', '-', '*', '/']: + 98 return 'You entered a wrong symbol. Try again' +""" +# ====================================================================================================================== + +# @profile() +# def generator_function(): +# initial = [random.randint(1, 1000) for item in range(1000000)] +# final = [] +# for num in initial: +# if num % 2 == 0: +# final.append(initial.index(num)) +# else: +# continue +# return final +# +# +# generator_function() + +""" +Интересно, что в данном случае не указывается значение увеличения памяти для строки 133 и 135. Почему? +Использование памяти 95,3 MiB +Line # Mem usage Increment Line Contents +================================================ + 131 48.8 MiB 48.8 MiB @profile() + 132 def generator_function(): + 133 79.6 MiB 0.4 MiB initial = [random.randint(1, 1000) for item in range(1000000)] + 134 79.6 MiB 0.0 MiB final = [] + 135 95.3 MiB 0.0 MiB for num in initial: + 136 95.3 MiB 0.0 MiB if num % 2 == 0: + 137 95.3 MiB 0.4 MiB final.append(initial.index(num)) + 138 else: + 139 continue + 140 95.3 MiB 0.0 MiB return final + +""" + +# @profile() +# def cycle_function(): +# initial = [random.randint(1, 1000) for item in range(1000000)] +# return [num for num in range(len(initial) + 1) if num % 2 == 0] +# +# +# cycle_function() + +""" +Интересно, что в данном случае не указывается значение увеличения памяти для строки 157 и 158 +Но в данном случае использование памяти в итоге больше за счет использования list comprehension в строке 158 +Line # Mem usage Increment Line Contents +================================================ + 155 48.9 MiB 48.9 MiB @profile() + 156 def cycle_function(): + 157 79.6 MiB 0.4 MiB initial = [random.randint(1, 1000) for item in range(1000000)] + 158 99.0 MiB 0.4 MiB return [num for num in range(len(initial) + 1) if num % 2 == 0] +Использование памяти 99,0 MiB + +""" + +# ====================================================================================================================== + +# @profile() +# def func_cycle_range(): +# final = [] +# for x in range(2, 100): +# multiples = 0 +# for y in range(2, 10000): +# if y % x == 0: +# multiples += 1 +# final.append(f"В диапазоне 2-9999: {multiples} чисел кратны {x}") +# return '\n'.join(final) +# func_cycle_range() + + +# h = hpy() +# def func_cycle_range_2(): +# final = [] +# for x in range(2, 1000): +# multiples = 0 +# for y in range(2, 10000): +# if y % x == 0: +# multiples += 1 +# final.append(f"В диапазоне 2-9999: {multiples} чисел кратны {x}") +# return '\n'.join(final) +# +# func_cycle_range_2() +# print(h.heap()) + + +""" +Использование memory-profile показывает 48.9 MiB для следющих значений +Line # Mem usage Increment Line Contents +================================================ + 192 48.8 MiB 48.8 MiB @profile() + 193 def func_cycle_range(): + 194 48.8 MiB 0.0 MiB final = [] + 195 48.9 MiB 0.0 MiB for x in range(2, 100): + 196 48.9 MiB 0.0 MiB multiples = 0 + 197 48.9 MiB 0.0 MiB for y in range(2, 10000): + 198 48.9 MiB 0.0 MiB if y % x == 0: + 199 48.9 MiB 0.0 MiB multiples += 1 + 200 48.9 MiB 0.0 MiB final.append(f"В диапазоне 2-9999: {multiples} чисел кратны {x}") + 201 48.9 MiB 0.0 MiB return '\n'.join(final) + + +Использование бибилиотеки guppy3 показывает использование 28.568872452 MiB. Непонятно почему такая разница, почти в 2 +раза +Partition of a set of 247934 objects. Total size = 29956634 bytes. + Index Count % Size % Cumulative % Kind (class / dict of class) + 0 72386 29 9428243 31 9428243 31 str + 1 63853 26 4935392 16 14363635 48 tuple + 2 29209 12 2288672 8 16652307 56 bytes + 3 14621 6 2112928 7 18765235 63 types.CodeType + 4 13889 6 1888904 6 20654139 69 function + 5 1917 1 1831784 6 22485923 75 type + 6 2914 1 1261024 4 23746947 79 dict (no owner) + 7 1917 1 1022416 3 24769363 83 dict of type + 8 459 0 840720 3 25610083 85 dict of module + 9 4236 2 563656 2 26173739 87 list +<532 more rows. Type e.g. '_.more' to view.> + +Process finished with exit code 0 + +""" + + +@profile() +def func_gen_range(): + final = [] + for i in range(2, 1000): + new_list = [el for el in range(2, 100000) if el % i == 0] + final.append(f"В диапазоне 2-100000: {len(new_list)} чисел кратны {i}") + return '\n'.join(final) + + +func_gen_range() + +h = hpy() + + +def func_gen_range_2(): + final = [] + for i in range(2, 1000): + new_list = [el for el in range(2, 100000) if el % i == 0] + final.append(f"В диапазоне 2-100000: {len(new_list)} чисел кратны {i}") + return '\n'.join(final) + + +func_gen_range_2() +print(h.heap()) +""" +Использование memory-profile показывает 48.8 MiB для следющих значений +Line # Mem usage Increment Line Contents +================================================ + 256 48.8 MiB 48.8 MiB @profile() + 257 def func_gen_range(): + 258 48.8 MiB 0.0 MiB final = [] + 259 51.0 MiB 0.0 MiB for i in range(2, 1000): + 260 52.1 MiB 0.3 MiB new_list = [el for el in range(2, 100000) if el % i == 0] + 261 51.0 MiB 0.0 MiB final.append(f"В диапазоне 2-100000: {len(new_list)} чисел кратны {i}") + 262 49.9 MiB 0.0 MiB return '\n'.join(final) + +Использование бибилиотеки guppy3 показывает использование 28.573565483 MiB +Partition of a set of 247987 objects. Total size = 29961555 bytes. + Index Count % Size % Cumulative % Kind (class / dict of class) + 0 72424 29 9432252 31 9432252 31 str + 1 63861 26 4935840 16 14368092 48 tuple + 2 29213 12 2288820 8 16656912 56 bytes + 3 14623 6 2113216 7 18770128 63 types.CodeType + 4 13889 6 1888904 6 20659032 69 function + 5 1917 1 1831784 6 22490816 75 type + 6 2914 1 1261024 4 23751840 79 dict (no owner) + 7 1917 1 1022416 3 24774256 83 dict of type + 8 459 0 840720 3 25614976 85 dict of module + 9 4236 2 563656 2 26178632 87 list +<532 more rows. Type e.g. '_.more' to view.> + +Process finished with exit code 0 + +""" diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 07560cfa..3e2367e2 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -9,3 +9,67 @@ Подсказка: обратите внимание, сортируем не по возрастанию, как в примере, а по убыванию """ +from random import randint +import timeit + +original_array = [randint(-100, 100) for _ in range(10)] +# original_array = [+15, 0, 25, 36, 50, 52,56] +print(f"Original array is: {original_array}") + + +def bubble_sort(orig_list): + n = 1 + while n < len(orig_list): + for i in range(len(orig_list) - n): + if orig_list[i] > orig_list[i + 1]: + orig_list[i], orig_list[i + 1] = orig_list[i + 1], orig_list[i] + n += 1 + return orig_list +# print(f"Sorted array is {bubble_sort(original_array)}") + + +def revert_bubble_sort(orig_list): + sorted = True + n = 1 + while n < len(orig_list): + for i in range(len(orig_list) - n): + if orig_list[i] < orig_list[i + 1]: + orig_list[i], orig_list[i + 1] = orig_list[i + 1], orig_list[i] + sorted = False + if sorted: + break + + n += 1 + return orig_list +# print(f"Revert sorted array is {revert_bubble_sort(original_array)}") + + + +original_array = [randint(-100, 100) for _ in range(10)] +print("buble sort for range 10 - ",timeit.timeit("bubble_sort(original_array)", setup="from __main__ import bubble_sort, original_array", number=1000)) + +print("revert buble sort for range 10 - ", timeit.timeit("revert_bubble_sort(original_array)", setup="from __main__ import revert_bubble_sort, original_array", number=100)) + +original_array = [randint(-100, 100) for _ in range(100)] +print("buble sort for range 100 - ",timeit.timeit("bubble_sort(original_array)", setup="from __main__ import bubble_sort, original_array", number=100)) + +print("revert buble sort for range 100 - ", timeit.timeit("revert_bubble_sort(original_array)", setup="from __main__ import revert_bubble_sort, original_array", number=100)) + + +original_array = [randint(-100, 100) for _ in range(1000)] +print("buble sort for range 1000 - ",timeit.timeit("bubble_sort(original_array)", setup="from __main__ import bubble_sort, original_array", number=100)) + +print("revert buble sort for range 1000 - ", timeit.timeit("revert_bubble_sort(original_array)", setup="from __main__ import revert_bubble_sort, original_array", number=100)) + +""" +Original array is: [79, -32, -27, -97, -45, 25, 77, -2, 62, 48] +buble sort for range 10 - 0.008165580999999977 +revert buble sort for range 10 - 0.00017421499999992207 +buble sort for range 100 - 0.05334371999999998 +revert buble sort for range 100 - 0.0028186460000000357 +buble sort for range 1000 - 5.419853857 +revert buble sort for range 1000 - 0.1485756450000002 + +Судя по результатам обратная сортировка но с использованием завершения, если нет ни одной сортировки, работает быстрее +""" + diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index 73d3dfb6..a29c2505 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -8,3 +8,66 @@ Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562] Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828] """ +import numpy +import timeit + + +# orig_list = [numpy.random.uniform(0.000000000000000, 50.000000000000000) for _ in range(5)] + + +def merge_sort(orig_list): + to_be_sorted = orig_list[:] + if len(orig_list) > 1: + center = len(orig_list) // 2 + left = orig_list[:center] + right = orig_list[center:] + + merge_sort(left) + merge_sort(right) + + # перестали делить + # выполняем слияние + i, j, k = 0, 0, 0 + + while i < len(left) and j < len(right): + if left[i] < right[j]: + orig_list[k] = left[i] + i += 1 + else: + orig_list[k] = right[j] + j += 1 + k += 1 + + while i < len(left): + orig_list[k] = left[i] + i += 1 + k += 1 + + while j < len(right): + orig_list[k] = right[j] + j += 1 + k += 1 + return to_be_sorted + + +orig_list = [numpy.random.uniform(0.000000000000000, 50.000000000000000) for _ in range(5)] +# замеры 5 +print(f"Original array for 5 numbers is {orig_list}") +print(timeit.timeit("merge_sort(orig_list)", \ + setup="from __main__ import merge_sort, orig_list", number=1000)) +print(f"Sorted array for 5 numbers is {merge_sort(orig_list)}") + +orig_list = [numpy.random.uniform(0.000000000000000, 50.000000000000000) for _ in range(10)] + +# замеры 10 +print(f"Original array for 10 numbers is {orig_list}") +print(timeit.timeit("merge_sort(orig_list)", \ + setup="from __main__ import merge_sort, orig_list", number=1000)) +print(f"Sorted array for 10 numbers is {merge_sort(orig_list)}") + +orig_list = [numpy.random.uniform(0.000000000000000, 50.000000000000000) for _ in range(15)] +print(f"Original array for 15 numbers is {orig_list}") +# замеры 15 +print(timeit.timeit("merge_sort(orig_list)", \ + setup="from __main__ import merge_sort, orig_list", number=1000)) +print(f"Sorted array for 15 numbers is {merge_sort(orig_list)}") diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index 33530404..2fd61265 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -6,3 +6,12 @@ массива. Но если это слишком сложно, то используйте метод сортировки, который не рассматривался на уроках """ +import random + +m = random.randint(5, 10) +print(m) + +original_array = [random.randint(-100, 100) for _ in range(2 * m + 1)] +print(original_array) + +# Не законченное задание