diff --git a/1_if1.py b/1_if1.py index be736084..05908273 100644 --- a/1_if1.py +++ b/1_if1.py @@ -4,11 +4,11 @@ Условный оператор: Возраст -* Попросить пользователя ввести возраст при помощи input и положить +* Попросить пользователя ввести возраст при помощи input и положить результат в переменную -* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: +* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: учиться в детском саду, школе, ВУЗе или работать -* Вызвать функцию, передав ей возраст пользователя и положить результат +* Вызвать функцию, передав ей возраст пользователя и положить результат работы функции в переменную * Вывести содержимое переменной на экран @@ -19,7 +19,21 @@ def main(): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass +def check_age(user_age): + if 0 < user_age <7: + return 'Вы должны учиться в детском саду.' + elif 7 <= user_age < 17: + return 'Вы должны учиться в школе.' + elif 17 <= user_age < 22: + return 'Вы должны учиться в ВУЗе.' + elif 22 <= user_age < 65: + return 'Вы должны работать.' + else: + return 'Вы или еще не родились, или уже на пенсии.' +user_age = int(input('Сколько вам полных лет? Введите число.')) +print(check_age(user_age)) + + if __name__ == "__main__": main() diff --git a/2_if2.py b/2_if2.py index 0f1644f3..629560e0 100644 --- a/2_if2.py +++ b/2_if2.py @@ -5,12 +5,12 @@ Условный оператор: Сравнение строк * Написать функцию, которая принимает на вход две строки -* Проверить, является ли то, что передано функции, строками. +* Проверить, является ли то, что передано функции, строками. Если нет - вернуть 0 * Если строки одинаковые, вернуть 1 * Если строки разные и первая длиннее, вернуть 2 * Если строки разные и вторая строка 'learn', возвращает 3 -* Вызвать функцию несколько раз, передавая ей разные праметры +* Вызвать функцию несколько раз, передавая ей разные параметры и выводя на экран результаты """ @@ -20,7 +20,23 @@ def main(): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - +def check_lines(line1, line2): + if not type(line1) == str or not type(line2) == str: + return 0 + elif line1 == line2: + return 1 + elif len(line1) > len(line2): + return 2 + elif line1 != line2 and line2 == 'learn': + return 3 + +print(check_lines("Bigwall", "Bigwall")) # 1 +print(check_lines("Bigwall", "wallBig")) # None +print(check_lines("learn", "learn")) # 1 +print(check_lines("Python", "learn")) # 3 +print(check_lines("longerstring", "short")) # 2 +print(check_lines(123, "str")) # 0 +print(check_lines("str", 123)) # 0 + if __name__ == "__main__": main() diff --git a/3_for.py b/3_for.py index 5ca9f504..4295e5f4 100644 --- a/3_for.py +++ b/3_for.py @@ -4,9 +4,9 @@ Цикл for: Продажи товаров -* Дан список словарей с данными по колличеству проданных телефонов +* Дан список словарей с данными по количеству проданных телефонов [ - {'product': 'iPhone 12', 'items_sold': [363, 500, 224, 358, 480, 476, 470, 216, 270, 388, 312, 186]}, + {'product': 'iPhone 12', 'items_sold': [363, 500, 224, 358, 480, 476, 470, 216, 270, 388, 312, 186]}, {'product': 'Xiaomi Mi11', 'items_sold': [317, 267, 290, 431, 211, 354, 276, 526, 141, 453, 510, 316]}, {'product': 'Samsung Galaxy 21', 'items_sold': [343, 390, 238, 437, 214, 494, 441, 518, 212, 288, 272, 247]}, ] @@ -21,7 +21,61 @@ def main(): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - + + sales_data_base = [ + {'product': 'iPhone 12', 'items_sold': [363, 500, 224, 358, 480, 476, 470, 216, 270, 388, 312, 186]}, + {'product': 'Xiaomi Mi11', 'items_sold': [317, 267, 290, 431, 211, 354, 276, 526, 141, 453, 510, 316]}, + {'product': 'Samsung Galaxy 21', 'items_sold': [343, 390, 238, 437, 214, 494, 441, 518, 212, 288, 272, 247]}, + ] + def total_sales(product_sold): #Функция суммирует продажи по продукту + item_sold_sum = 0 + for sale in product_sold: + item_sold_sum += sale + return item_sold_sum + def sales_avg(product_sold): #Функция суммирует средние продажи по продукту + total = 0 + for sale in product_sold: + total += sale + return total / len(product_sold) + + def total_sales_all (all_products): #Функция суммирует суммы продаж по продукту + total_sum = 0 + for item in all_products: + total_sum += total_sales(item['items_sold']) + return total_sum + def total_sales_avg (all_products): #Функция считает средние продажи по базе + total_sum = 0 + total_items = 0 + for item in all_products: + total_sum += sum(item['items_sold']) + total_items += len(item['items_sold']) + return total_sum / total_items + + + + # Cуммарноe количества продаж для каждого продукта + for item in sales_data_base: + product = item['product'] # Название товара + sales = item['items_sold'] # Список продаж + total = total_sales(sales) # Вызов функции с передачей списка продаж + print(f"Суммарное количество продаж для {product}: {total}") + + + #Cреднее количество продаж для каждого продукта + for item in sales_data_base: + product = item['product'] + sales = item['items_sold'] + avg = round(sales_avg(sales), 2) + print(f"Среднее количество продаж для {product}: {avg}") + + #Cуммарное количество продаж всех товаров + total_sales = total_sales_all(sales_data_base) + print(f'Общие продажи составляют {total_sales}') + + #Среднее количество продаж всех товаров + total_sales_average = total_sales_avg(sales_data_base) + print(f'Средние продажи по всей базе товаров составляют {total_sales_average}') + + if __name__ == "__main__": main() diff --git a/4_while1.py b/4_while1.py index b5791517..0dafd790 100644 --- a/4_while1.py +++ b/4_while1.py @@ -4,9 +4,9 @@ Цикл while: hello_user -* Напишите функцию hello_user(), которая с помощью функции input() спрашивает +* Напишите функцию hello_user(), которая с помощью функции input() спрашивает пользователя “Как дела?”, пока он не ответит “Хорошо” - + """ @@ -14,8 +14,14 @@ def hello_user(): """ Замените pass на ваш код """ - pass + while True: + user_say = input('Как дела?') + if user_say == 'Хорошо': + print('Ничего хорошего!') + break + else: + print('Попробуем ещё раз?'.format(user_say)) + - if __name__ == "__main__": hello_user() diff --git a/5_while2.py b/5_while2.py index 49012dfd..768ecee8 100644 --- a/5_while2.py +++ b/5_while2.py @@ -12,16 +12,23 @@ Пользователь: Что делаешь? Программа: Программирую - -""" -questions_and_answers = {} +""" +dic = {"Как дела?": "Хорошо!", "Что делаешь?": "Программирую", "Трудно?": "Очень!"} def ask_user(answers_dict): """ Замените pass на ваш код """ - pass - + + while True: + user_question = input("Пользователь:") + if user_question in dic: + print(f'Программа: {dic[user_question]}') + else: + print("Что за странные вопросы? У меня нет ответа.") + break + ask_user() if __name__ == "__main__": - ask_user(questions_and_answers) + ask_user(dic) + diff --git a/6_exception1.py b/6_exception1.py index 3ea9d054..23aec571 100644 --- a/6_exception1.py +++ b/6_exception1.py @@ -4,17 +4,27 @@ Исключения: KeyboardInterrupt -* Перепишите функцию hello_user() из задания while1, чтобы она - перехватывала KeyboardInterrupt, писала пользователю "Пока!" +* Перепишите функцию hello_user() из задания while1, чтобы она + перехватывала KeyboardInterrupt, писала пользователю "Пока!" и завершала работу при помощи оператора break - + """ def hello_user(): """ Замените pass на ваш код """ - pass - + try: + while True: + user_say = input('Как дела?') + if user_say == 'Хорошо': + print('Ничего хорошего!') + break + else: + print('Попробуем ещё раз?'.format(user_say)) + except KeyboardInterrupt: + print("Исполнение программы остановлено пользователем") + + if __name__ == "__main__": hello_user() diff --git a/7_exception2.py b/7_exception2.py index d4bd8a39..86384d0a 100644 --- a/7_exception2.py +++ b/7_exception2.py @@ -10,19 +10,52 @@ * Первые два нужно приводить к вещественному числу при помощи float(), а третий - к целому при помощи int() и перехватывать исключения ValueError и TypeError, если приведение типов не сработало. - + """ +stock = [ + {'name': 'iPhone 12', 'stock': 24, 'price': 65432, + 'discount': 25}, + {'name': 'Samsung Galaxy S21', 'stock': 8, 'price': 50000, + 'discount': 10}, + {'name': '', 'stock': 18, 'price': 10000, + 'discount': 10} + ] + +def discounted(price, discount, max_discount=20, phone_name=''): + try: + price = float(price) + discount = float(discount) + max_discount = int(max_discount) + except(ValueError, TypeError): + print('Ошибка в типе аргумента') + return None + + + price = abs(price) + discount = abs(discount) + max_discount = abs(max_discount) + if max_discount >= 100: + raise ValueError('Максимальная скидка не должна быть больше 100') + if discount >= max_discount: + return price + elif 'iphone' in phone_name.lower() or not phone_name: + return price + else: + return price - (price * discount / 100) + + for phone in stock: + price_final = discounted(phone['price'], phone['discount'], phone_name=phone('name')) + if price_final is not None: + phone['price_final'] = price_final + else: + print('Ошибка в расчетах') + +print(discounted(100, 2)) +print(discounted(100, "3")) +print(discounted("100", "4.5")) +print(discounted("five", 5)) +print(discounted("сто", "десять")) +print(discounted(100.0, 5, "10")) + + -def discounted(price, discount, max_discount=20) - """ - Замените pass на ваш код - """ - pass - -if __name__ == "__main__": - print(discounted(100, 2)) - print(discounted(100, "3")) - print(discounted("100", "4.5")) - print(discounted("five", 5)) - print(discounted("сто", "десять")) - print(discounted(100.0, 5, "10")) diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 1cf9ea19..0021e46b 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -1,57 +1,67 @@ -""" -Домашнее задание №1 - -Использование библиотек: ephem - -* Установите модуль ephem -* Добавьте в бота команду /planet, которая будет принимать на вход - название планеты на английском, например /planet Mars -* В функции-обработчике команды из update.message.text получите - название планеты (подсказка: используйте .split()) -* При помощи условного оператора if и ephem.constellation научите - бота отвечать, в каком созвездии сегодня находится планета. - -""" +import ephem import logging +import datetime +from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, ContextTypes, filters +from telegram import Update -from telegram.ext import Updater, CommandHandler, MessageHandler, Filters -logging.basicConfig(format='%(name)s - %(levelname)s - %(message)s', - level=logging.INFO, - filename='bot.log') +logging.basicConfig(format='%(name)s - %(levelname)s - %(message)s', level=logging.INFO, filename='bot.log') -PROXY = { - 'proxy_url': 'socks5://t1.learn.python.ru:1080', - 'urllib3_proxy_kwargs': { - 'username': 'learn', - 'password': 'python' - } -} +async def greet_user(update: Update, context: ContextTypes.DEFAULT_TYPE): + await update.message.reply_text('Привет! Введи название планеты на английском в таком формате: /planet Mars') + print('Вызван /start') + print(update) - -def greet_user(update, context): - text = 'Вызван /start' +#дальше - GPT- coding, но осмысленный :) И вцелом приглось структуру немного поменять, т.к библиотека Python-telegram изменилась. Код из видео не работал +async def planet_info(update: Update, context: ContextTypes.DEFAULT_TYPE): + user_text = update.message.text + try: + # Разделяем команду и название планеты + command, planet_name = user_text.split(maxsplit=1) + except ValueError: + await update.message.reply_text("Пожалуйста, введите название планеты после команды /planet.") + return + + # Приводим название планеты к правильному формату + planet_name_capitalized = planet_name.capitalize() + + # Проверяем, существует ли планета в модуле ephem + if hasattr(ephem, planet_name_capitalized): + # Получаем текущую дату + date = datetime.datetime.now() + # Создаём объект планеты + planet = getattr(ephem, planet_name_capitalized)(date) + # Определяем созвездие, в котором находится планета + constellation = ephem.constellation(planet) + # Отправляем ответ пользователю + await update.message.reply_text(f"Планета {planet_name_capitalized} сейчас находится в созвездии {constellation[1]}.") + else: + await update.message.reply_text("Извините, я не знаю такую планету. Пожалуйста, проверьте название и попробуйте снова.") + + +async def talk_to_me(update: Update, context: ContextTypes.DEFAULT_TYPE): + text = update.message.text print(text) - update.message.reply_text(text) + await update.message.reply_text(text) +def main(): + mybot = ApplicationBuilder().token('7054240709:AAGrU_8F5UD5GO1nxgxDXBamrVFjKfbBGNs').build() -def talk_to_me(update, context): - user_text = update.message.text - print(user_text) - update.message.reply_text(text) + start_handler = CommandHandler('start', greet_user) + mybot.add_handler(start_handler) -def main(): - mybot = Updater("КЛЮЧ, КОТОРЫЙ НАМ ВЫДАЛ BotFather", request_kwargs=PROXY, use_context=True) - dp = mybot.dispatcher - dp.add_handler(CommandHandler("start", greet_user)) - dp.add_handler(MessageHandler(Filters.text, talk_to_me)) + planet_handler = CommandHandler('planet', planet_info) + mybot.add_handler(planet_handler) + - mybot.start_polling() - mybot.idle() + message_handler = MessageHandler(filters.TEXT & ~filters.COMMAND, talk_to_me) + mybot.add_handler(message_handler) + logging.info('Бот в деле...') + mybot.run_polling() -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/drafts-homework/exceptions.py b/drafts-homework/exceptions.py new file mode 100644 index 00000000..9c8ce82f --- /dev/null +++ b/drafts-homework/exceptions.py @@ -0,0 +1,59 @@ +''' +import random +def cutcake (people): + try: + z = 1/people + print(f'Каждый получит {z} пирога') + except (ZeroDivisionError, TypeError): + print('Не могу поделить') + +while True: + p = random.randint(1, 10) + cutcake(p) +''' + +stock = [ + {'name': 'iPhone 12', 'stock': 24, 'price': 65432, + 'discount': 25}, + {'name': 'Samsung Galaxy S21', 'stock': 8, 'price': 50000, + 'discount': 10}, + {'name': '', 'stock': 18, 'price': 10000, + 'discount': 10} + ] + +def discounted(price, discount, max_discount=20, phone_name=''): + try: + price = float(price) + discount = float(discount) + max_discount = int(max_discount) + except(ValueError, TypeError): + print('Ошибка в типе аргумента') + return None + + + price = abs(price) + discount = abs(discount) + max_discount = abs(max_discount) + if max_discount >= 100: + raise ValueError('Максимальная скидка не должна быть больше 100') + if discount >= max_discount: + return price + elif 'iphone' in phone_name.lower() or not phone_name: + return price + else: + return price - (price * discount / 100) + + for phone in stock: + price_final = discounted(phone['price'], phone['discount'], phone_name=phone('name')) + if price_final is not None: + phone['price_final'] = price_final + else: + print('Ошибка в расчетах') + +print(discounted(100, 2)) +print(discounted(100, "3")) +print(discounted("100", "4.5")) +print(discounted("five", 5)) +print(discounted("сто", "десять")) +print(discounted(100.0, 5, "10")) + diff --git a/drafts-homework/for.py b/drafts-homework/for.py new file mode 100644 index 00000000..84d56aec --- /dev/null +++ b/drafts-homework/for.py @@ -0,0 +1,87 @@ +''' +for number in range(3): + print(f'Номер{number}') + +for letter in 'Python': + print(letter.upper()) + +my_string = 'Привет , я учу Python !' +for word in my_string.split(): + print(f'Длина слова {word}: {len(word)}') + +student_score = [3, 5, 4, 4, 2] +avg_score = 0 +for score in student_score: + avg_score = avg_score + score +class_avg = avg_score / len(student_score) +print(class_avg) +''' + + + +stock = [ + {'name': 'iPhone 12', 'stock': 24, 'price': 65432, + 'discount': 25}, + {'name': 'Samsung Galaxy S21', 'stock': 8, 'price': 50000, + 'discount': 10}, + {'name': '', 'stock': 18, 'price': 10000, + 'discount': 10} +] +def discounted(price, discount, max_discount = 30, phone_name = ''): + price = abs(price) + discount = abs(discount) + max_discount = abs(max_discount) + if max_discount >= 100: + raise ValueError('Максимальная скидка не должна быть больше 100') + if discount >= max_discount: + return price + elif 'iphone' in phone_name.lower() or not phone_name: + return price + else: + return price - (price * discount / 100) + +for phone in stock: + phone['price_final'] = discounted(phone['price'], phone['discount'], phone_name = phone['name']) +print(stock) + + +classes = [ + {'name': '3А', 'scores': [3, 4, 4, 5, 2]}, + {'name': '3Б', 'scores': [5, 5, 3, 2, 2]}, + {'name': '3В', 'scores': [4, 5, 3, 5, 4]} +] + +def count_class_avg(student_scores): + scores_sum = 0 + for score in student_scores: + scores_sum += score + return scores_sum / (len(student_scores)) + +school_avg_sum = 0 +for one_class in classes: + class_avg = count_class_avg(one_class['scores']) + print(f'Средняя оценка класса {one_class["name"]}: {class_avg}') + school_avg_sum += class_avg +school_avg = round(school_avg_sum / len(classes), 2) +print(f'Средняя оценка по школе {school_avg}') + +def total_sales(product_sold): + # Функция для подсчёта суммарного количества продаж + item_sold_sum = 0 + for sale in product_sold: + item_sold_sum += sale + return item_sold_sum + +# Список данных +sales_data = [ + {'product': 'iPhone 12', 'items_sold': [363, 500, 224, 358, 480, 476, 470, 216, 270, 388, 312, 186]}, + {'product': 'Xiaomi Mi11', 'items_sold': [317, 267, 290, 431, 211, 354, 276, 526, 141, 453, 510, 316]}, + {'product': 'Samsung Galaxy 21', 'items_sold': [343, 390, 238, 437, 214, 494, 441, 518, 212, 288, 272, 247]}, +] + +# Подсчёт и вывод суммарного количества продаж для каждого товара +for item in sales_data: + product = item['product'] # Название товара + sales = item['items_sold'] # Список продаж + total = total_sales(sales) # Вызов функции с передачей списка продаж + print(f"Суммарное количество продаж для {product}: {total}") diff --git a/drafts-homework/lesson_if.py b/drafts-homework/lesson_if.py new file mode 100644 index 00000000..43e00301 --- /dev/null +++ b/drafts-homework/lesson_if.py @@ -0,0 +1,46 @@ +balance = 100 +price = 50 +in_stock = 0 +print(bool(balance > price)) +print(bool(in_stock)) +if balance > price and in_stock: + print('Одобряем оплату покупки') +elif not in_stock: + print('Товара нет в наличии') +else: + print('Пожалуйста, пополните баланс') + +def check_weather(temperature): + if temperature < 0: + return 'На улице холодно' + elif 0 <= temperature <= 15: + return "На улице прохладно" + elif 16 <= temperature <= 29: + return 'На улице тепло' + elif 30 <= temperature: + return 'На улице жарко' + else: + return 'Не работает!' +print(check_weather(-10)) # На улице холодно +print(check_weather(15)) # На улице прохладно +print(check_weather(16)) # На улице тепло +print(check_weather(30)) # На улице жарко + +def discounted(price, discount, max_discount = 20, phone_name = ''): + price = abs(price) + discount = abs(discount) + max_discount = abs(max_discount) + if max_discount >= 100: + raise ValueError('Максимальная скидка не должна быть больше 100') + if discount >= max_discount: + return price + elif 'iphone' in phone_name.lower() or not phone_name: + return price + else: + return price - (price * discount / 100) +new_price = discounted(100000, 10, phone_name = 'iPhone 12') +print(new_price) +new_price = discounted(40000, 20, phone_name='Samsung Galaxy S21' ) +print(new_price) +new_price = discounted(5000, 20) # Здесь возникает вопрос. Почему в выводе скидка не считается? +print(new_price) diff --git a/drafts-homework/main.py b/drafts-homework/main.py new file mode 100644 index 00000000..5596b447 --- /dev/null +++ b/drafts-homework/main.py @@ -0,0 +1,16 @@ +# This is a sample Python script. + +# Press Shift+F10 to execute it or replace it with your code. +# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. + + +def print_hi(name): + # Use a breakpoint in the code line below to debug your script. + print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint. + + +# Press the green button in the gutter to run the script. +if __name__ == '__main__': + print_hi('PyCharm') + +# See PyCharm help at https://www.jetbrains.com/help/pycharm/ diff --git a/drafts-homework/modules.py b/drafts-homework/modules.py new file mode 100644 index 00000000..9341b909 --- /dev/null +++ b/drafts-homework/modules.py @@ -0,0 +1,18 @@ +''' +from collections import Counter + +phones = ['iPhone XS', 'Samsung Galaxy S10', 'Xiaomi S18', 'iPhone XS', 'iPhone XS'] +count = Counter(phones) +print(count['iPhone XS'], count['Hello']) + +text = 'Ехал Грека через реку, видит ГРека в реке рак.'.lower().replace(' ', '') + +count = Counter(text) +print(count) +''' + +import ephem +mars = ephem.Mars('2000/01/01') +const = ephem.constellation(mars) +print(const) + diff --git a/drafts-homework/price.py b/drafts-homework/price.py new file mode 100644 index 00000000..94a7acdd --- /dev/null +++ b/drafts-homework/price.py @@ -0,0 +1,12 @@ +def discounted(price, discount, max_discount = 20): + price = abs(price) + discount = abs(discount) + max_discount = abs(max_discount) + if max_discount >= 100: + raise ValueError('Максимальная скидка не должна быть больше 100') + if discount >= 100: + price_with_discount = price + else: + price_with_discount = price - (price * discount / 100) + return price_with_discount +print(discounted(100, 5)) diff --git a/drafts-homework/while.py b/drafts-homework/while.py new file mode 100644 index 00000000..239a3c94 --- /dev/null +++ b/drafts-homework/while.py @@ -0,0 +1,12 @@ +x = 1 +while x < 5: + print(x) + x += 1 + +while True: + user_say = input("Скажи что-нибудь:") + if user_say == "Пока": + print('Ну, пока!') + break + else: + print('Сам ты {}'. format(user_say)) \ No newline at end of file