Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions 1_if1.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,38 @@

Условный оператор: Возраст

* Попросить пользователя ввести возраст при помощи input и положить
* Попросить пользователя ввести возраст при помощи input и положить
результат в переменную
* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь:
* Написать функцию, которая по возрасту определит, чем должен заниматься пользователь:
учиться в детском саду, школе, ВУЗе или работать
* Вызвать функцию, передав ей возраст пользователя и положить результат
* Вызвать функцию, передав ей возраст пользователя и положить результат
работы функции в переменную
* Вывести содержимое переменной на экран

"""


def main():
"""
Эта функция вызывается автоматически при запуске скрипта в консоли
В ней надо заменить pass на ваш код
"""
pass
age = int(input("Введите ваш возраст пожалуйста: ").strip())
what_to_do = choice_of_occupation(age)
print(what_to_do)


def choice_of_occupation(age: int) -> str:
if age <= 6:
occupation = "учиться в детском саду"
elif 6 < age <= 17:
occupation = "учиться в школе"
elif 17 < age <= 22:
occupation = "учиться в ВУЗе"
else:
occupation = "работать"
return occupation


if __name__ == "__main__":
main()
25 changes: 21 additions & 4 deletions 2_if2.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,39 @@
Условный оператор: Сравнение строк

* Написать функцию, которая принимает на вход две строки
* Проверить, является ли то, что передано функции, строками.
* Проверить, является ли то, что передано функции, строками.
Если нет - вернуть 0
* Если строки одинаковые, вернуть 1
* Если строки разные и первая длиннее, вернуть 2
* Если строки разные и вторая строка 'learn', возвращает 3
* Вызвать функцию несколько раз, передавая ей разные праметры
* Вызвать функцию несколько раз, передавая ей разные праметры
и выводя на экран результаты

"""


def main():
"""
Эта функция вызывается автоматически при запуске скрипта в консоли
В ней надо заменить pass на ваш код
"""
pass

print(func(1, "1"))
print(func("1", "1"))
print(func("11", "1"))
print(func("11", "learn"))
print(func("111111", "learn"))


def func(first: str, second: str) -> int:
if not all((isinstance(first, str), isinstance(second, str))):
return 0
elif first == second:
return 1
elif second == "learn":
return 3
elif len(first) > len(second):
return 2


if __name__ == "__main__":
main()
47 changes: 44 additions & 3 deletions 3_for.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]},
]
Expand All @@ -16,12 +16,53 @@
* Посчитать и вывести среднее количество продаж всех товаров
"""


def main():
"""
Эта функция вызывается автоматически при запуске скрипта в консоли
В ней надо заменить pass на ваш код
"""
pass

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],
},
]
data_by_product = {
"sum": {},
"average": {},
}
sum_count_sales_all_products = 0
for sales in data:
data_by_product["sum"][sales["product"]] = sum(sales["items_sold"])
data_by_product["average"][sales["product"]] = data_by_product["sum"][
sales["product"]
] / len(sales["items_sold"])
sum_count_sales_all_products += data_by_product["sum"][sales["product"]]

average_count_sales_all_products = sum_count_sales_all_products / len(
data_by_product["sum"]
)

print(f'Суммарное количество продаж для каждого товара:\n{data_by_product["sum"]}')
print(
f'Среднее количество продаж для каждого товара:\n{data_by_product["average"]}'
)
print(
f"Суммарное количество продаж для всех товаров: {sum_count_sales_all_products}"
)
print(
f"Среднее количество продаж для всех товаров: {average_count_sales_all_products}"
)


if __name__ == "__main__":
main()
13 changes: 8 additions & 5 deletions 4_while1.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,21 @@

Цикл while: hello_user

* Напишите функцию hello_user(), которая с помощью функции input() спрашивает
* Напишите функцию hello_user(), которая с помощью функции input() спрашивает
пользователя “Как дела?”, пока он не ответит “Хорошо”

"""


def hello_user():
def hello_user() -> None:
"""
Замените pass на ваш код
"""
pass
answer = None
while answer != "Хорошо":
answer = input("Как дела?\n").strip()
return



if __name__ == "__main__":
hello_user()
16 changes: 12 additions & 4 deletions 5_while2.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,24 @@

Пользователь: Что делаешь?
Программа: Программирую

"""

questions_and_answers = {}
questions_and_answers = {"как дела?": "Хорошо!", "что делаешь?": "Программирую"}


def ask_user(answers_dict):
"""
Замените pass на ваш код
"""
pass

num_questions = len(answers_dict)
print(f"У вас есть {num_questions} попыток задать вопрос")
while num_questions:
question = input("Задайте вопрос роботу:\n").strip().lower()
answer = answers_dict.get(question, "")
print(answer)
num_questions -= 1


if __name__ == "__main__":
ask_user(questions_and_answers)
21 changes: 15 additions & 6 deletions 6_exception1.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,26 @@

Исключения: KeyboardInterrupt

* Перепишите функцию hello_user() из задания while1, чтобы она
перехватывала KeyboardInterrupt, писала пользователю "Пока!"
* Перепишите функцию hello_user() из задания while1, чтобы она
перехватывала KeyboardInterrupt, писала пользователю "Пока!"
и завершала работу при помощи оператора break

"""

def hello_user():

def hello_user() -> None:
"""
Замените pass на ваш код
"""
pass

answer = None
while answer != "Хорошо":
try:
answer = input("Как дела?\n").strip()
except KeyboardInterrupt:
print("\nПока!")
break
return


if __name__ == "__main__":
hello_user()
35 changes: 28 additions & 7 deletions 7_exception2.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,36 @@
* Первые два нужно приводить к вещественному числу при помощи 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))
except (ValueError, TypeError):
print(f'Для параметра "price" передан некорректный тип данных {price}')
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здорово, только я бы вернул строку вместо принт. Это дает более поддерживаемый и переиспользуемый код.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ок, спасибо!

return
try:
discount = abs(float(discount))
except (ValueError, TypeError):
print(f'Для параметра "discount" передан некорректный тип данных {discount}')
return
try:
max_discount = abs(float(max_discount))
except (ValueError, TypeError):
print(
f'Для параметра "max_discount" передан некорректный тип данных {max_discount}'
)
return
if max_discount >= 100:
raise ValueError("Слишком большая максимальная скидка")
if discount >= max_discount:
return price
else:
return price - (price * discount / 100)


if __name__ == "__main__":
print(discounted(100, 2))
print(discounted(100, "3"))
Expand Down
58 changes: 36 additions & 22 deletions 8_ephem_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,45 +12,59 @@
бота отвечать, в каком созвездии сегодня находится планета.

"""
import datetime
import logging
import sys

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import ephem
from telegram.ext import CommandHandler, Filters, MessageHandler, Updater

logging.basicConfig(format='%(name)s - %(levelname)s - %(message)s',
level=logging.INFO,
filename='bot.log')
from secret import TOKEN


PROXY = {
'proxy_url': 'socks5://t1.learn.python.ru:1080',
'urllib3_proxy_kwargs': {
'username': 'learn',
'password': 'python'
}
}
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
level=logging.INFO,
stream=sys.stdout,
)
logger = logging.getLogger(__name__)


def greet_user(update, context):
text = 'Вызван /start'
print(text)
update.message.reply_text(text)
logger.info("Вызван /start")
update.message.reply_text(f"Привет, {update.message.from_user.first_name}")


def talk_to_me(update, context):
user_text = update.message.text
print(user_text)
update.message.reply_text(text)
update.message.reply_text(update.message.text)


def where_is_planet(update, context):
planet_names = [
p[2]
for p in ephem._libastro.builtin_planets()
if p[1] == "Planet" and p[2] not in ("Sun", "Moon")
]
planet_name = update.message.text.split()[1].title()
if planet_name not in planet_names:
update.message.reply_text(
f"Not find planet {planet_name}. "
f'Select one from the options {", ".join(planet_names)}'
)
planet = ephem.__dict__[planet_name](datetime.date.today())
update.message.reply_text(", ".join(ephem.constellation(planet)))


def main():
mybot = Updater("КЛЮЧ, КОТОРЫЙ НАМ ВЫДАЛ BotFather", request_kwargs=PROXY, use_context=True)
logger.info("The bot has started")
my_bot = Updater(TOKEN)

dp = mybot.dispatcher
dp = my_bot.dispatcher
dp.add_handler(CommandHandler("start", greet_user))
dp.add_handler(CommandHandler("planet", where_is_planet))
dp.add_handler(MessageHandler(Filters.text, talk_to_me))

mybot.start_polling()
mybot.idle()
my_bot.start_polling()
my_bot.idle() # зацикливает бота


if __name__ == "__main__":
Expand Down