diff --git a/.gitignore b/.gitignore index af6d5026..7d35647c 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,6 @@ dmypy.json # Pyre type checker .pyre/ + +# For task 8_ephem_bot.py +settings.py diff --git a/1_if1.py b/1_if1.py index be736084..ff5410e4 100644 --- a/1_if1.py +++ b/1_if1.py @@ -19,7 +19,16 @@ def main(): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + age = int(input('Укажите ваш возраст: ')) + if age <= 6: + return f'Вам нужно в детский сад походить ещё {6 - age}' + elif 6 < age <= 18: + return 'Вам нужно учиться в школе' + elif 18 < age <= 25: + return 'Вам нужно учиться в ВУЗе' + elif 25 < age <= 65: + return f'Вам нужно работать ещё {65 - age}' + return 'Поздравляем, Вы пенсионер!' if __name__ == "__main__": - main() + print(main()) diff --git a/2_if2.py b/2_if2.py index 0f1644f3..97cdc275 100644 --- a/2_if2.py +++ b/2_if2.py @@ -15,12 +15,21 @@ """ -def main(): +def main(line1, line2): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + if isinstance(line1, str) == 0 or isinstance(line2, str) == 0: + return 0 + elif line1 == line2: + return 1 + elif len(line1) > len(line2): + return 2 + elif line1 != line2 and line2 == 'Learn': + return 3 + return 'Условий для обработки таких строк не задано' + if __name__ == "__main__": - main() + print(main('123', 'Learnar')) diff --git a/3_for.py b/3_for.py index 5ca9f504..a06f38aa 100644 --- a/3_for.py +++ b/3_for.py @@ -21,7 +21,18 @@ def main(): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + lists = [ + {'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]}, + ] + total_num_sales = 0 + for items in lists: + total_num_sales += sum(items['items_sold']) + print(f"Для товара {items['product']}: суммарное количество продаж {sum(items['items_sold'])},\ + среднее количество продаж {round(sum(items['items_sold']) / 12)}") + print() + print(f"Для всех товаров суммарное количество продаж {total_num_sales}, среднее количество продаж {round(total_num_sales / 12)}") if __name__ == "__main__": main() diff --git a/4_while1.py b/4_while1.py index b5791517..fafd3e1d 100644 --- a/4_while1.py +++ b/4_while1.py @@ -14,7 +14,10 @@ def hello_user(): """ Замените pass на ваш код """ - pass + question = input('Как дела? ') + while question != 'Хорошо': + question = input('Как дела? ') + print('Вот и хорошо!') if __name__ == "__main__": diff --git a/5_while2.py b/5_while2.py index 49012dfd..726226ea 100644 --- a/5_while2.py +++ b/5_while2.py @@ -14,14 +14,24 @@ Программа: Программирую """ +questions_and_answers = { + "Как дела?": "Хорошо!", + "Что делаешь?": "Программирую", + "Какой твой любимый цвет?": "Зелёный"} -questions_and_answers = {} - -def ask_user(answers_dict): - """ - Замените pass на ваш код - """ - pass +def question_and_answer(): + + def ask_user(): + user_asks = input('Пользователь: ') + answer = questions_and_answers.get(user_asks, 'Задай другой вопрос, на этот нет ответа') + return answer + while True: + print('Программа: Что ты хочешь спросить у меня?') + answer = ask_user() + print(f'Программа:{answer}') + if int(input('Программа: Если вопросов больше нет нажми 0, если есть 1: ')) == 0: + break + if __name__ == "__main__": - ask_user(questions_and_answers) + question_and_answer() diff --git a/6_exception1.py b/6_exception1.py index 3ea9d054..6a1cbf62 100644 --- a/6_exception1.py +++ b/6_exception1.py @@ -14,7 +14,15 @@ def hello_user(): """ Замените pass на ваш код """ - pass + + while True: + try: + if input('Как дела? ') == 'Хорошо': + print('Ну хорошо!') + break + except KeyboardInterrupt: + print('Пока!') + break if __name__ == "__main__": hello_user() diff --git a/7_exception2.py b/7_exception2.py index d4bd8a39..8d671765 100644 --- a/7_exception2.py +++ b/7_exception2.py @@ -13,11 +13,24 @@ """ -def discounted(price, discount, max_discount=20) +def discounted(price, discount, max_discount=20): """ Замените pass на ваш код """ - pass + try: + price = float(abs(price)) + discount = float(abs(discount)) + max_discount = int(abs(max_discount)) + if max_discount >= 100: + raise ValueError('Слишком большая максимальная скидка') + if discount >= max_discount: + return price + else: + return f'{price - (price * discount / 100)}' + except ValueError: + return 'Некорректное значение' + except TypeError: + return 'Значение недопустимого типа' if __name__ == "__main__": print(discounted(100, 2)) diff --git a/8_ephem_bot.py b/8_ephem_bot.py index 1cf9ea19..366f8cf4 100644 --- a/8_ephem_bot.py +++ b/8_ephem_bot.py @@ -13,45 +13,66 @@ """ import logging - +import ephem +import settings +import locale +from datetime import datetime from telegram.ext import Updater, CommandHandler, MessageHandler, Filters - 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) - update.message.reply_text(text) - - -def talk_to_me(update, context): +locale.setlocale(locale.LC_TIME, 'ru_RU') # что бы генерировать кирилические дни недели + +planets = {"Mercury": ephem.Mercury, + "Venus": ephem.Venus, + "Mars" : ephem.Mars, + "Saturn": ephem.Saturn, + "Uranus": ephem.Uranus, + "Neptune": ephem.Neptune, + "Pluto": ephem.Pluto, + "Moon": ephem.Moon, + "Sun": ephem.Sun, + "Jupiter": ephem.Jupiter + } + +def greet_user(update, context): # update - это то, что поступило от пользователя Telegram. Context - это спец. штука с помощью которой мы можем изнутри функции отдавать команды боту + print('Вызван /start') + update.message.reply_text('Здравствуй пользователь!') + +def planet_const(update, context): # вызов команды /planet + print('Вызван /planet') + update.message.reply_text("Введите название объекта Солнечной системы -\ + Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Moon, Sun") + +def get_constellation(planet_name): # функция обрабатывает сообщение пользователя с названием планеты + current_date = datetime.now().strftime('%d.%m.%Y %H:%M') # переменная для корректной работы с ephem + current_planet = planets[planet_name](current_date) # переменная планеты с обработкой + current_date = datetime.now().strftime('%A %d.%m.%Y %H:%M') # переменная с отображением дня недели на кириллице + return ephem.constellation(current_planet), current_date # функция возвращает созвездие и дату + +def talk_to_me(update, context): # функция принимает и распределяет все сообщения от пользователя user_text = update.message.text - print(user_text) - update.message.reply_text(text) - - + print(user_text) + if user_text.lower().capitalize() in planets: # если текст сообщения от пользователя есть в словаре с планетами + planet_name = user_text # передаём в переменную текст сообщения + const, current_date = get_constellation(planet_name) # получаем переменные из функции get_constelletion(planet_name) + update.message.reply_text(f"Сегодня: {current_date}") # вывод пользователю даты + update.message.reply_text(f"Планета {planet_name} в созвездии: {const[1]}") # вывод пользователю созвездия + print(const, current_date, sep='\n') # вывод в консоль созвездия, даты + else: + update.message.reply_text(f"Хотите узнать про созвездия, нажмите: {'/planet'}") + def main(): - mybot = Updater("КЛЮЧ, КОТОРЫЙ НАМ ВЫДАЛ BotFather", request_kwargs=PROXY, use_context=True) - - dp = mybot.dispatcher + mybot = Updater(settings.API_KEY, use_context = True) + + dp = mybot.dispatcher # в переменную dp кладём это, чтобы в дальнейшем не набирать длинное название dp.add_handler(CommandHandler("start", greet_user)) + dp.add_handler(CommandHandler("planet", planet_const)) dp.add_handler(MessageHandler(Filters.text, talk_to_me)) - + + logging.info("Bot started") mybot.start_polling() mybot.idle() - if __name__ == "__main__": main()