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
30 changes: 26 additions & 4 deletions 1_if1.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,44 @@

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

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

"""
def distribute_career(age):
if age < 1.5:
print('Ты совсем еще маленький')
return
elif 1.5 <= age <= 7:
print('Ходить в детский сад')
return
elif 7 < age <= 18:
print('Учиться в школе')
return
elif 18 < age <= 23:
print('Учиться в ВУЗе')
return
elif 23 < age <= 70:
print('Пора работать')
return
else:
print('Пора уже на пенсию')
return


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

distribute_career(user_age)

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

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

"""

def check_string(first_string, second_string):
if not isinstance(first_string, str) or not isinstance(second_string, str):
return 0
elif first_string == second_string:
return 1
elif second_string == 'learn':
return 3
elif len(first_string) > len(second_string):
return 2

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

print(check_string('python', 2))
print(check_string('python', 'python'))
print(check_string('python', 'js'))
print(check_string('python', 'learn'))

if __name__ == "__main__":
main()
29 changes: 26 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,35 @@
* Посчитать и вывести среднее количество продаж всех товаров
"""

phones = [
{'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_sold_each_item(products):
return [{product['product']: sum(product['items_sold'])} for product in products]
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Лайк!


def total_sold_all_item(products):
return sum([sum(product['items_sold']) for product in products])

def average_sold_each_item(products):
return [{product['product']: sum(product['items_sold']) / len(product['items_sold'])} for product in products]

def average_sold_all_item(products):
all_summ = total_sold_all_item(products)
return all_summ / len(sum([product['items_sold'] for product in products], []))


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

print(total_sold_each_item(phones))
print(total_sold_all_item(phones))
print(average_sold_each_item(phones))
print(average_sold_all_item(phones))

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

Цикл while: hello_user

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

"""

"""

def hello_user():
"""
Замените pass на ваш код
"""
pass
answer = ''
while answer != 'Хорошо':
answer = input('Как дела? ')



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

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

"""

questions_and_answers = {}
questions_and_answers = {
"Как дела?": "Хорошо!",
"Что делаешь?": "Программирую",
"Как успехи?": "Потихоньку вникаю",
"Трудно": "Пока нет)",
}

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

while True:
question = input('Введите вопрос: ')
answer = questions_and_answers.get(question)
if answer is not None:
print(answer)
else:
print('Нет подходящего ответа на данный вопроса')

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

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

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

"""

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

answer = ''
while answer != 'Хорошо':
try:
answer = input('Как дела? ')
except KeyboardInterrupt:
print('Пока!')
break

if __name__ == "__main__":
hello_user()
24 changes: 20 additions & 4 deletions 7_exception2.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,31 @@
* Первые два нужно приводить к вещественному числу при помощи 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))
except TypeError:
print('Ошибка, передан не верный тип!')
return
except ValueError:
print('Ошибка, переданы не верные данные!')
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

  1. строки с 24 по 30 не могут вызвать ни ValueError ни TypeError, не смысла их запихивать в try except. Туда нужно класть только те строки, в которых ты ожидаешь увидеть ошибку
  2. Тут ты отлавливаешь две ошибки разом с одним сообщением, чаще всего это не очень удобно, потому что будет сложно понять где именно произошла ошибка и что это была за ошибка

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
23 changes: 22 additions & 1 deletion 8_ephem_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

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

from datetime import date

import ephem

logging.basicConfig(format='%(name)s - %(levelname)s - %(message)s',
level=logging.INFO,
filename='bot.log')
Expand All @@ -39,14 +43,31 @@ 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_location(update, context):
text_message = update.message.text.split()
date_today = date.today().strftime("%Y/%m/%d")

if len(text_message) < 2:
return update.message.reply_text('Не указана планета.')

get_attribute = getattr(ephem, text_message[1], None)

if get_attribute is None:
return update.message.reply_text('Допущена ошибка вводе планеты.')

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Я бы рекомендовал третьим аргументом передвать None тут) семантически None - это ничего, как раз подходит сюда

И обрати внимание на название переменных, из них не очень понятно что хранится внутри

planet = get_attribute(date_today)
constellation = ephem.constellation(planet)

update.message.reply_text(', '.join(constellation))

def main():
mybot = Updater("КЛЮЧ, КОТОРЫЙ НАМ ВЫДАЛ BotFather", request_kwargs=PROXY, use_context=True)

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

mybot.start_polling()
Expand Down