Пролог
Сейчас IT - очень востребованная сфера: спрос на специалистов огромный, в индустрию ежедневно «входят» новые джуны. А это значит, что и конкуренция за место под солнцем среди начинающих программистов/аналитиков накаливается с каждым днем.
Что же делать в такой ситуации? Правильно - использовать любую возможность, чтобы немного подкачаться. Так как информации масса и в голове возникает мешанина, хороший способ - порешать несложные задачки и поразбирать вопросы. Это удобно - пока едешь в метро, можно решить пару-тройку задачек и немного привести в порядок свои знания.
![](https://habrastorage.org/getpro/habr/upload_files/b77/ee9/539/b77ee953993b861b27869d1613da4acc.jpg)
Мы уже больше года выкладываем в своих соцсетях (ВКонтакте, Телеграм, Инстаграм) задачи разной сложности по программированию и смежным темам: Python, SQL, Data Science, Git, аналитике и другим темам. Для этого у нас даже есть специальная рубрика - GROK IT. Узнать ее можно по нашей фирменной утке :)
Так вот, за все это время мы неоднократно сталкивались с такими мыслями, когда планировали очередную задачу: «Ну нет, это слишком легко, люди от нас просто отпишутся за такие плевые задачи». Однако, все оказалось иначе.
Мы собрали для Вас 10 интересных мини-задачек по Python и SQL, которые кажутся очень простыми, но подавляющее большинство опрошенных дали неправильные ответы. Вот такая вот статистика ¯\_(ツ)_/¯
Пару слов о нас :) Мы команда IT Resume и мы пилим крутую платформу для подготовки к техническим собеседованиям и развитию своих навыков. Скоро будет первый релиз, так что ждем вас в гости ;)
А пока подписывайтесь на наши соцсети, туда мы постим интересный и полезный контент по программированию, Data Science и аналитике.
Итак, давайте наконец перейдем к задачам. Погнали :)
Задача 1. Метод extend в Python
Формулировка:
# Дан список l. Что выведет код?
l = [1, 2, 3]
l.extend('abc')
print(l)
Варианты ответов:
[1, 2, 3, 'abc']
[1, 2, 3]
Error
[1, 2, 3, 'a', 'b', 'c']
Правильных голосов: 36%, неправильных - 64%.
Мы были очень удивлены - казалось бы, extend - стандартный списковый метод в Python. Ан нет - у подавляющего большинства он вызвал затруднение.
Правильный ответ:
[1, 2, 3, 'a', 'b', 'c']
Подробный разбор задачи → здесь.
Кстати, еще больше задач мы публикуем в наших закрытых чатах ВКонтакте и Телеграме. Будем рады видеть вас там и решать задачки вместе! :)
Задача 2. Кортеж с одним элементом
Формулировка:
# Что выведет код?
for i in (3):
print(i)
Варианты ответов:
1, 2, 3
3
(3)
Error
Правильных голосов: 33%, неправильных - 67%.
В целом, мы предполагали, что многие попадутся в эту ловушку. Но в итоге на нее попались даже больше людей, чем мы думали - сотни человек!
Правильный ответ:
Error
Подробный разбор задачи → здесь.
Задача 3. Фигурные скобки в f-строках
Формулировка:
# Что выведет код?
print(f'Curly brackets: {}')
Варианты ответов:
Curly brackets: {}
Curly brackets:
Ошибку
Ни один из вариантов
Правильных ответов - 22%, неправильных - 78%.
Здесь мы тоже думали, честно говоря, что ответ прям очевиден: f-строки это же ведь совсем базовый Python. Но мы снова были не правы.
Правильный ответ
Ошибку
Подробный разбор задачи → здесь.
Задача 4. DELETE + CTE в SQL
Формулировка:
-- Дана таблица Demo.
-- Как изменится таблица после выполнения запроса в PostgreSQL?
WITH temp_tab AS (
DELETE FROM Demo
)
INSERT INTO Demo
SELECT * FROM temp_tab
Варианты ответов:
Никак, т.к. INSERT вставит удаленные строки
Никак, т.к. запрос не выполнится
Станет пустой, т.к. DELETE ничего не возвращает и вставлять нечего
Никак, т.е. INSERT нельзя использовать с CTE
Правильных ответов: 28%, неправильных - 72%.
В отличие от предыдущих задач, тут мы предполагали, что людей ожидает некая засада :) Все-таки не все знают про CTE, RETURNING и так далее. Собственно, так и получилось. Но зато многие теперь познакомились с новой конструкцией SQL.
Правильный ответ
Никак, т.к. запрос не выполнится.
Подробный разбор задачи → здесь.
Кстати, вот здесь мы подробно объясняем, как и зачем использовать Common Table Expressions. В том числе и про DELETE.
Задача 5. Хитрый оператор AND в Python
Формулировка:
# Что выведет код?
print(50 and 100)
Варианты ответов:
50 100
50
100
Ни один из этих вариантов
Правильных ответов - 13%, неправильных - 87%.
Статистика говорит сама за себя. Это тот случай, когда вдруг забываешь, в какой руке держать вилку. Вроде все очевидно - 2 числа и оператор AND. А что получится в итоге - не понимаешь. И никто почти не понимает.
Правильный ответ
100
Подробный разбор задачи → здесь.
Задача 6. Shrug face и escape-последовательности в Python
Формулировка:
# Что выведет код?
print('¯\\_(ツ)_//¯')
Варианты ответов:
'¯\\_(ツ)_//¯'
'¯\_(ツ)_//¯'
'¯\\_(ツ)_/¯'
Ничего из перечисленного
Правильных ответов - 28%, неправильных - 72%.
Конечно, эту задачку мы разместили смеха ради, потому что все любят каомодзи :) Но на самом деле такая ситуация встретилась у нас при разработке платформы - мы хотели передавать shrug face в качестве строки и наткнулись на интересные эффекты экранирования. Так что вполне себе бизнесовая задачка!
Правильный ответ
'¯\_(ツ)_//¯’
Подробный разбор задачи → здесь.
Задача 7. Удаление таблицы SQL
Формулировка:
Какой запрос отработает без ошибок в PostgreSQL?
Варианты ответов:
DELETE * FROM Demo;
DELETE FROM Demo;
TRUNCATE TABLE Demo;
TRUNCATE * FROM Demo;
Правильных ответов - 28%, неправильных - 72%.
Это еще один вопрос из серии «Какой рукой я держу вилку?». Из-за того, что некоторые операции делаешь на автомате, не зацикливаешься - а как же правильно, и такие задачи могут ввести в ступор. Да и чего уж там - многие в целом не знают, как удалять таблицу и в чем разница между DELETE и TRUNCATE.
Правильный ответ
DELETE FROM Demo. Неочевидно, но проверьте :)
Подробный разбор задачи → здесь.
Задача 8. Добавление элементов в set
Формулировка:
# Что выведет код?
set1 = {1, 2, 3}
set2 = set1.add(4)
print(set2)
Варианты ответов:
{1, 2, 3, 4}
True
None
Error
Правильных ответов: 16%, неправильных - 84%.
Стандартные методы списков, множеств, словарей и т.д. в Python устроены, пожалуй, не до конца очевидно. В том плане, что какие-то методы возвращают значения, какие-то не возвращают ничего. Каждый раз в этом путаешься и метод add - яркий пример.
Правильный ответ
None
Подробный разбор задачи → здесь.
Кстати, недавно мы делали подборку 5 методов множеств, которые обязательно нужно знать. Не забудьте проверить себя ;)
Задача 9. Комбинирование условий сравнения в Python
Формулировка:
# Что выведет код?
print(11 > 0 is True)
Варианты ответов:
True
False
Error
Правильных ответов - 10%, неправильных - 90%.
Ну это задача совсем неочевидная. Python хоть и проповедует прозрачность, но эта конструкция прям совсем не прозрачная, как нам кажется (:
Правильный ответ
False
Подробный разбор задачи → здесь.
Задача 10. Импорт библиотек по PEP8
Формулировка:
# Сколько правил PEP8 нарушено при таком импорте библиотек?
import face_recognition
import sys, os
import mymodule # пользовательский скрипт
from subprocess import Popen, PIPE
Варианты ответов:
1
2
3
4
Правильных ответов - 25%, неправильных - 75%.
Одно дело писать код, а другое - писать код правильно. И делают это далеко не все, хотя по факту это очень важно: через год читать грязный код просто невозможно - порой проще его просто переписать. PEP8 в Python, пожалуй, базовое руководство по этому поводу. Но оказывается, почти никто его не знает :)
Правильный ответ
3
Подробный разбор задачи → здесь.
К слову, по этому поводу мы весной делали целый Style Guide кода на Python - очень рекомендуем посмотреть :)
Почти эпилог
Согласитесь, все эти 10 задачек кажутся очень легкими на первый взгляд. Но когда начинаешь разбираться чуть глубже, понимаешь, что зачастую твои знания не так уж и крепки :) Даже матерый профи может оплошать на некоторых заданиях - не потому что с ним что-то не так, а потому что некоторые вещи настолько уже доведены до автоматизма, что даже не зацикливаешься на мелочах.
Кстати, в чатах ВКонтакте и Телеграме мы стараемся подробно отвечать на все решения, которые вы присылаете, так что с радостью ждем вас! :) И впереди у нас еще много задачек по программированию, Data Science и аналитике.
Эпилог
А в качестве заключения, вот вам еще одна задачка по Python. Посмотрим, сможете ли Вы ее решить ;)
Формулировка:
Дан Pandas-датафрейм df, заполненный числами:
+----------+----------+----------+
| col1 | col2 | col3 |
+----------+----------+----------+
Напишите код, чтобы найти максимальное абсолютное значение корреляции каждого столбца с другими столбцами. Результат должен был представлен в виде списка.
Присылайте свои решения в чаты - там и узнаете правильный ответ! Будем ждать ;)
P.S. Если для кого-то эти задачки показались слишком легкими или «нежизненными», то мы на это и не претендуем :) Наши задачки помогают людям немного прокачивать свое знание тонкостей языка в игровой форме и обращать внимание на мелочи, которые в повседневной суровой жизни выпадают из виду. Выкатывать целые комбайны в продакшен мы не учим, но le bon Dieu est dans le détail, как говорится ;-)