Junior Python School
705 subscribers
92 photos
29 links
Surprising the python community with pure python 🔝

Moving channel from Russian to English.


Enthusiastic reviews can be written to @pythonjuniorschoolacc ❤️
Download Telegram
Наша команда создала тест

Просто 9 вопросов по python. В конце можно получить сертификат о прохождении - мелочь, а приятно)
Немного поменяли способ подсчета баллов теста выше.
Все результаты пересчитаны, чтобы стало проще
Интересно увидеть статистику по всем пользователям?
Anonymous Poll
50%
Покажите графики
19%
Покажите лучших
31%
Ещё тестов создайте
Статистика по тесту 📊.

Пока что его прошло 77 человек. Особенно радует, что многие проходили его несколько раз с одного ip, чтобы получить заветную пятерку!


Наша команда уже готовит следующий тест - не пропусти.


У нас есть план запустить бесплатный интенсив, без какой-либо жуткой рекламы, по модулю itertools.

Покажем базовые возможности, а также красивые и удобные фишки библиотеки.

Если интересно поучаствовать - напиши об этом нашему боту, хотим знать сколько тут замотивированных на учебу!




Поделись каналом с друзьями - мы сейчас только начинаем развиваться, и без твоей помощи ничего грандиозного не получится)

Твоя обратная связь мотивирует команду Junior Python School работать лучше и быстрее, пользуйся этим)

Участвуй в нашем конкурсе. Шансы выиграть что-то сейчас очень высоки!
Рождество? Ну чуточку новых знаний-то можно, в честь праздника?

Это был очень популярный вопрос на собеседованиях пару лет назад.

Но и сейчас вспоминают это иногда)

Что выведет программа?

Потом обязательно этот вопрос разберем, это очень важная тема.
А вот и сами варианты ответов)

Чур, не подглядывать в интерпретатор!!😜

1)
['I LOVE PYTHON']
['I HATE JS', 'I LOVE PYTHON']
['I LOVE PYTHON']

2)
['I LOVE PYTHON']
['I LOVE PYTHON', 'I HATE JS', 'I LOVE PYTHON']
['I LOVE PYTHON', 'I HATE JS', 'I LOVE PYTHON', 'I LOVE PYTHON']

3)
['I LOVE PYTHON']
['I HATE JS', 'I LOVE PYTHON']
['I LOVE PYTHON', 'I LOVE PYTHON']


4)
Нельзя использовать в качестве параметра функции изменяемый объект.
Даже pycharm сразу такие ошибки подсвечивает!

1 - 19
👍👍👍👍👍👍👍👍 58%
2 - 3
👍👍 9%
3 - 10
👍👍👍👍👍 30%
4 - 1
👍 3%
👥 33 человека уже проголосовало.
crazy_dict = {1: 'int',
1.0: 'float',
True: 'boolean'}
print(crazy_dict)

Наш стандартный вопрос:
Что выведет программа?

В интерпретатор смотреть не надо, мы его уже за вас проверили - правильный ответ в списке есть. Вроде.

1)
{1: 'int', 1.0: 'float', True: 'boolean'}
2)
{True: 'int'}
3)
{1.0: 'int', True:'boolean'}
4)
{1: 'boolean'}
5)
{1: 'float', True:'boolean'}

1 - 15
👍👍👍👍👍👍👍👍 50%
2 - 3
👍👍 10%
3 - 2
👍👍 7%
4 - 7
👍👍👍👍 23%
5 - 3
👍👍 10%
👥 30 человек уже проголосовало.
Давайте обсудим нашу рождественскую задачку

Вот теперь уже можно подсмотреть в интерпретатор)

Что за магия?

Просто нужно запомнить, что в момент инициализации функции автоматически инициализируются значения по-умолчанию у всех параметров и записываются в кортеж __defaults__

В кортеже __defaults__ не должно появляться изменяемых объектов, только неизменяемые.


Просто каждый раз, когда вы вызываете функцию с параметром по-умолчанию (явно не указывая этот параметр), python не инициализирует параметр заново, а ищет его в __defaults__.
И если параметр изменяемый, и вы до этого его меняли, то получится ситуация как в задачке.


Поэтому вывод - старайтесь не делать изменяемые объекты значениями по-умолчанию!


Как нужно правильно написать эту функцию?
def func(a=None):
if a is None:
a = []
a.append('I LOVE PYTHON')
print(a)


func()
func(['I HATE JS'])
func()

Домашнее задание!!
Попробуйте разобраться в интерпретаторе и обратите внимание на все существующие поля и методы func.(dir(func))
Поехали обсуждать сумасшедшие словари из вот этого странного теста.

Шаг 1:
True == 1 == 1.0

Пояснение:
Ну, почему, 1==1.0 - понятно

bool(False, True) в python работает точно также, как и числа 0 и 1. Правда если приводить их к строке, то вернутся 'False', 'True'

Это приводит к тому, что True и False можно использовать как 1 и 0.
Пример:
['no', 'yes'][True] == "yes"
['no', 'yes'][False] == "no"

Вывод:
Python считает 1, True, 1.0 - одинаковыми. А значит это один и тот же ключ словаря. Сравни hash()


Шаг 2:
Python вернет последнее значение и первый ключ
Пример:
>>> { 1.0: 'float', 1: 'int', True: 'boolean'}
{1.0: 'boolean'}
>>> {True: 'boolean', 1.0: 'float', 1: 'int'}
{True: 'int'}

А тут пояснение простое: значения обновляются последовательно, а ключ не меняется - это оптимизация python - зачем обновлять эквивалентные ключи.

Оно так всегда работало:
>>> {1: 'Первое значение', 1: 'Второе значение'}
{1: 'Второе значение'}

ДЗ
Разберитесь, как работает поиск значения в словаре(про хеш таблицы почитайте).
В этот раз мы решили создать задачку по-проще, но из нее развить тему серьезную.
Решайте задачу - потом выпустим кусочек интересной теории по set.
Как обычно - кто пользуется интерпретатором, век тому на паскале писать. Не используйте его!

set([set([1, 2, 3, 2]),
    set([2, 3, 4, 2, 3])])

Какие значения попадут в это множество?

{1, 2, 3, 4} - 23
👍👍👍👍👍👍👍👍 61%
{2, 3} - 1
👍 3%
{{1, 2, 3}, {2, 3, 4}} - 9
👍👍👍👍 24%
Тут ошибка - 5
👍👍👍 13%
👥 38 человек уже проголосовало.
Перешли С-подобному другу😉
PEP8 - это важная часть python development.

Но никто полностью его не заучивает, а зря.. Потом не получается правильно отвечать на такие вот вопросы.

Нужно выбрать все варианты ответов, где все по PEP8.

1.
a[lower + ofs : upper + ofs]
a[lower+ofs : upper+ofs]
a[lower:upper]
a[lower:upper:]
a[lower::step]

2.
a[lower:upper]
a[lower:upper:]
a[lower::step]
a[lower : : upper]
a[lower + ofs:upper + ofs]

3.
a[lower + ofs : upper + ofs]
a[lower + ofs : upper+ofs]
a[lower:upper]
a[lower:upper:]
a[lower: :step]

4.
a[lower:upper]
a[lower: upper:]
a[lower::step]
a[lower :: upper]
a[lower + ofs : upper + ofs]
Какой ответ правильный?

1 - 2
👍👍👍 12%
2 - 2
👍👍👍 12%
3 - 9
👍👍👍👍👍👍👍👍 53%
4 - 4
👍👍👍👍 24%
👥 17 человек уже проголосовало.
Пока наша команда обсуждает тонкости поста про хешируемые объекты, чтобы помочь всем в этом разобраться, а пока есть задачка, чтобы никто не скучал.

Один пхпшник написал свой первый код на самой последней версии python. Он использовал магический метод __cmp__, и ему надо это переписать(подумай, почему). Он расстроился и пришел к тебе. Подумай, что ему посоветовать.
Разберись в таком синтаксисе и выбери правильный ответ.
Хотя.. вы уже и сами привыкли к подвохам)
Anonymous Quiz
15%
False False
24%
False True
8%
True False
7%
True True
17%
Небольшая ошибка в синтаксисе.
29%
Серьезная ошибка
Выбрать оператор с наибольшим приоритетом...
Anonymous Quiz
8%
| (bitwise OR)
13%
is
36%
**
8%
in
21%
and
13%
>>
3 and 7 or 0 and 1
Anonymous Quiz
47%
True
18%
False
10%
3
12%
7
4%
0
4%
1
5%
21