Здравствуйте, Александр!
Уточните, пожалуйста, вы пытаетесь совершить первую оплату?
Александр, первую оплату вы совершаете самостоятельно. После оплаты первого платёжа привязывается карта, с которой автоматически спишутся следующие, раз в 30 дней. Мы сможем помочь списать только следующие оплаты, если будут возникать трудности.
Если нужна помощь, пишите — во всём разберёмся вместе :)
Александр, выбранный вами курс стартует 16 августа, вероятнее всего, срок оплаты будет продлён до 15 августа :)
Дайте знать, если можем ещё чем-либо помочь:)
Александр, вероятнее всего, срок оплаты будет продлём до 15 августа, если до этого времени не будет набран поток :)
Не переживайте, если вы оплатите на следующей неделе, вы будете зачислены в поток :)
Александр, если вы оплатите курс на следующей неделе, ты вы попадете в ближайший поток :)
Так и есть, но место для вас найдётся :) Остались ли у вас ещё какие-то вопросы ?
Добрый день, Александр!
Для оплаты обучения, перейдите в свой профиль: https://praktikum.yandex.ru, выберите профессию, которую планируете изучать, далее нажмите на кнопку вверху «Купить полную программу», выберите подходящий вам способ оплаты и следуйте инструкциям системы.
Если возникнут вопросы — обязательно пишите :)
Подскажите, вы оплачиваете курс картой банка РФ или иностранного банка?
Уточните,
пожалуйста, почту из вашего аккаунта в Практикум, выбранный курс и
способ оплаты (ежемесячными платежами или полностью) — пришлём ссылку
для оплаты и запишем в группу.
При оплате ежемесячными платежами мы будем формировать новую ссылку каждый месяц и присылать также в письме.
Если вы не против, уточните, пожалуйста, страну вашего проживания — стараемся расширять географию оплаты на сайте и хотим понимать, куда двигаться :)
Александр, отправили вам ссылку в отдельном письме. После оплаты придёт кассовый чек, это значит, что всё прошло успешно и мы получили деньги. После оплаты мы включим вас в 5 поток, который стартует 16 августа.
Cумма ежемесячного платежа составит 12 825руб с учетом скидки 5% за подписку Яндекс.Плюс, мы будем присылать вам ссылку на оплату ежемесячно, всего их будет 14, как и месяцев в курсе Python-разработчик Плюс. Оплата по ссылке проводится в российских рублях.
В день старта потока вам придет важное письмо на почту и куратор примет вас на борт.
Удачи в учебе! А если будут вопросы - пишите, мы рядом.
Сейчас мы пришлем вам новую ссылку с учетом промокода SECOND :)
Александр, первую ссылку мы деактивировали, стоимость обучения для вас составит 11475руб в месяц вместо 13500руб с учетом скидки 15% (5% за Плюс + 10% по промокоду SECOND). Всего будет, как писали ранее, 14 ссылок, и итоговая стоимость курса для вас составит 160 650руб вместо обычных 189 000руб :)
Здравствуйте, Александр!
Наш специалист напишет вам утром и вы во всём разберётесь, хорошо ?:)
Грустить осталось недолго :)
Александр, наши коллеги работают по будням с 10 до 19 :)
Ожидайте, пожалуйста 🌿
Александр, добрый день,
Оплата по ссылке прошла успешно. В течение дня статус оплаты в личном кабинете поменяется:)
Мы записали вас в 5 поток, который стартует 16 августа. В личном кабинете у вас не должно быть ошибки об оплате, проверьте, пожалуйста:)
Обязательно пишите, если у вас появятся вопросы до старта:)
Здравствуйте, Александр!
Пришлите, пожалуйста, ссылку на ваш код, записанный на сайте https://pastebin.com/ и ссылку на саму задачу — посмотрим, в чём там дело :)
Подождём :) Что-то не так ?
Такое бывает :) Если понадобится наша помощь — напишите, мы тут как тут.
Давайте обратимся к теории задания :) Вот код, который можно там найти
return render(request, 'homepage/homepage.html', context)
Нашли свою ошибку ?
С синтаксисом нужно быть осторожным; то, что вы написали, по факту не совсем правильно :) В прекоде есть такая строчка
Как вернуть из view-функции функцию render? Вот так: `return render(аргументы-аргументы-аргументы)
А вы записали
аргументы-аргументы-аргументы=аргументы
Остались ли у вас ещё какие-то вопросы ?
Рады были помочь :)
Здравствуйте, Александр! Обновите, пожалуйста, сейчас страницу курса. Всё должно встать на свои места.
А
так, уже заканчиваем последние приготовления. В течение дня по
московскому времени откроется доступ к платной части, сперва мы
познакомимся, а в Slack куратор подробнее расскажет про то, что будет
дальше. Приглашение в Slack направим на почту — иногда оно попадает в
папки Спам или Рассылки, советуем поглядывать и туда.
Уточните, пожалуйста, вы указывали новую почту для приглашения в slack или ту же, что используете на другом курсе?
Там сейчас у вас только каналы для профессии Python-разработчик , а других каналов, которые были нет, правильно понимаем?
Хорошо, спасибо! Уточним вопрос у коллег и вернёмся к вам с ответом :)
С вами свяжется куратор и добавит в нужные каналы.
Дайте знать, если ещё чем-то можем вам помочь :)
Сейчас куратор напишет в новом аккаунте :)
Здравствуйте!
Также, просим проверить, что в личном кабинете Яндекс Паспорта https://passport.yandex.ru/ привязана карта, с которой необходимо совершить оплату.
Если карта не привязана, просим привязать её и сообщить нам 4 последние цифры карты.
Отправили запрос на списание, если всё пройдёт успешно, то в течение 10-15 минут денежные средства спишутся, вам на почту придёт чек о списании и статус в профиле изменится. Дайте знать, если этого не произойдёт.
Здравствуйте!
Александр, уточните, пожалуйста, ваш логин в Практикуме — alexander.borovtsoff@yandex.by? Не могли бы также уточнить, когда вы в последний раз оплачивали курс Аналитик данных?
Александр, уточните, пожалуйста, последние 4 цифры вашей карточки, привязана ли она к вашему аккаунту? Также, пожалуйста, убедитесь, что у вас на карте достаточно средств для проведения платежа — оплатить необходимо 13000 рублей.
Александр, провели платёж — уточните, пожалуйста, списались ли средства теперь? :)
Скопировать кодPYTHON # Создана переменная, ей присвоено значение типа string
var = "string here"
# Переменной присваивается новое значение, и вот уже тип данных — integer
var = 1234
Скопировать кодPYTHONdef we_crash_all(name):
return 'Привет, ' + name + ', мы всё сломали!'
print(we_crash_all('Наташа'))
we_crash_all()
булеву переменную (разработчик вполне может не учесть возможность такого события):Скопировать кодPYTHONprint(we_crash_all(True))
>>> TypeError: can only concatenate str (not "bool") to str
str
c bool
. Функция ожидала на вход строку, а пришло булево значение.dependency_func()
принимает на вход объект и ожидает, что у этого объекта есть метод work()
. Но по ошибке в эту функцию можно передать число или объект, в котором нет ожидаемого метода.Скопировать кодPYTHONclass WeirdObject:
def work(self):
print('Работает')
def dependency_func(obj):
obj.work()
dependency_func(WeirdObject())
>>> Работает
dependency_func(11) # AttributeError: 'int' object has no attribute 'work'
name
, мы всё сломали.Скопировать кодPYTHON# Без аннотации: объявили переменную,
# а Python сам догадался, какой в ней тип данных
birth_year = 1971
# С аннотацией: объявили переменную и указали,
# что это переменная - только для целых чисел
birth_year: int = 1971
Скопировать кодPYTHON# Переменная var_for_bool аннотирована как булева, но в неё передана строка
var_for_bool: bool = 'Чистая правда, клянусь'
# Python не обратит внимания на это несоответствие
# и продолжит выполнять код, как ни в чём не бывало.
__annotations__
. Содержимое этого словаря можно вывести на экран: Скопировать кодPYTHON# Аннотация переменной name: "это строка"
name: str = 'Наташа'
# Аннотация переменной var_for_bool: "это булева переменная"
var_for_bool: bool = True
# Можно напечатать аннотации переменных из глобальной области видимости
print(__annotations__)
>>> {'name': <class 'str'>, 'var_for_bool': <class 'bool'>}
Скопировать кодPYTHON<имя переменной>: <принимаемый тип> = <значение>
var_integer: int = 10 # Только целочисленные значения
var_float: float = 10.0 # Числа с плавающей точкой (включая целые, можно передать 10)
var_flag: bool = True # Логический тип
var_string: str = 'Йя строка' # Строки
Скопировать кодPYTHON# Вариант 1
<имя переменной>: <принимаемый тип>
<имя переменной> = <значение>
# Вариант 2: тип данных указывается после символа #
<имя переменной> = <значение> # type: <принимаемый тип>
# На примере birth_year типа int со значением 1971 синтаксис будет выглядить так:
# Вариант 1
birth_year: int
birth_year = 1971
# Вариант 2 (устаревший, использовался до python 3.5)
birth_year = 1971 # type: int
Скопировать кодPYTHONdef <имя функции>(<аргумент>: <тип>) -> <возвращаемый тип>:
def is_rhomb(a_size: float, b_size: float) -> bool:
"""Проверяет, является ли параллелограмм ромбом."""
# Вернёт True или False в зависимости от истинности выражения
return a_size == b_size
# Функция print_hi() ожидает строковый аргумент,
# значение этого аргумента по умолчанию - 'stranger'.
# Функция ничего не возвращает, и для неё тип возвращаемых данных - None
def print_hi(name: str = 'stranger') -> None:
print('Hi,' + name + '!')
# Можно напечатать типы данных функций
print(is_rhomb.__annotations__)
>>> {'a_size': <class 'float'>, 'b_size': <class 'float'>, 'return': <class 'bool'>}
print(print_hi.__annotations__)
>>> {'name': <class 'str'>, 'return': <class 'None'>}
Скопировать кодPYTHONclass <имя класса>:
<имя переменной>: <принимаемый тип>
def __init__(self, <имя переменной>: <принимаемый тип>) -> None:
self.<имя переменной> = <имя переменной>
# В классе Hello инциализирована строчная переменная x
# со значением по умолчанию 'привет'.
# self в классах никогда не аннотируется.
# __init__ ничего не возвращает.
class Hello:
x: str # Если здесь не указывать тип переменной,
# аннотация для x не отобразится в словаре __annotations__,
# однако анализатор возьмёт аннотацию из __init__ и корректно отработает
def __init__(self, x: str = 'Привет') -> None:
self.x = x
# Вывод на экран словаря __annotations__ из области видимости класса Hello
print(Hello.__annotations__)
>>> {'x': <class 'str'>}
Скопировать кодPYTHONdef we_crash_all(name: str) -> str:
return 'Привет, ' + name + ', мы всё сломали!'
print(we_crash_all('Наташа'))
Скопировать кодBASH$ pip install mypy
we_crash_all()
, и запустите этот файл утилитой mypy.Скопировать кодBASH$ mypy temp.py
Success: no issues found in 1 source file
Скопировать кодPYTHONdef we_crash_all(name: str) -> str:
return 'Привет, ' + name + ', мы всё сломали!'
print(we_crash_all(100))
Скопировать кодBASH$ mypy temp.py
temp.py:5: error: Argument 1 to "we_crash_all"
has incompatible type "int"; expected "str"
Found 1 error in 1 file (checked 1 source file)
__init__
self
не аннотируется.
__init__
ничего не возвращает.
Не забудьте аннотировать возвращаемые значения функций.class Contact:
def __init__(self,
name: str,
year_birth: int,
is_programmer: bool) -> None:
self.name = name
self.year_birth = year_birth
self.is_programmer = is_programmer
def age_define(self) -> str:
if 1946 < self.year_birth < 1980:
return 'Олдскул'
if self.year_birth >= 1980:
return 'Молодой'
return 'Старейшина'
def programmer_define(self) -> str:
if self.is_programmer:
return 'Программист'
return 'Нормальный'
def show_contact(self) -> str:
return(f'{self.name}, '
f'категория: {self.age_define()}, '
f'статус: {self.programmer_define()}')
def print_contact(self) -> None:
print(self.show_contact())