diff --git a/HW_2/hw_2_1.py b/HW_2/hw_2_1.py new file mode 100644 index 0000000..e7149e5 --- /dev/null +++ b/HW_2/hw_2_1.py @@ -0,0 +1,15 @@ +# 1. Создать список и заполнить его элементами различных типов данных. +# Реализовать скрипт проверки типа данных каждого элемента. Использовать функцию type() для проверки типа. +# Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. + + +my_int = 5 +my_float = 1.98 +my_str = "Hello World" +my_list = ["Michael Jordan", 23] +my_tuple = ("Magic Johnson", 32) +my_dict = {"NBA": "Team Chicago Bulls", "city": "Chicago"} + +full_list = [my_int, my_float, my_str, my_list, my_tuple, my_dict] +for i in full_list: + print(f"{i} is {type(i)}") diff --git a/HW_2/hw_2_2.py b/HW_2/hw_2_2.py new file mode 100644 index 0000000..e87a311 --- /dev/null +++ b/HW_2/hw_2_2.py @@ -0,0 +1,18 @@ +# 2. Для списка реализовать обмен значений соседних элементов, т.е. +# Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. +# При нечетном количестве элементов последний сохранить на своем месте. +# Для заполнения списка элементов необходимо использовать функцию input(). + + +el_count = int(input("Введите количество элементов списка ")) +my_list = [] +i = 0 +el = 0 +while i < el_count: + my_list.append(input("Введите следующее значение списка ")) + i += 1 + +for elem in range(int(len(my_list) / 2)): + my_list[el], my_list[el + 1] = my_list[el + 1], my_list[el] + el += 2 +print(my_list) diff --git a/HW_2/hw_2_3.py b/HW_2/hw_2_3.py new file mode 100644 index 0000000..08d8c0f --- /dev/null +++ b/HW_2/hw_2_3.py @@ -0,0 +1,50 @@ +# 3. Пользователь вводит месяц в виде целого числа от 1 до 12. +# Сообщить к какому времени года относится месяц (зима, весна, лето, осень). +# Напишите решения через list и через dict. + + +seasons_list = ['January', 'February', 'March', 'April', 'May', 'June', + 'Jule', 'August', 'September', 'October', 'November', 'December'] + +seasons_dict = {1: 'winter', 2: 'spring', 3: 'summer', 4: "autumn"} + +month = int(input('Enter month from 1 to 12: ')) + +if month == 1: + print(seasons_dict.get(1)) + print(seasons_list[0]) +elif month == 2: + print(seasons_dict.get(1)) + print(seasons_list[1]) +elif month == 12: + print(seasons_dict.get(1)) + print(seasons_list[11]) +elif month == 3: + print(seasons_dict.get(2)) + print(seasons_list[2]) +elif month == 4: + print(seasons_dict.get(2)) + print(seasons_list[3]) +elif month == 5: + print(seasons_dict.get(2)) + print(seasons_list[4]) +elif month == 6: + print(seasons_dict.get(3)) + print(seasons_list[5]) +elif month == 7: + print(seasons_dict.get(3)) + print(seasons_list[6]) +elif month == 8: + print(seasons_dict.get(3)) + print(seasons_list[7]) +elif month == 9: + print(seasons_dict.get(4)) + print(seasons_list[8]) +elif month == 10: + print(seasons_dict.get(4)) + print(seasons_list[9]) +elif month == 11: + print(seasons_dict.get(4)) + print(seasons_list[10]) +else: + print("No such month exists.") \ No newline at end of file diff --git a/HW_2/hw_2_4.py b/HW_2/hw_2_4.py new file mode 100644 index 0000000..5c06061 --- /dev/null +++ b/HW_2/hw_2_4.py @@ -0,0 +1,16 @@ +# 4. Пользователь вводит строку из нескольких слов, разделённых пробелами. +# Вывести каждое слово с новой строки. +# Строки необходимо пронумеровать. +# Если в слово длинное, выводить только первые 10 букв в слове. + +my_str = input("Enter any string: ") +my_word = [] +num = 1 +for el in range(my_str.count(' ') + 1): + my_word = my_str.split() + if len(str(my_word)) <= 10: + print(f" {num} {my_word[el]}") + num += 1 + else: + print(f" {num} {my_word[el][:10]}") + num += 1 diff --git a/HW_2/hw_2_5.py b/HW_2/hw_2_5.py new file mode 100644 index 0000000..3bc4d2a --- /dev/null +++ b/HW_2/hw_2_5.py @@ -0,0 +1,27 @@ +# 5. Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел. +# У пользователя необходимо запрашивать новый элемент рейтинга. +# Если в рейтинге существуют элементы с одинаковыми значениями, +# то новый элемент с тем же значением должен разместиться после них. +# Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2. +# Пользователь ввел число 3. Результат: 7, 5, 3, 3, 3, 2. +# Пользователь ввел число 8. Результат: 8, 7, 5, 3, 3, 2. +# Пользователь ввел число 1. Результат: 7, 5, 3, 3, 2, 1. +# Набор натуральных чисел можно задать непосредственно в коде, например, my_list = [7, 5, 3, 3, 2]. + + +number = int(input("Enter number: ")) +my_list = [7, 5, 3, 3, 2] +c = my_list.count(number) +for element in my_list: + if c > 0: + i = my_list.index(number) + my_list.insert(i + c, number) + break + else: + if number > element: + j = my_list.index(element) + my_list.insert(j, number) + break + elif number < my_list[len(my_list) - 1]: + my_list.append(number) +print(my_list) diff --git a/HW_2/hw_2_6.py b/HW_2/hw_2_6.py new file mode 100644 index 0000000..138509f --- /dev/null +++ b/HW_2/hw_2_6.py @@ -0,0 +1,41 @@ +# 6. * Реализовать структуру данных «Товары». +# Она должна представлять собой список кортежей. +# Каждый кортеж хранит информацию об отдельном товаре. +# В кортеже должно быть два элемента — номер товара и словарь с параметрами +# (характеристиками товара: название, цена, количество, единица измерения). +# Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. +# Пример готовой структуры: +# [ +# (1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), +# (2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), +# (3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) +# ] +# Необходимо собрать аналитику о товарах. +# Реализовать словарь, в котором каждый ключ — характеристика товара, например название, +# а значение — список значений-характеристик, например список названий товаров. +# Пример: +# { +# “название”: [“компьютер”, “принтер”, “сканер”], +# “цена”: [20000, 6000, 2000], +# “количество”: [5, 2, 7], +# “ед”: [“шт.”] } + +goods = [] +while input("Would you like add product? Enter yes/no: ") == 'yes': + number = int(input("Enter product number: ")) + features = {} + while input("Would you like add product parameters? Enter yes/no: ") == 'yes': + feature_key = input("Enter feature product: ") + feature_value = input("Enter feature value product: ") + features[feature_key] = feature_value + goods.append(tuple([number, features])) +print(goods) +goods = [(1, {'name': 'comp', 'price': '11'}), (2, {'name': 'pri', 'price': '22'})] +analitics = {} +for good in goods: + for feature_key, feature_value in good[1].items(): + if feature_key in analitics: + analitics[feature_key].append(feature_value) + else: + analitics[feature_key] = [feature_value] +print(analitics) diff --git a/HW_3/hw_3_1.py b/HW_3/hw_3_1.py new file mode 100644 index 0000000..dbd8136 --- /dev/null +++ b/HW_3/hw_3_1.py @@ -0,0 +1,11 @@ +# 1. Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. +# Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль. + +def division(num1, num2): + try: + return num1 / num2 + except ZeroDivisionError as err: + print('Error: ', err) + + +print(division(2, 4)) \ No newline at end of file diff --git a/HW_3/hw_3_2.py b/HW_3/hw_3_2.py new file mode 100644 index 0000000..1412c10 --- /dev/null +++ b/HW_3/hw_3_2.py @@ -0,0 +1,19 @@ +# 2. Реализовать функцию, принимающую несколько параметров, описывающих данные пользователя: +# имя, фамилия, год рождения, город проживания, email, телефон. +# Функция должна принимать параметры как именованные аргументы. +# Реализовать вывод данных о пользователе одной строкой. + +def user_info(name, surname, birth_date, city, email, phone): + return f"Name: {name}\n" \ + f'Surname: {surname}\n' \ + f"Birth date: {birth_date}\n" \ + f"City: {city}\n" \ + f"Email: {email}\n" \ + f"Phone number: {phone}" + +print(user_info(name="Andrey", + surname='Krylov', + birth_date='14.11.1988', + city='Moscow', + email="ak.chemp@gmail.com", + phone='+79779264986')) \ No newline at end of file diff --git a/HW_3/hw_3_3.py b/HW_3/hw_3_3.py new file mode 100644 index 0000000..680c72f --- /dev/null +++ b/HW_3/hw_3_3.py @@ -0,0 +1,8 @@ +# 3. Реализовать функцию my_func(), которая принимает три позиционных аргумента, +# и возвращает сумму наибольших двух аргументов. + +def sum_of_max(*args): + return sum(args) - min(args) + + +print(sum_of_max(0, 1, 2)) diff --git a/HW_3/hw_3_4.py b/HW_3/hw_3_4.py new file mode 100644 index 0000000..820b2c5 --- /dev/null +++ b/HW_3/hw_3_4.py @@ -0,0 +1,20 @@ +#4. Программа принимает действительное положительное число x и целое отрицательное число y. +# Необходимо выполнить возведение числа x в степень y. +# Задание необходимо реализовать в виде функции my_func(x, y). +# При решении задания необходимо обойтись без встроенной функции возведения числа в степень. +#: попробуйте решить задачу двумя способами. +# Первый — возведение в степень с помощью оператора **. +# Второй — более сложная реализация без оператора **, предусматривающая использование цикла. + +def power(base, pwr): + return 1 / (base ** pwr) + +def power2(base, pwr): + res = 1 + for n in range(pwr): + res *= base + return 1 / res + + +print(power(2, 5)) +print(power2(2, 5)) \ No newline at end of file diff --git a/HW_3/hw_3_5.py b/HW_3/hw_3_5.py new file mode 100644 index 0000000..ad0c89a --- /dev/null +++ b/HW_3/hw_3_5.py @@ -0,0 +1,24 @@ +5. # Программа запрашивает у пользователя строку чисел, разделенных пробелом. + + +# При нажатии Enter должна выводиться сумма чисел. +# Пользователь может продолжить ввод чисел, разделенных пробелом и снова нажать Enter. +# Сумма вновь введенных чисел будет добавляться к уже подсчитанной сумме. +# Но если вместо числа вводится специальный символ, выполнение программы завершается. +# Если специальный символ введен после нескольких чисел, +# то вначале нужно добавить сумму этих чисел к полученной ранее сумме и после этого завершить программу. + +def summator(): + total_sum = 0 + while True: + num_list = input('Enter numbers: ') + stopper = num_list.count('!') # считаем кол-во стоп символов в строке + if stopper: + total_sum += sum(map(int, num_list[:num_list.index('!') - 1].split())) + break + total_sum += sum(map(int, num_list.split())) + print(f'Temporary sum value: {total_sum}') + return total_sum + + +print(summator()) diff --git a/HW_3/hw_3_6.py b/HW_3/hw_3_6.py new file mode 100644 index 0000000..ecdc86e --- /dev/null +++ b/HW_3/hw_3_6.py @@ -0,0 +1,13 @@ +"""6. Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, +но с прописной первой буквой. +Например, print(int_func(‘text’)) -> Text. +Продолжить работу над заданием. В программу должна попадать строка из слов, разделенных пробелом. +Каждое слово состоит из латинских букв в нижнем регистре. Сделать вывод исходной строки, +но каждое слово должно начинаться с заглавной буквы. Необходимо использовать написанную ранее функцию int_func().""" + + +def int_func(word): + return word.capitalize() + +word_string = input('Enter the words: ') +print(' '.join(list(map(int_func, word_string.split())))) diff --git a/HW_4/hw_4_1.py b/HW_4/hw_4_1.py new file mode 100644 index 0000000..f9f78e5 --- /dev/null +++ b/HW_4/hw_4_1.py @@ -0,0 +1,15 @@ +"""1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. + В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. + Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами.""" + +from sys import argv + + +def salary(time, stavka, premia): + try: + return time * stavka + premia + except ValueError as err: + print('Error: ', err) + + +print(f'Salary - {salary(*map(int, argv[1:]))}') diff --git a/HW_4/hw_4_2.py b/HW_4/hw_4_2.py new file mode 100644 index 0000000..29d6704 --- /dev/null +++ b/HW_4/hw_4_2.py @@ -0,0 +1,12 @@ +"""2. Представлен список чисел. Необходимо вывести элементы исходного списка, + значения которых больше предыдущего элемента. +Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. + Для формирования списка использовать генератор. +Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +Результат: [12, 44, 4, 10, 78, 123].""" + + +my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55] +more_then = [my_list[num] for num in range(1, len(my_list)) if my_list[num] > my_list[num - 1]] +print(more_then) + diff --git a/HW_4/hw_4_3.py b/HW_4/hw_4_3.py new file mode 100644 index 0000000..5d4a10d --- /dev/null +++ b/HW_4/hw_4_3.py @@ -0,0 +1,5 @@ +"""3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. +Подсказка: использовать функцию range() и генератор.""" + +uniq_list = [el for el in range(20, 241) if el % 20 == 0 or el % 21 == 0] +print(uniq_list) \ No newline at end of file diff --git a/HW_4/hw_4_4.py b/HW_4/hw_4_4.py new file mode 100644 index 0000000..baaa0b0 --- /dev/null +++ b/HW_4/hw_4_4.py @@ -0,0 +1,13 @@ +"""4. Представлен список чисел. Определить элементы списка, не имеющие повторений. +Сформировать итоговый массив чисел, соответствующих требованию. +Элементы вывести в порядке их следования в исходном списке. + Для выполнения задания обязательно использовать генератор. +Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +Результат: [23, 1, 3, 10, 4, 11]""" + +from random import randint + +my_list = [randint(-10, 10) for i in range(20)] +# my_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +uniq_list = [el for el in my_list if my_list.count(el) == 1] +print(f'Source list\n{my_list}\nNo rep list\n{uniq_list}') diff --git a/HW_4/hw_4_5.py b/HW_4/hw_4_5.py new file mode 100644 index 0000000..1afad24 --- /dev/null +++ b/HW_4/hw_4_5.py @@ -0,0 +1,14 @@ +"""5. Реализовать формирование списка, используя функцию range() и возможности генератора. + В список должны войти четные числа от 100 до 1000 (включая границы). + Необходимо получить результат вычисления произведения всех элементов списка. +Подсказка: использовать функцию reduce().""" + +from functools import reduce + + +def mul_list(el_1, el_2): + return el_1 * el_2 + + +uniq_list = [el for el in range(100, 1001, 2)] +print(f'List\n{uniq_list}\nMultip of numbers\n{reduce(mul_list, uniq_list)}') diff --git a/HW_4/hw_4_6.py b/HW_4/hw_4_6.py new file mode 100644 index 0000000..a46c9d8 --- /dev/null +++ b/HW_4/hw_4_6.py @@ -0,0 +1,27 @@ +"""6. Реализовать два небольших скрипта: +а) итератор, генерирующий целые числа, начиная с указанного, +б) итератор, повторяющий элементы некоторого списка, определенного заранее. +Подсказка: использовать функцию count() и cycle() модуля itertools. +Обратите внимание, что создаваемый цикл не должен быть бесконечным. Необходимо предусмотреть условие его завершения. +Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. +Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено.""" + +from itertools import count, cycle + +print("The program generates integers starting from the specified one. To generate a number" + "You must press Enter. For exit - q") +for i in count(int(input('Enter start number: '))): + print(i, end='') + quit = input() + if quit == 'q': + break + +print("The program repeats the elements of the list. To generate the next repetition" + "press Enter, to exit - enter q.") +u_list = input("enter a list, separating the items with a space: ").split() +iter = cycle(u_list) +quit = None + +while quit != 'q': + print(next(iter), end='') + quit = input() \ No newline at end of file diff --git a/HW_4/hw_4_7.py b/HW_4/hw_4_7.py new file mode 100644 index 0000000..36a8b6d --- /dev/null +++ b/HW_4/hw_4_7.py @@ -0,0 +1,16 @@ +"""7. Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. + При вызове функции должен создаваться объект-генератор. Функция должна вызываться следующим образом: for el in fact(n). +Функция отвечает за получение факториала числа, + а в цикле необходимо выводить только первые n чисел, начиная с 1! и до n!. +Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24.""" + + +def fact_gen(number): + f_num = 1 + for i in range(1, number + 1): + f_num *= i + yield f_num + + +for el in fact_gen(5): + print(el)