From 534cea928743ee932178efb345398d44e72c2170 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sat, 18 Nov 2023 23:35:00 +0300 Subject: [PATCH 01/11] first task --- 1_if1.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/1_if1.py b/1_if1.py index be736084..5f5e88e4 100644 --- a/1_if1.py +++ b/1_if1.py @@ -4,22 +4,40 @@ Условный оператор: Возраст -* Попросить пользователя ввести возраст при помощи input и положить +* Попросить пользователя ввести возраст при помощи input и положить результат в переменную -* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: +* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь: учиться в детском саду, школе, ВУЗе или работать -* Вызвать функцию, передав ей возраст пользователя и положить результат +* Вызвать функцию, передав ей возраст пользователя и положить результат работы функции в переменную * Вывести содержимое переменной на экран """ + def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + age = int(input('Введите Ваш возраст: ')) + while True: + if age >= 100 or age <= 0: + print('Вы ввели некорретный возраст, введите еще раз') + age = int(input('Введите Ваш возраст: ')) + elif 0 < age < 7: + result = 'Вы детсадовец' + break + elif 7 < age < 18: + result = 'Вы школьник' + break + elif 18 < age < 23: + result = 'Вы студент' + break + else: + result = 'Вы должны работать' + break + print(result) if __name__ == "__main__": main() From 2e179e8af54834fd4731ec957f8d3fd6f2f59c86 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 01:01:07 +0300 Subject: [PATCH 02/11] second task --- 2_if2.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/2_if2.py b/2_if2.py index 0f1644f3..33229f8a 100644 --- a/2_if2.py +++ b/2_if2.py @@ -5,22 +5,34 @@ Условный оператор: Сравнение строк * Написать функцию, которая принимает на вход две строки -* Проверить, является ли то, что передано функции, строками. +* Проверить, является ли то, что передано функции, строками. Если нет - вернуть 0 * Если строки одинаковые, вернуть 1 * Если строки разные и первая длиннее, вернуть 2 * Если строки разные и вторая строка 'learn', возвращает 3 -* Вызвать функцию несколько раз, передавая ей разные праметры +* Вызвать функцию несколько раз, передавая ей разные праметры и выводя на экран результаты """ -def main(): +def main(str1, str2): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - + + if type(str1) == str and type(str2) == str: + result = 0 + if str1 == str2: + result = 1 + elif str1 != str2: + result = 2 + elif str2 == 'learn': + result = 3 + else: + result = 0 + + print(result) + if __name__ == "__main__": - main() + main('World', 'learn') From b2f66fa8cd1afc4910f6a9fadc4c84f06133befb Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 14:52:56 +0300 Subject: [PATCH 03/11] fixed 2_if file --- 2_if2.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/2_if2.py b/2_if2.py index 33229f8a..d5616214 100644 --- a/2_if2.py +++ b/2_if2.py @@ -21,11 +21,10 @@ def main(str1, str2): В ней надо заменить pass на ваш код """ - if type(str1) == str and type(str2) == str: - result = 0 + if isinstance(str1, str) and isinstance(str2, str): if str1 == str2: result = 1 - elif str1 != str2: + elif str1 > str2: result = 2 elif str2 == 'learn': result = 3 @@ -35,4 +34,4 @@ def main(str1, str2): print(result) if __name__ == "__main__": - main('World', 'learn') + main('World', 2) From 6c67849c8fb638fc72db400b7d246693f12f0967 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 15:42:12 +0300 Subject: [PATCH 04/11] added 3 task (3_for) --- 3_for.py | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/3_for.py b/3_for.py index 5ca9f504..99138d29 100644 --- a/3_for.py +++ b/3_for.py @@ -4,24 +4,41 @@ Цикл 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]}, ] -* Посчитать и вывести суммарное количество продаж для каждого товара -* Посчитать и вывести среднее количество продаж для каждого товара -* Посчитать и вывести суммарное количество продаж всех товаров -* Посчитать и вывести среднее количество продаж всех товаров +* Посчитать и вывести суммарное количество продаж для каждого товара * +* Посчитать и вывести среднее количество продаж для каждого товара * +* Посчитать и вывести суммарное количество продаж всех товаров * +* Посчитать и вывести среднее количество продаж всех товаров * """ -def main(): +def main(args): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass - + sum_, average = [], [] + len_all = 0 + for i in args: + sum_.append(sum(i['items_sold'])) + average.append(sum(i['items_sold']) / len(i['items_sold'])) + len_all += len(i['items_sold']) + + print(*sum_) + print(*average) + print(sum(sum_)) + print(sum(sum_) / len_all) + + +my_dict = [ + {'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]}, + ] + if __name__ == "__main__": - main() + main(my_dict) From 118bbbd1019a14dbcc6922ac8a8ef761af25ffe9 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 16:30:58 +0300 Subject: [PATCH 05/11] added 4 task (4_while) --- 4_while1.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/4_while1.py b/4_while1.py index b5791517..948771ec 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,12 @@ def hello_user(): """ Замените pass на ваш код """ - pass + while True: + txt = input('Как дела? ') + if txt == 'Хорошо'.lower(): + break + print('Всего хорошего') + - if __name__ == "__main__": hello_user() From e34f8f51ad84e58664e4a5112c474078ea4174cf Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 16:46:35 +0300 Subject: [PATCH 06/11] added 5 task (5_while) --- 5_while2.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/5_while2.py b/5_while2.py index 49012dfd..40c99d6e 100644 --- a/5_while2.py +++ b/5_while2.py @@ -12,7 +12,7 @@ Пользователь: Что делаешь? Программа: Программирую - + """ questions_and_answers = {} @@ -21,7 +21,16 @@ def ask_user(answers_dict): """ Замените pass на ваш код """ - pass - + + while True: + question = input() + if question in answers_dict: + break + print('Спроси что-то другое') + if question in answers_dict: + print(answers_dict[question]) + + +questions_and_answers = {'Как дела': 'Хорошо!', 'Что делаешь?': 'Программирую', 'Пойдешь в кино?': 'Нет, я работаю', 'Какие планы на выходные?': 'Учиться'} if __name__ == "__main__": ask_user(questions_and_answers) From bd8a164258871817a4e31d5e839e07b5a06b18b3 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Sun, 19 Nov 2023 20:18:13 +0300 Subject: [PATCH 07/11] added 7 task (7_while) --- 7_exception2.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/7_exception2.py b/7_exception2.py index d4bd8a39..84a006dd 100644 --- a/7_exception2.py +++ b/7_exception2.py @@ -10,15 +10,21 @@ * Первые два нужно приводить к вещественному числу при помощи float(), а третий - к целому при помощи int() и перехватывать исключения ValueError и TypeError, если приведение типов не сработало. - + """ -def discounted(price, discount, max_discount=20) +def discounted(price, discount, max_discount=20): """ Замените pass на ваш код """ - pass - + try: + price = abs(float(price)) + discount = abs(float(discount)) + max_discount = abs(int(max_discount)) + return price, discount, max_discount + except (ValueError, TypeError): + print('Ошибка приведения') + if __name__ == "__main__": print(discounted(100, 2)) print(discounted(100, "3")) From 5e577dfea649b5c6880df5e1c2394664cdb02074 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Mon, 20 Nov 2023 21:01:28 +0300 Subject: [PATCH 08/11] fixed 7 task (7_while) and added 6 task --- 6_exception1.py | 23 ++++++++++++++++++----- 7_exception2.py | 8 ++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/6_exception1.py b/6_exception1.py index 3ea9d054..8ff2971e 100644 --- a/6_exception1.py +++ b/6_exception1.py @@ -4,17 +4,30 @@ Исключения: KeyboardInterrupt -* Перепишите функцию hello_user() из задания while1, чтобы она - перехватывала KeyboardInterrupt, писала пользователю "Пока!" +* Перепишите функцию hello_user() из задания while1, чтобы она + перехватывала KeyboardInterrupt, писала пользователю "Пока!" и завершала работу при помощи оператора break - + """ + def hello_user(): """ Замените pass на ваш код """ - pass - + + while True: + try: + txt = input('Как дела? ') + if txt.lower() == 'хорошо': + break + else: + print('Скажи еще что-нибудь') + except KeyboardInterrupt: + print('Пока') + break + + + if __name__ == "__main__": hello_user() diff --git a/7_exception2.py b/7_exception2.py index 84a006dd..4fd10517 100644 --- a/7_exception2.py +++ b/7_exception2.py @@ -21,9 +21,17 @@ def discounted(price, discount, max_discount=20): price = abs(float(price)) discount = abs(float(discount)) max_discount = abs(int(max_discount)) + if max_discount >= 100: + raise ValueError('Слишком большая максимальная скидка') + if discount >= max_discount: + return price + else: + return price - (price * discount / 100) return price, discount, max_discount + except (ValueError, TypeError): print('Ошибка приведения') + return price, discount, max_discount if __name__ == "__main__": print(discounted(100, 2)) From 5bcc850796c28227f54c8bd139886f39008c0a52 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Tue, 21 Nov 2023 22:41:52 +0300 Subject: [PATCH 09/11] added 8 task --- .gitignore | 1 + 8_ephem_bot.py | 47 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index af6d5026..51eabe5f 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,4 @@ dmypy.json # Pyre type checker .pyre/ +settings.py diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 1cf9ea19..b1b82e3d 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -12,42 +12,65 @@ бота отвечать, в каком созвездии сегодня находится планета. """ +import datetime import logging +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' - } -} +# 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) - update.message.reply_text(text) + update.message.reply_text('Hello') + +def planet(update, context): + text = '/planet' + print(text) + update.message.reply_text('Enter planet in English') 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(update, context): + date_now = datetime.date.today() + lst_planet = {'Mercury': ephem.Mercury, 'Venus': ephem.Venus, 'Mars': ephem.Mars, + 'Jupiter': ephem.Jupiter, 'Saturn': ephem.Saturn, 'Uranus': ephem.Uranus, + 'Neptune': ephem.Neptune, 'Pluto': ephem.Pluto} + user_text = update.message.text + if user_text in lst_planet: + m = lst_planet[user_text] + print(user_text) + update.message.reply_text(ephem.constellation(m(date_now))) + else: + print(user_text) + update.message.reply_text('Nope, try again') 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(MessageHandler(Filters.text, talk_to_me)) + dp.add_handler(CommandHandler("planet", planet)) + dp.add_handler(MessageHandler(Filters.text, get_planet)) mybot.start_polling() mybot.idle() From 015e343d0a60af19f4d42e13b26b1128bf321453 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Wed, 22 Nov 2023 08:16:11 +0300 Subject: [PATCH 10/11] fixed 8 task --- 5_while2.py | 3 +-- 8_ephem_bot.py | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/5_while2.py b/5_while2.py index 40c99d6e..5a54e337 100644 --- a/5_while2.py +++ b/5_while2.py @@ -27,8 +27,7 @@ def ask_user(answers_dict): if question in answers_dict: break print('Спроси что-то другое') - if question in answers_dict: - print(answers_dict[question]) + print(answers_dict[question]) questions_and_answers = {'Как дела': 'Хорошо!', 'Что делаешь?': 'Программирую', 'Пойдешь в кино?': 'Нет, я работаю', 'Какие планы на выходные?': 'Учиться'} diff --git a/8_ephem_bot.py b/8_ephem_bot.py index b1b82e3d..ca752de7 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -36,32 +36,34 @@ def greet_user(update, context): text = 'Вызван /start' - print(text) + # print(text) + logging.info(text) update.message.reply_text('Hello') def planet(update, context): text = '/planet' - print(text) + update.message.reply_text('Enter planet in English') def talk_to_me(update, context): user_text = update.message.text - print(user_text) + logging.info(user_text) update.message.reply_text(user_text) def get_planet(update, context): date_now = datetime.date.today() - lst_planet = {'Mercury': ephem.Mercury, 'Venus': ephem.Venus, 'Mars': ephem.Mars, - 'Jupiter': ephem.Jupiter, 'Saturn': ephem.Saturn, 'Uranus': ephem.Uranus, - 'Neptune': ephem.Neptune, 'Pluto': ephem.Pluto} - user_text = update.message.text + lst_planet = {'Mercury': ephem.Mercury, 'Venus': ephem.Venus, 'Mars': ephem.Mars, 'Jupiter': ephem.Jupiter, 'Saturn': ephem.Saturn, 'Uranus': ephem.Uranus, 'Neptune': ephem.Neptune, 'Pluto': ephem.Pluto, + 'Меркурий': ephem.Mercury, 'Венера': ephem.Venus, 'Марс': ephem.Mars, 'Юпитер': ephem.Jupiter, 'Сатурн': ephem.Saturn, 'Уран': ephem.Uranus, 'Нептун': ephem.Neptune, 'Плутон': ephem.Pluto} + user_text: str = update.message.text + user_text = user_text.capitalize() + if user_text in lst_planet: - m = lst_planet[user_text] - print(user_text) - update.message.reply_text(ephem.constellation(m(date_now))) + planet = lst_planet[user_text] + planet_answ = ephem.constellation(planet(date_now)) + update.message.reply_text(planet_answ[1]) else: - print(user_text) + logging.info(user_text) update.message.reply_text('Nope, try again') From 8059220b71541a8476216b86b084b472cd1969d3 Mon Sep 17 00:00:00 2001 From: Mikhail Turilov Date: Fri, 24 Nov 2023 20:07:27 +0300 Subject: [PATCH 11/11] fixed_1 8 task --- 8_ephem_bot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/8_ephem_bot.py b/8_ephem_bot.py index ca752de7..8c7dfd55 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -42,11 +42,11 @@ def greet_user(update, context): def planet(update, context): text = '/planet' - update.message.reply_text('Enter planet in English') def talk_to_me(update, context): + # Получает сообщение от сервера Телеграм. Контекст - непонятно user_text = update.message.text logging.info(user_text) update.message.reply_text(user_text) @@ -72,7 +72,9 @@ def main(): dp = mybot.dispatcher dp.add_handler(CommandHandler("planet", planet)) + dp.add_handler(CommandHandler('start', greet_user)) dp.add_handler(MessageHandler(Filters.text, get_planet)) + dp.add_handler(MessageHandler(Filters.text, talk_to_me)) mybot.start_polling() mybot.idle()