From bffc66022bd95e281b3d0edf625cb69e55007bf6 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Wed, 21 Feb 2024 23:28:32 +0300 Subject: [PATCH 1/6] add solution 1_if1; fix after review 2_if2; add solution 3_for --- 1_if1.py | 25 +++++++++++++++++++++---- 2_if2.py | 24 ++++++++++++++++++++---- 3_for.py | 40 +++++++++++++++++++++++++++++++++++++--- 3 files changed, 78 insertions(+), 11 deletions(-) diff --git a/1_if1.py b/1_if1.py index be736084..eaed6deb 100644 --- a/1_if1.py +++ b/1_if1.py @@ -4,22 +4,39 @@ Условный оператор: Возраст -* Попросить пользователя ввести возраст при помощи input и положить +* Попросить пользователя ввести возраст при помощи input и положить результат в переменную -* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: +* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: учиться в детском саду, школе, ВУЗе или работать -* Вызвать функцию, передав ей возраст пользователя и положить результат +* Вызвать функцию, передав ей возраст пользователя и положить результат работы функции в переменную * Вывести содержимое переменной на экран """ + +def define_activity(user_age: int): + if user_age > 0 and user_age < 7: + print('В этом возрасте вы можете учиться в детском саду.') + elif user_age >= 7 and user_age < 18: + print('В этом возрасте вы можете учиться в школе.') + elif user_age >= 18 and user_age < 100: + print('В этом возрасте вы можете учиться в ВУЗе или работать.') + + def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + print('Напишите пожалуйста свой возраст') + user_age = int(input()) + if user_age > 0 and user_age < 100: + activity = define_activity(user_age) + return activity + else: + raise ValueError('неправильный возраст') + if __name__ == "__main__": main() diff --git a/2_if2.py b/2_if2.py index 0f1644f3..a243ccbe 100644 --- a/2_if2.py +++ b/2_if2.py @@ -5,22 +5,38 @@ Условный оператор: Сравнение строк * Написать функцию, которая принимает на вход две строки -* Проверить, является ли то, что передано функции, строками. +* Проверить, является ли то, что передано функции, строками. Если нет - вернуть 0 * Если строки одинаковые, вернуть 1 * Если строки разные и первая длиннее, вернуть 2 * Если строки разные и вторая строка 'learn', возвращает 3 -* Вызвать функцию несколько раз, передавая ей разные праметры +* Вызвать функцию несколько раз, передавая ей разные праметры и выводя на экран результаты """ + +def check_two_strings(first_string: str, second_string: str) -> int: + if type(first_string) != str or type(second_string) != str: + return 0 + if first_string == second_string: + return 1 + if len(first_string) > len(second_string): + return 2 + if first_string != second_string and second_string == 'learn': + return 3 + + def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - + print(check_two_strings('s', 5)) + print(check_two_strings('s', 's')) + print(check_two_strings('spk', 's')) + print(check_two_strings('s', 'learn')) + + if __name__ == "__main__": main() diff --git a/3_for.py b/3_for.py index 5ca9f504..87fa0452 100644 --- a/3_for.py +++ b/3_for.py @@ -6,7 +6,7 @@ * Дан список словарей с данными по колличеству проданных телефонов [ - {'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]}, ] @@ -16,12 +16,46 @@ * Посчитать и вывести среднее количество продаж всех товаров """ +product_list = [ + {'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 count_sold_items(items_sold: list) -> int: + count_items = 0 + for item in items_sold: + count_items += item + return count_items + + def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - + for product in product_list: + count_sold_products = count_sold_items(product['items_sold']) + print(f" Модель {product['product']} продано: {count_sold_products}") + print() + + all_count_sold_items = 0 + for product in product_list: + count_sold_products = count_sold_items(product['items_sold']) + all_count_sold_items += count_sold_products + print( + f" Модель {product['product']} среднее кол-во продаж: " + f"{round(count_sold_products / len(product['items_sold']))}" + ) + + for product in product_list: + count_sold_products = count_sold_items(product['items_sold']) + all_count_sold_items += count_sold_products + print() + print(f"Общее количество проданных товаров: {all_count_sold_items}") + print(f"Среднее кол-во продаж всех товаров: {round(all_count_sold_items / len(product_list))}") + + if __name__ == "__main__": main() From de6fe1532559d9a7d546250058e658b58ffb1569 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Thu, 22 Feb 2024 20:58:14 +0300 Subject: [PATCH 2/6] 4_while1 add solution; 5_while2 add solution --- 4_while1.py | 15 ++++++++------- 5_while2.py | 26 ++++++++++++++++++-------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/4_while1.py b/4_while1.py index b5791517..7519e315 100644 --- a/4_while1.py +++ b/4_while1.py @@ -4,18 +4,19 @@ Цикл while: hello_user -* Напишите функцию hello_user(), которая с помощью функции input() спрашивает +* Напишите функцию hello_user(), которая с помощью функции input() спрашивает пользователя “Как дела?”, пока он не ответит “Хорошо” - + """ + def hello_user(): - """ - Замените pass на ваш код - """ - pass + while True: + user_answer = input('Как дела? ') + if user_answer == 'Хорошо': + break + - if __name__ == "__main__": hello_user() diff --git a/5_while2.py b/5_while2.py index 49012dfd..935563c8 100644 --- a/5_while2.py +++ b/5_while2.py @@ -12,16 +12,26 @@ Пользователь: Что делаешь? Программа: Программирую - + """ -questions_and_answers = {} +questions_and_answers = { + "Ты кто?": "Программа", + "Как дела": "Хорошо!", + "Что делаешь?": "Программирую", + "Сколько тебе лет?": "Достаточно", + "Твой любимый цвет?": "Не различаю цвета", +} + + +def ask_user(answers_dict: dict): + while True: + question = input('Задайте вопрос (для выхода напишите q) ') + if question in answers_dict: + print(answers_dict[question]) + elif question == 'q': + break + -def ask_user(answers_dict): - """ - Замените pass на ваш код - """ - pass - if __name__ == "__main__": ask_user(questions_and_answers) From 73bc388a5abea17eeb9c50fdc5afe9e99142e634 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Fri, 23 Feb 2024 11:27:14 +0300 Subject: [PATCH 3/6] add \n in 4_while1; add \n in 5_while2; add solution 6_exception1; add solution 7_exception2 --- 4_while1.py | 2 +- 5_while2.py | 2 +- 6_exception1.py | 20 ++++++++++++-------- 7_exception2.py | 25 ++++++++++++++++++------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/4_while1.py b/4_while1.py index 7519e315..6cd6a482 100644 --- a/4_while1.py +++ b/4_while1.py @@ -13,7 +13,7 @@ def hello_user(): while True: - user_answer = input('Как дела? ') + user_answer = input('Как дела?\n') if user_answer == 'Хорошо': break diff --git a/5_while2.py b/5_while2.py index 935563c8..988dd1b4 100644 --- a/5_while2.py +++ b/5_while2.py @@ -26,7 +26,7 @@ def ask_user(answers_dict: dict): while True: - question = input('Задайте вопрос (для выхода напишите q) ') + question = input('Задайте вопрос (для выхода напишите q)\n') if question in answers_dict: print(answers_dict[question]) elif question == 'q': diff --git a/6_exception1.py b/6_exception1.py index 3ea9d054..2cf394cc 100644 --- a/6_exception1.py +++ b/6_exception1.py @@ -4,17 +4,21 @@ Исключения: KeyboardInterrupt -* Перепишите функцию hello_user() из задания while1, чтобы она - перехватывала KeyboardInterrupt, писала пользователю "Пока!" +* Перепишите функцию hello_user() из задания while1, чтобы она + перехватывала KeyboardInterrupt, писала пользователю "Пока!" и завершала работу при помощи оператора break - + """ + def hello_user(): - """ - Замените pass на ваш код - """ - pass - + while True: + try: + input('Как дела?\n') + except KeyboardInterrupt: + print('\nПока') + break + + if __name__ == "__main__": hello_user() diff --git a/7_exception2.py b/7_exception2.py index d4bd8a39..7165b4a1 100644 --- a/7_exception2.py +++ b/7_exception2.py @@ -10,15 +10,26 @@ * Первые два нужно приводить к вещественному числу при помощи float(), а третий - к целому при помощи int() и перехватывать исключения ValueError и TypeError, если приведение типов не сработало. - + """ -def discounted(price, discount, max_discount=20) - """ - Замените pass на ваш код - """ - pass - + +def discounted(price, discount, max_discount=20): + try: + price = abs(float(price)) + discount = abs(float(discount)) + max_discount = abs(int(discount)) + + if max_discount >= 100: + raise ValueError('Слишком большая максимальная скидка') + if discount >= max_discount: + return price + else: + return price - (price * discount / 100) + except (TypeError, ValueError): + print('Ошибка типа данных аргумента') + + if __name__ == "__main__": print(discounted(100, 2)) print(discounted(100, "3")) From 08125cd68bded9a5fd2fae57082a3397a64d7641 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Sat, 24 Feb 2024 09:08:51 +0300 Subject: [PATCH 4/6] 6_exception1.py fix after review; add solution 8_ephem_bot --- .gitignore | 3 +++ 6_exception1.py | 4 +++- 8_ephem_bot.py | 38 +++++++++++++++++++++++++++----------- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index af6d5026..7c34f081 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *.py[cod] *$py.class + # C extensions *.so @@ -121,3 +122,5 @@ dmypy.json # Pyre type checker .pyre/ + +settings.py diff --git a/6_exception1.py b/6_exception1.py index 2cf394cc..b2079898 100644 --- a/6_exception1.py +++ b/6_exception1.py @@ -14,7 +14,9 @@ def hello_user(): while True: try: - input('Как дела?\n') + user_answer = input('Как дела?\n') + if user_answer == 'Хорошо': + break except KeyboardInterrupt: print('\nПока') break diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 1cf9ea19..844fa816 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -13,23 +13,18 @@ """ import logging +from datetime import date +import ephem from telegram.ext import Updater, CommandHandler, MessageHandler, Filters +import settings + 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' - } -} - - def greet_user(update, context): text = 'Вызван /start' print(text) @@ -39,14 +34,35 @@ def greet_user(update, context): def talk_to_me(update, context): user_text = update.message.text print(user_text) - update.message.reply_text(text) + update.message.reply_text(user_text) + + +def get_planet_constellation(update, context): + user_text = update.message.text.split()[1] + print(user_text) + if user_text == 'Mercury': + constellation = ephem.constellation(ephem.Mercury(date.today())) + elif user_text == "Venus": + constellation = ephem.constellation(ephem.Venus(date.today())) + elif user_text == 'Mars': + constellation = ephem.constellation(ephem.Mars(date.today())) + elif user_text == "Jupiter": + constellation = ephem.constellation(ephem.Jupiter(date.today())) + elif user_text == "Saturn": + constellation = ephem.constellation(ephem.Jupiter(date.today())) + elif user_text == "Uranus": + constellation = ephem.constellation(ephem.Uranus(date.today())) + elif user_text == "Neptune": + constellation = ephem.constellation(ephem.Neptune(date.today())) + update.message.reply_text(f"Сегодня {user_text} в созвездии {constellation[1]}") def main(): - mybot = Updater("КЛЮЧ, КОТОРЫЙ НАМ ВЫДАЛ BotFather", request_kwargs=PROXY, use_context=True) + mybot = Updater(settings.API_KEY, use_context=True) dp = mybot.dispatcher dp.add_handler(CommandHandler("start", greet_user)) + dp.add_handler(CommandHandler("planet", get_planet_constellation)) dp.add_handler(MessageHandler(Filters.text, talk_to_me)) mybot.start_polling() From 3a2ecea525b6951caac2866e49bead02c37ca6de Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Sun, 25 Feb 2024 10:32:51 +0300 Subject: [PATCH 5/6] 8_ephem_bot fix after review --- 8_ephem_bot.py | 51 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 844fa816..96ad7c20 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -38,23 +38,40 @@ def talk_to_me(update, context): def get_planet_constellation(update, context): - user_text = update.message.text.split()[1] - print(user_text) - if user_text == 'Mercury': - constellation = ephem.constellation(ephem.Mercury(date.today())) - elif user_text == "Venus": - constellation = ephem.constellation(ephem.Venus(date.today())) - elif user_text == 'Mars': - constellation = ephem.constellation(ephem.Mars(date.today())) - elif user_text == "Jupiter": - constellation = ephem.constellation(ephem.Jupiter(date.today())) - elif user_text == "Saturn": - constellation = ephem.constellation(ephem.Jupiter(date.today())) - elif user_text == "Uranus": - constellation = ephem.constellation(ephem.Uranus(date.today())) - elif user_text == "Neptune": - constellation = ephem.constellation(ephem.Neptune(date.today())) - update.message.reply_text(f"Сегодня {user_text} в созвездии {constellation[1]}") + planet_list = [ + 'Mercury', + 'Venus', + 'Mars', + 'Jupiter', + 'Saturn', + 'Uranus', + 'Neptune', + ] + + splited_text = update.message.text.split() + if len(splited_text) < 2: + update.message.reply_text("Вы не ввели название планеты") + else: + edited_text = splited_text[1].lower() + print(edited_text) + if edited_text == 'mercury': + planet = ephem.Mercury(date.today()) + elif edited_text == 'venus': + planet = ephem.Venus(date.today()) + elif edited_text == 'mars': + planet = ephem.Mars(date.today()) + elif edited_text == 'jupiter': + planet = ephem.Jupiter(date.today()) + elif edited_text == 'saturn': + planet = ephem.Jupiter(date.today()) + elif edited_text == 'uranus': + planet = ephem.Uranus(date.today()) + elif edited_text == 'neptune': + planet = ephem.Neptune(date.today()) + else: + update.message.reply_text(f"{edited_text} не является планетой. Введите планету из списка {planet_list}") + + update.message.reply_text(f"Сегодня {edited_text.capitalize()} в созвездии {ephem.constellation(planet)[1]}") def main(): From 4a51b9a68dbc4f97cfb9b60aa014a5e16a307a6f Mon Sep 17 00:00:00 2001 From: Dmitriy Kostarev Date: Sun, 25 Feb 2024 21:55:57 +0300 Subject: [PATCH 6/6] 8_ephem_bot fix after review --- 8_ephem_bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 96ad7c20..38ff1c10 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -51,6 +51,8 @@ def get_planet_constellation(update, context): splited_text = update.message.text.split() if len(splited_text) < 2: update.message.reply_text("Вы не ввели название планеты") + elif len(splited_text) > 2: + update.message.reply_text("Введите название одной планеты") else: edited_text = splited_text[1].lower() print(edited_text)