Python: задачки и вопросы
7.76K subscribers
1.19K photos
1 video
1 file
88 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
Инструкции выражений

В языке Python выражения также могут использоваться в качестве инструкций (то есть в отдельной строке). Однако, поскольку результат вычисления таких выражений не сохраняется, использовать такую возможность имеет смысл только в том случае, если выражение выполняет какие-то полезные действия в виде побочного эффекта.

# Простое вычисление
result = 5 + 3

# Инструкция выражения (выражение, которое вычисляется, но его результат не сохраняется)
5 * 2

# Использование функции print для вывода результата
print(5 * 2) # Это уже не просто инструкция выражения, а полноценная инструкция


В качестве инструкций выражения используются обычно в двух ситуациях:

— Для вызова функций и методов: некоторые функции и методы выполняют огромный объем работы, не возвращая никакого значения. В других языках программирования такие функции иногда называют процедурами. Поскольку они не возвращают значений, которые могло бы потребоваться сохранить, вы можете вызывать эти функции в инструкциях выражений.
— Для вывода значений в интерактивной оболочке: в ходе интерактивного сеанса интерпретатор автоматически выводит результаты вводимых выражений. С технической точки зрения они также являются инструкциями выражений и играют роль сокращенной версии инструкции print.

Теперь вернемся к нашей задаче. Даже при том, что функция print вызывается в отдельной строке, как инструкция выражения, тем не менее она возвращает значение, как и любая другая функция (она возвращает значение None, что возвращается всеми функциями, которые явно не возвращают какого-либо значимого значения):

>>> x = print(‘spam’) # print – это выражение вызова функции
spam
>>> print(x) # но может использоваться, как инструкция выражения
None
👍1
Что выведет код?
Anonymous Quiz
42%
True
6%
False
44%
2
8%
Ничего
В Python числа считаются истинными значениями, то есть в определенных обстоятельствах их можно использовать как эквивалент True.

В случае с оператором or будет возвращен левый операнд, если он истинный. В противном случае возвращается правый операнд.

Как только найден первый удовлетворяющий условию операнд, наступает «укороченная оценка», то есть определение результата выражения прекращается, как только результат становится известным.
Запустится ли этот код без ошибки?
Anonymous Quiz
72%
Да
28%
Нет
В версиях Python 3.X вместо любого выражения допускается использовать многоточие ... (буквально, три точки, следующие друг за другом). Многоточие само по себе не выполняет никаких действий, поэтому его можно использовать как альтернативу инструкции pass, в частности вместо программного кода, который будет написан позднее, – своего рода примечание «TBD» (To Be Done – подлежит реализации).
Будет ли выведена надпись "Цикл завершен"?
Anonymous Quiz
38%
Да
49%
Нет
13%
Этот код вызовет ошибку
Циклы for начинаются со строки заголовка, где указывается переменная для присваивания (или – цель), а также объект, обход которого будет выполнен. Вслед за заголовком следует блок (обычно с отступами) инструкций, которые требуется выполнить:

 <target> in <object>: # Связывает элементы объекта с переменной цикла
<statements> # Повторяющееся тело цикла: использует переменную цикла
else:
<statements> # Если не попали на инструкцию ‘break’


Блок else не выполнится, если цикл был прерван с помощью оператора break.
Чтобы получить каждый второй символ из строки S, можно извлечь срез с шагом (страйдом) 2:

>>> S = ‘abcdefghijk’
>>> for c in S[::2]: print(c, end=’ ‘)
... a c e g i k
Длина списка, возвращаемого функцией zip, равна длине кратчайшей из последовательностей, если аргументы имеют разную длину. В задаче выше выполняется объединение двух строк с целью параллельной обработки их символов, при этом результат содержит столько кортежей, сколько было
элементов в кратчайшей последовательности.
Функция enumerate возвращает объект-генератор, который позволяет итерироваться по значению, создаваемому в процессе выполнения кода, без необходимости загружать все значения в память сразу. Это особенно полезно для работы с большими и динамически генерируемыми наборами данных.

E = enumerate(S)
E # <enumerate object at 0x02765AA8>


В контексте задачи выше c — каждая из букв 'spam', i — её индексы в строке. Первый элемент результирующего списка равен пустоте, потому что c * i = 's' * 0 ('s' повторяется 0 раз).

В дальнейшем индексы повторяют буквы p, a и m по 1, 2 и 3 раза соответственно (перемножение строки и целого числа дает повторение строки).