diff --git a/ALGORITMS/.idea/vcs.xml b/ALGORITMS/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/ALGORITMS/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ALGORITMS/Lesson_1/1.py b/ALGORITMS/Lesson_1/1.py new file mode 100644 index 0000000..9590c58 --- /dev/null +++ b/ALGORITMS/Lesson_1/1.py @@ -0,0 +1,24 @@ +# 1. Найти сумму и произведение цифр трехзначного числа, которое вводит пользователь. + +number = int(input('\n1 Вариант. Введите трехзначное целое число: ')) + +a = number // 100 +b = number % 100 // 10 +c = number % 10 + +print('\nСумма цифр: ', a + b + c) +print('Произведение цифр: ', a * b * c) + + +num = input('\n2 Вариант. Введите трехзначное целое число: ') +summa = 0 +umn = 1 +for i in num: + summa += int(i) + umn *= int(i) + +print('\nСумма цифр: ', summa) +print('Произведение цифр: ', umn) + + + diff --git a/ALGORITMS/Lesson_1/2.py b/ALGORITMS/Lesson_1/2.py new file mode 100644 index 0000000..798050f --- /dev/null +++ b/ALGORITMS/Lesson_1/2.py @@ -0,0 +1,40 @@ +""" +2. Выполнить логические побитовые операции «И», «ИЛИ» и др. над числами 5 и 6. +Выполнить над числом 5 побитовый сдвиг вправо и влево на два знака. +Объяснить полученный результат. +""" + +n1 = 5 +n2 = 6 + +# "ИЛИ" оператор копирует бит, если тот присутствует в хотя бы в одном операнде. +bit_or = n1 | n2 + +# "Исключительное ИЛИ" оператор копирует бит только если бит присутствует в одном из операндов, но не в обоих сразу. +bit_xor = n1 ^ n2 + +# "И" оператор, копирует бит в результат только если бит присутствует в обоих операндах. +bit_and = n1 & n2 + +# Побитовое отрицание меняет биты на обратные, там где была единица становиться ноль и наоборот. +bit_not_n1 = ~n1 +bit_not_n2 = ~n2 + +# Побитовый сдвиг вправо. Значение левого операнда "сдвигается" вправо на количество бит указанных в правом операнде. +bit_shift_right = n1 >> 2 + +# Побитовый сдвиг влево. Значение левого операнда "сдвигается" влево на количество бит указанных в правом операнде. +bit_shift_left = n1 << 2 + +print(f'Побитовое «ИЛИ» (OR) для {bin(n1)} и {bin(n2)}: {bin(bit_or)} ({bit_or})') + +print(f'Исключающее «ИЛИ» (XOR) для {bin(n1)} и {bin(n2)}: {bin(bit_xor)} ({bit_xor})') + +print(f'Побитовое «И» (AND) для {bin(n1)} и {bin(n2)}: {bin(bit_and)} ({bit_and})') + +print(f'Побитовое отрицание (NOT) для {bin(n1)}: {bin(bit_not_n1)} ({bit_not_n1})' + f' и для {bin(n2)}: {bin(bit_not_n2)} ({bit_not_n2})') + +print(f'Битовый сдвиг вправо для {bin(n1)}: {bin(bit_shift_right)} ({bit_shift_right})') + +print(f'Битовый сдвиг влево для {bin(n1)}: {bin(bit_shift_left)} ({bit_shift_left})') diff --git a/ALGORITMS/Lesson_1/3.py b/ALGORITMS/Lesson_1/3.py new file mode 100644 index 0000000..8f14b06 --- /dev/null +++ b/ALGORITMS/Lesson_1/3.py @@ -0,0 +1,16 @@ +""" +3. По введенным пользователем координатам двух точек вывести уравнение прямой вида y=kx+b, проходящей через эти точки. +""" + +print('Координаты точки A(x1,y1): ') +x1 = int(input('\tx1 = ')) +y1 = int(input('\ty1 = ')) + +print('Координаты точки B(x2,y2): ') +x2 = int(input('\tx2 = ')) +y2 = int(input('\ty2 = ')) + +print('Уравнение прямой, проходящей через эти точки: ') +k = (y1 - y2) / (x1 - x2) +b = y2 - k * x2 +print('\ty = %.2f*x + %.2f' % (k, b)) diff --git a/ALGORITMS/Lesson_1/4.py b/ALGORITMS/Lesson_1/4.py new file mode 100644 index 0000000..19f034f --- /dev/null +++ b/ALGORITMS/Lesson_1/4.py @@ -0,0 +1,64 @@ +""" +4. Написать программу, которая генерирует в указанных пользователем границах: +случайное целое число; +случайное вещественное число; +случайный символ. +Для каждого из трех случаев пользователь задает свои границы диапазона. +Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы. +Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно. +""" + +import random + + +def menu(): + print('\n\tМЕНЮ:\n\n\ + [1] Вывести случайное целое число\n\ + [2] Случайное вещественное число\n\ + [3] Случайный символ\n\ + [0] Выход') + + +def num_choice(): + print('Задайте границы диапазона: ') + a = int(input('Первое число: ')) + b = int(input('Второе число: ')) + if a > b: + return random.randint(b, a) + return random.randint(a, b) + + +def alpha_choice(): + print('Задайте границы диапазона: ') + c = input('Первая буква: ') + d = input('Вторая буква: ') + if c == '' or d == '' or c.isdigit() or d.isdigit(): + res = '\nОшибка ввода!\n' + elif ord(c) < ord(d): + res = random.choice([chr(i) for i in range(ord(c), ord(d) + 1)]) + else: + res = random.choice([chr(i) for i in range(ord(d), ord(c) + 1)]) + return res + + +menu() +option = input() + +while option != '0': + if option == '1': + try: + print(num_choice()) + except ValueError: + print('\nОшибка ввода!\n') + elif option == '2': + try: + print(float(num_choice())) + except ValueError: + print('\nОшибка ввода!\n') + elif option == '3': + print(alpha_choice()) + + print('Меню: [1], [2], [3] или [0]') + + if __name__ == '__main__': + option = input() diff --git a/ALGORITMS/Lesson_1/5.py b/ALGORITMS/Lesson_1/5.py new file mode 100644 index 0000000..7be5eb3 --- /dev/null +++ b/ALGORITMS/Lesson_1/5.py @@ -0,0 +1,32 @@ +""" +5. Пользователь вводит две буквы. Определить, на каких местах алфавита они стоят и сколько между ними находится букв. +""" + +a, b = [i.upper() for i in input('Введите 2 буквы латинского алфавита слитно: ')] + +# генерим алфавит +alpha = [chr(i) for i in range(ord('A'), ord('Z') + 1)] + +# Определяем какая буква по счету +letter1 = alpha.index(a) + 1 +letter2 = alpha.index(b) + 1 + +# подсчитываем колличество между бувами +interval = letter2 - letter1 - 1 + +# проверка на случай если буквы указаны не по возрастанию +if letter2 < letter1: + interval = letter1 - letter2 - 1 + +# исправим на правильное написание слов +text = [] +if interval == 1 or interval == 21: + text = 'буква' +elif interval == 2 or interval == 3 or interval == 4 or interval == 22 or interval == 23 or interval == 24: + text = 'буквы' +else: + text = 'букв' + +print('Первая буква стоит на', letter1, 'месте') +print('Вторая буква стоит на', letter2, 'месте') +print('Между ними', interval, text) diff --git a/ALGORITMS/Lesson_1/6.py b/ALGORITMS/Lesson_1/6.py new file mode 100644 index 0000000..fddb9b1 --- /dev/null +++ b/ALGORITMS/Lesson_1/6.py @@ -0,0 +1,8 @@ +""" +6. Пользователь вводит номер буквы в алфавите. Определить, какая это буква. +""" + +num = int(input('Введите номер буквы от 1 до 26: ')) + +alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +print('Номер', num, 'соответствует букве: ', alphabet[num - 1]) diff --git a/ALGORITMS/Lesson_1/7.py b/ALGORITMS/Lesson_1/7.py new file mode 100644 index 0000000..a511005 --- /dev/null +++ b/ALGORITMS/Lesson_1/7.py @@ -0,0 +1,21 @@ +""" +7. По длинам трех отрезков, введенных пользователем, определить возможность существования треугольника, +составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним, +равнобедренным или равносторонним. +""" + +b = [] +for i in range(3): + x = int(input(f'Введите через пробел длину {i+1} отрезка: ')) + b.append(x) + +if b[0] < b[1] + b[2] and b[1] < b[0] + b[2] and b[2] < b[0] + b[1]: + if b[0] == b[2] and b[2] == b[1]: + print(f'{b[0]} x {b[1]} x {b[2]} - Равносторонний треугольник') + elif b[0] == b[2] or b[2] == b[1] or b[0] == b[1]: + print(f'{b[0]} x {b[1]} x {b[2]} - Равнобедренный треугольник') + else: + print(f'{b[0]} x {b[1]} x {b[2]} - Разносторонний треугольник') +else: + print(f'{b[0]} x {b[1]} x {b[2]} - Треугольник не существует') + diff --git a/ALGORITMS/Lesson_1/8.py b/ALGORITMS/Lesson_1/8.py new file mode 100644 index 0000000..5485fbf --- /dev/null +++ b/ALGORITMS/Lesson_1/8.py @@ -0,0 +1,11 @@ +""" +8. Определить, является ли год, который ввел пользователем, високосным или невисокосным. +""" + +x = int(input('Введите год: ')) +if x % 100 == 0 and x % 400 != 0: + print('Этот год обычный') +elif x % 100 == 0 and x % 400 == 0 or x % 4 == 0: + print('Этот год високосный') +else: + print('Этот год обычный') diff --git a/ALGORITMS/Lesson_1/9.py b/ALGORITMS/Lesson_1/9.py new file mode 100644 index 0000000..9095ac6 --- /dev/null +++ b/ALGORITMS/Lesson_1/9.py @@ -0,0 +1,17 @@ +""" +9. Вводятся три разных числа. Найти, какое из них является средним (больше одного, но меньше другого). +""" + +a = int(input('Введите первое число: ')) +b = int(input('Введите второе число: ')) +c = int(input('Введите третье число: ')) + +if b < c < a or a < c < b: + print('среднее число ', c) +elif a < b < c or c < b < a: + print('среднее число ', b) +elif a == b or a == c or b == c: + print('При двух и более одинаковых числах не возможно определить среднее число') +else: + print('среднее число ', a) + diff --git a/ALGORITMS/Lesson_2/1.py b/ALGORITMS/Lesson_2/1.py new file mode 100644 index 0000000..6422350 --- /dev/null +++ b/ALGORITMS/Lesson_2/1.py @@ -0,0 +1,46 @@ +''' +1. Написать программу, которая будет складывать, вычитать, умножать или делить два числа. +Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться, +а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа '0' +в качестве знака операции. Если пользователь вводит неверный знак (не '0', '+', '-', '*', '/'), то программа должна +сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль, +если он ввел 0 в качестве делителя. +''' + + +def menu(): + print('[+] Сложение\n' + '[-] Вычитание\n' + '[*] Умножение\n' + '[/] Деление\n' + '[0] Выход') + + +menu() +option = input() + +while option != '0': + if option == '+': + a = int(input('Введите первое число:')) + b = int(input('Введите второе число:')) + print(f'{a} + {b} =', a + b) + elif option == '-': + a = int(input('Введите первое число:')) + b = int(input('Введите второе число:')) + print(f'{a} - {b} =', a - b) + elif option == '*': + a = int(input('Введите первое число:')) + b = int(input('Введите второе число:')) + print(f'{a} * {b} =', a * b) + elif option == '/': + try: + a = int(input('Введите первое число:')) + b = int(input('Введите второе число:')) + print(f'{a} / {b} =', round(a / b, 4)) + except ZeroDivisionError: + print('Ошибка! На <0> делить нельзя!') + else: + print('Ошибка, введите правильный символ:') + menu() + option = input() + diff --git a/ALGORITMS/Lesson_2/2.py b/ALGORITMS/Lesson_2/2.py new file mode 100644 index 0000000..6ce2aad --- /dev/null +++ b/ALGORITMS/Lesson_2/2.py @@ -0,0 +1,20 @@ +''' +2. Посчитать четные и нечетные цифры введенного натурального числа. Например, если введено число 34560, +то у него 3 четные цифры (4, 6 и 0) и 2 нечетные (3 и 5). +''' + + +number = input('Введите число: ') +even = 0 +odd = 0 +num_even = [] +num_odd = [] +for f in number: + i = int(f) + if i % 2 == 0: + num_even.append(i) + even += 1 + else: + num_odd.append(i) + odd += 1 +print(f'У числа {number}: {even} четных {num_even} и {odd} нечетные {num_odd}') diff --git a/ALGORITMS/Lesson_2/3.py b/ALGORITMS/Lesson_2/3.py new file mode 100644 index 0000000..955a9fc --- /dev/null +++ b/ALGORITMS/Lesson_2/3.py @@ -0,0 +1,7 @@ +''' +3. Сформировать из введенного числа обратное по порядку входящих в него цифр и вывести на экран. +Например, если введено число 3486, то надо вывести число 6843. +''' + +number = input('Введите число: ') +print(number[::-1]) diff --git a/ALGORITMS/Lesson_2/4.py b/ALGORITMS/Lesson_2/4.py new file mode 100644 index 0000000..eeaae38 --- /dev/null +++ b/ALGORITMS/Lesson_2/4.py @@ -0,0 +1,18 @@ +''' +4. Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125 +Количество элементов (n) вводится с клавиатуры. +''' + + +n = int(input('Введите количество элементов: ')) + +N = 0 +range = 1 +sum = 0 + +while N < n: + sum += range + range /= -2 + N += 1 + +print('Сумма', sum) diff --git a/ALGORITMS/Lesson_2/5.py b/ALGORITMS/Lesson_2/5.py new file mode 100644 index 0000000..f5e5fb7 --- /dev/null +++ b/ALGORITMS/Lesson_2/5.py @@ -0,0 +1,11 @@ +''' +5. Вывести на экран коды и символы таблицы ASCII, начиная с символа под номером 32 и заканчивая 127-м включительно. +Вывод выполнить в табличной форме: по десять пар "код-символ" в каждой строке. +''' + +for i in range(32, 128): + print('%6d-%s' % (i, chr(i)), end=' ') + if i % 10 == 1: + print() +print() + diff --git a/ALGORITMS/Lesson_2/6.py b/ALGORITMS/Lesson_2/6.py new file mode 100644 index 0000000..c2327d3 --- /dev/null +++ b/ALGORITMS/Lesson_2/6.py @@ -0,0 +1,46 @@ +''' +6. В программе генерируется случайное целое число от 0 до 100. Пользователь должен его отгадать не более чем за 10 попыток. +После каждой неудачной попытки должно сообщаться больше или меньше введенное пользователем число, чем то, что загадано. +Если за 10 попыток число не отгадано, то вывести загаданное число. +''' + + +import random + +print('\nИгра угадай число от 0 до 100 за 10 попыток.\n') + + +def menu(): + print('[Y] - Играть ') + print('[N] - Выйти ') + + +menu() +option = input() +rnd = random.randint(0, 100) +count = 0 + +while option != 'N': + while count != 10: + my = int(input('Введи число : ')) + if my < rnd: + print(f'Загаданное число больше {my}') + elif my > rnd: + print(f'Загаданное число меньше {my}') + else: + print(f'\nВы угадали число "{rnd}" за {count + 1} попыток\n') + menu() + option = input() + count = -1 + if option == 'N': + break + rnd = random.randint(0, 100) + count += 1 + else: + print(f'Вы не угадали число за {count} попыток... Загаданное число "{rnd}"\n') + menu() + option = input() + count = 0 + if option == 'N': + break + rnd = random.randint(0, 100) diff --git a/ALGORITMS/Lesson_2/7.py b/ALGORITMS/Lesson_2/7.py new file mode 100644 index 0000000..dffd40b --- /dev/null +++ b/ALGORITMS/Lesson_2/7.py @@ -0,0 +1,22 @@ +''' +7. Напишите программу, доказывающую или проверяющую, что для множества натуральных чисел выполняется +равенство: 1+2+...+n = n(n+1)/2, где n - любое натуральное число. +''' +from colorama import Fore, Style + +n = 1 +while n != 200: + left = 0 + for i in range(1, n + 1): + left += i + right = n * (n + 1) // 2 + n += 1 + if left == right: + res = True + else: + res = False + print('=' * 10) + print(left) + print(right) + print(f'{Fore.GREEN}{res}!{Style.RESET_ALL}') + diff --git a/ALGORITMS/Lesson_2/8.py b/ALGORITMS/Lesson_2/8.py new file mode 100644 index 0000000..f6459cd --- /dev/null +++ b/ALGORITMS/Lesson_2/8.py @@ -0,0 +1,14 @@ +''' +8. Посчитать, сколько раз встречается определенная цифра в введенной последовательности чисел. +Количество вводимых чисел и цифра, которую необходимо посчитать, задаются вводом с клавиатуры. +''' + +number = input('Введите число: ') +numeral = input('Введите цифру, которую необходимо посчитать: ') + +result = 0 +for i in number: + if i == numeral: + result += 1 +print(f'В числе {number} цифра {numeral} встречается {result} раз.') + diff --git a/ALGORITMS/Lesson_2/9.py b/ALGORITMS/Lesson_2/9.py new file mode 100644 index 0000000..d317636 --- /dev/null +++ b/ALGORITMS/Lesson_2/9.py @@ -0,0 +1,22 @@ +''' +9. Среди натуральных чисел, которые были введены, найти наибольшее по сумме цифр. Вывести на экран это число и сумму его цифр. +''' + +numbers = '22', '33', '555', '99', '1111', + + +def sum_numbers(numbers): + summa = 0 + for item in numbers: + summa += int(item) + return summa + + +max_number = 0 +max_sum = 0 +for i in numbers: + if sum_numbers(i) > max_sum: + max_number = i + max_sum = sum_numbers(i) + +print(f'У числа {max_number} наибольшая сумма цифр = {max_sum}') diff --git a/ALGORITMS/Lesson_3/1.py b/ALGORITMS/Lesson_3/1.py new file mode 100644 index 0000000..f7d0f1b --- /dev/null +++ b/ALGORITMS/Lesson_3/1.py @@ -0,0 +1,11 @@ +''' +1. В диапазоне натуральных чисел от 2 до 99 определить, сколько из них кратны каждому из чисел в диапазоне от 2 до 9. +''' + +res = {} +for i in range(2, 10): + res[i] = [] + for j in range(2, 100): + if j % i == 0: + res[i].append(j) + print(f'Числу {i} кратны {len(res[i])} чисел: {res[i]}') diff --git a/ALGORITMS/Lesson_3/2.py b/ALGORITMS/Lesson_3/2.py new file mode 100644 index 0000000..624c0ee --- /dev/null +++ b/ALGORITMS/Lesson_3/2.py @@ -0,0 +1,14 @@ +''' +2. Во втором массиве сохранить индексы четных элементов первого массива. +Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то во второй массив +надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 - если индексация начинается с нуля), +т.к. именно в этих позициях первого массива стоят четные числа. +''' + +array_1 = [8, 3, 15, 6, 4, 2] +array_2 = [] +for i in array_1: + if i % 2 == 0: + array_2.append(array_1.index(i)) +print(array_1, ' - Первый массив') +print(array_2, ' - Индексы четных элементов первого массива') diff --git a/ALGORITMS/Lesson_3/3.py b/ALGORITMS/Lesson_3/3.py new file mode 100644 index 0000000..d25073f --- /dev/null +++ b/ALGORITMS/Lesson_3/3.py @@ -0,0 +1,17 @@ +''' +3. В массиве случайных целых чисел поменять местами минимальный и максимальный элементы. +''' +import random + + +arr = [random.randint(1, 1000) for i in range(10)] +mini = min(arr) +maxi = max(arr) +min_index = arr.index(mini) +max_index = arr.index(maxi) +print('Минимальное число в массиве:', mini) +print('Максимальное число в массиве:', maxi) +print(arr, 'Начальный массив') +arr[min_index], arr[max_index] = arr[max_index], arr[min_index] +print(arr, 'Измененный массив') + diff --git a/ALGORITMS/Lesson_3/4.py b/ALGORITMS/Lesson_3/4.py new file mode 100644 index 0000000..2e0091a --- /dev/null +++ b/ALGORITMS/Lesson_3/4.py @@ -0,0 +1,16 @@ +''' +4. Определить, какое число в массиве встречается чаще всего. +''' + +import random + + +arr = [random.randint(1, 4) for i in range(20)] + +# для проверки +print('массив', arr, '\n') +for i in set(arr): + print('число', i, 'в массиве', arr.count(i), 'шт.') + +# результат +print('\nЧисло:', max(arr, key=arr.count), 'встречается в массиве чаще всего') diff --git a/ALGORITMS/Lesson_3/5.py b/ALGORITMS/Lesson_3/5.py new file mode 100644 index 0000000..f8fd8f9 --- /dev/null +++ b/ALGORITMS/Lesson_3/5.py @@ -0,0 +1,14 @@ +''' +5. В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве. +''' + +import random + +arr = [random.randint(-100, 100) for _ in range(10)] +print('\n', arr) +print('\n Максимальный отрицательный элемент:', min(arr)) + +for _ in range(len(arr)): + mini = min(arr) + ind = arr.index(mini) +print(' Находится на позиции:', ind + 1) diff --git a/ALGORITMS/Lesson_3/6.py b/ALGORITMS/Lesson_3/6.py new file mode 100644 index 0000000..c5a934f --- /dev/null +++ b/ALGORITMS/Lesson_3/6.py @@ -0,0 +1,23 @@ +''' +6. В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами. +Сами минимальный и максимальный элементы в сумму не включать. +''' + +import random + +arr = [random.randint(1, 99) for _ in range(11)] +print('\n', arr) + +mini = min(arr) +maxi = max(arr) +min_ind = arr.index(mini) +max_ind = arr.index(maxi) +print('\n Минимальный элемент', mini, 'с индексом', min_ind) +print(' Максимальный элемент', maxi, 'с индексом', max_ind) + +res = 0 +if min_ind < max_ind: + res += sum(arr[min_ind + 1:max_ind]) +else: + res += sum(arr[max_ind + 1:min_ind]) +print('\n Сумма элементов, находящихся между минимальным и максимальным элементами =', res) diff --git a/ALGORITMS/Lesson_3/7.py b/ALGORITMS/Lesson_3/7.py new file mode 100644 index 0000000..f3217ff --- /dev/null +++ b/ALGORITMS/Lesson_3/7.py @@ -0,0 +1,27 @@ +''' +7. В одномерном массиве целых чисел определить два наименьших элемента. +Они могут быть как равны между собой (оба являться минимальными), так и различаться. +''' + + +import random + +arr = [random.randint(1, 99) for _ in range(11)] +print('\n', arr) + +sort_arr = sorted(arr) +print(' Два наименьших элемента в массиве', sort_arr[0], 'и', sort_arr[1], '- легкий вариант через сортировку') + + +mini_1 = min(arr) +min_ind = arr.index(mini_1) +new_arr = arr[:] +del new_arr[min_ind] +mini_2 = min(new_arr) +print('\n', arr) +print(' Два наименьших элемента в массиве', mini_1, 'и', mini_2, '- вариант с копией основного массива ;)') + + + + + diff --git a/ALGORITMS/Lesson_3/8.py b/ALGORITMS/Lesson_3/8.py new file mode 100644 index 0000000..5e3ff62 --- /dev/null +++ b/ALGORITMS/Lesson_3/8.py @@ -0,0 +1,22 @@ +''' +8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних элементов строк. +Программа должна вычислять сумму введенных элементов каждой строки и записывать ее в последнюю ячейку строки. +В конце следует вывести полученную матрицу. +''' + +M = 5 +N = 4 +a = [] +for i in range(N): + b = [] + s = 0 + print("%d-я строка:" % i) + for j in range(M - 1): + n = int(input()) + s += n + b.append(n) + b.append(s) + a.append(b) + +for i in a: + print(i) diff --git a/ALGORITMS/Lesson_3/9.py b/ALGORITMS/Lesson_3/9.py new file mode 100644 index 0000000..f3aae22 --- /dev/null +++ b/ALGORITMS/Lesson_3/9.py @@ -0,0 +1,31 @@ +''' +9. Найти максимальный элемент среди минимальных элементов столбцов матрицы. +''' + +import random + +num = [] + +for i in range(4): + num.append([]) + num[i].extend([random.randint(0, 99) for _ in range(8)]) + +min_list = [] +min_list.extend(num[0]) + +for string in num: + print() + print(('{:4d} ' * len(string)).format(*string)) + i = 0 + for j in string: + if j < min_list[i]: + min_list[i] = j + i += 1 + +print() +print('\tМинимальные числа в столбцах\n') +print(('{:4d} ' * len(min_list)).format(*min_list)) +print() + +min_list.sort(reverse=True) +print('Максимальный элемент среди минимальных элементов столбцов матрицы:', min_list[0]) diff --git a/ALGORITMS/Lesson_4/1.py b/ALGORITMS/Lesson_4/1.py new file mode 100644 index 0000000..036c1b0 --- /dev/null +++ b/ALGORITMS/Lesson_4/1.py @@ -0,0 +1,49 @@ +''' +1. Проанализировать скорость и сложность одного любого алгоритма, разработанных в рамках домашнего задания первых трех уроков. +Примечание: попробуйте написать несколько реализаций алгоритма и сравнить их. +''' +import cProfile + + +numbers = '22', '33', '555', '99', '1111', + + +def sum_numbers(numbers): + summa = 0 + for item in numbers: + summa += int(item) + return summa + + +max_number = 0 +max_sum = 0 +for i in numbers: + if sum_numbers(i) > max_sum: + max_number = i + max_sum = sum_numbers(i) + +print(f'У числа {max_number} наибольшая сумма цифр = {max_sum}') + + +def main(): + num = 3 ** 100000 + res_count = sum_numbers(str(num)) + res_sum = sum_numbers(str(num)) + + +if __name__ == '__main__': + cProfile.run('main()') + +''' +У числа 99 наибольшая сумма цифр = 18 + 6 function calls in 0.073 seconds + + Ordered by: standard name + + ncalls tottime percall cumtime percall filename:lineno(function) + 2 0.011 0.005 0.011 0.005 1.py:11(sum_numbers) + 1 0.062 0.062 0.073 0.073 1.py:28(main) + 1 0.000 0.000 0.073 0.073 :1() + 1 0.000 0.000 0.073 0.073 {built-in method builtins.exec} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} +''' \ No newline at end of file diff --git a/ALGORITMS/Lesson_4/2.py b/ALGORITMS/Lesson_4/2.py new file mode 100644 index 0000000..629d7f3 --- /dev/null +++ b/ALGORITMS/Lesson_4/2.py @@ -0,0 +1,56 @@ +''' +2. Написать два алгоритма нахождения i-го по счёту простого числа. +Без использования «Решета Эратосфена»; +Используя алгоритм «Решето Эратосфена» +Примечание ко всему домашнему заданию: +Проанализировать скорость и сложность алгоритмов. +Результаты анализа сохранить в виде комментариев в файле с кодом. +''' + +import cProfile + + +def number(n): + #n = 100 + a = [] + for i in range(n + 1): + a.append(i) + a[1] = 0 + i = 2 + while i <= n: + if a[i] != 0: + j = i + i + while j <= n: + a[j] = 0 + j = j + i + i += 1 + a = set(a) + a.remove(0) + print(a) + + +def main(): + num = 3 ** 100000 + a1 = number(100) + + +if __name__ == '__main__': + cProfile.run('main()') + +''' +{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97} + 108 function calls in 0.002 seconds + + Ordered by: standard name + + ncalls tottime percall cumtime percall filename:lineno(function) + 1 0.000 0.000 0.000 0.000 2.py:13(number) + 1 0.002 0.002 0.002 0.002 2.py:32(main) + 1 0.000 0.000 0.002 0.002 :1() + 1 0.000 0.000 0.002 0.002 {built-in method builtins.exec} + 1 0.000 0.000 0.000 0.000 {built-in method builtins.print} + 101 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 1 0.000 0.000 0.000 0.000 {method 'remove' of 'set' objects} + +''' \ No newline at end of file diff --git a/ALGORITMS/Lesson_5/1.py b/ALGORITMS/Lesson_5/1.py new file mode 100644 index 0000000..6bbe5a7 --- /dev/null +++ b/ALGORITMS/Lesson_5/1.py @@ -0,0 +1,40 @@ +''' +1. Пользователь вводит данные о количестве предприятий, их наименования и прибыль за 4 квартала +(т.е. 4 отдельных числа) для каждого предприятия.. Программа должна определить среднюю прибыль +(за год для всех предприятий) и вывести наименования предприятий, чья прибыль выше среднего и +отдельно вывести наименования предприятий, чья прибыль ниже среднего. +''' + +from colorama import Fore, Style + +company = {} +n = int(input('Колличество предприятий: ')) +q = 4 # кварталы +p = 0 # прибыль каждого предприятия +all = 0 # общая прибыль +for i in range(n): + c_name = input(str(i + 1) + '-е предприятие: ') + company[c_name] = i + 1 + for j in range(q): + profit = input('\t' + str(j + 1) + '-ый квартал: ') + all += int(profit) + p += int(profit) + company[c_name] = p + p = 0 +print('Предприятия:', company) +print('Общая прибыль:', all) + +avrg = all / n +print('\nСредняя прибыль за год для всех предприятий: %.0f' % avrg) +little = [] +big = [] +for i in range(n): + x = int(list(company.values())[i]) + if x > avrg: + big.append(list(company.items())[i]) + else: + little.append(list(company.items())[i]) + +print(f'\nПредприятия с прибылью ВЫШЕ средней: {Fore.GREEN}{big}{Style.RESET_ALL}') +print('=' * 50) +print(f'\nПредприятия с прибылью НИЖЕ средней: {Fore.RED}{little}{Style.RESET_ALL}') diff --git a/ALGORITMS/Lesson_5/2.py b/ALGORITMS/Lesson_5/2.py new file mode 100644 index 0000000..0acd23c --- /dev/null +++ b/ALGORITMS/Lesson_5/2.py @@ -0,0 +1,28 @@ +''' +2. Написать программу сложения и умножения двух шестнадцатеричных чисел. +При этом каждое число представляется как массив, элементы которого это цифры числа. +Например, пользователь ввёл A2 и C4F. Сохранить их как [‘A’, ‘2’] и [‘C’, ‘4’, ‘F’] +соответственно. Сумма чисел из примера: [‘C’, ‘F’, ‘1’], +произведение - [‘7’, ‘C’, ‘9’, ‘F’, ‘E’]. +''' + +import collections + + +x = [] +for i in range(2): + y = list(input(f'Введите {i+1}-e число в шестнадцатиричном формате: ').upper()) + x.append(y) + +a = collections.deque(x[0]) +b = collections.deque(x[1]) +c = ''.join(a) +d = ''.join(b) +summa = int(c, 16) + int(d, 16) +pr = int(c, 16) * int(d, 16) +arr1 = hex(summa)[2:].upper() +arr2 = hex(pr)[2:].upper() + +print('Массив чисел:', x) +print('Сумма чисел:', list(arr1)) +print('Произведение чисел:', list(arr2)) \ No newline at end of file diff --git a/Lesson_10/__init__.py b/Lesson_10/__init__.py new file mode 100644 index 0000000..e69de29