okpython.net
Все для начинающих

Сборник тестов по основам Python

На странице представлены тесты на знание базовых теоретических основ Python (он же Пайтон или Питон). Желательно проходить их по ходу чтения учебника перед решением задач соответствующей темы.

На данный момент в сборнике представлено более 230 тестов по Питону с ответами и пояснениями в сложных случаях. Однако не забывайте, что нужно стараться получать верный результат самостоятельно. Если же количество неверных ответов по текущей теме достаточно велико, следует пройти тесты повторно.

Введение в Пайтон

Теоретический материал по теме можно почитать во втором и третьем параграфах нашего учебника здесь и здесь.

1.1. Выберите верные утверждения о языке программирования Python.

Варианты ответов: а) высокоуровневый,   б) низкоуровневый,   в) интерпретируемый,   г) компилируемый.   Показать решение.

Ответ. а) высокоуровневый,  в) интерпретируемый.

1.2. Обязательно ли в Пайтоне объявлять тип переменной?

Варианты ответов: а) по желанию программиста,   б) обязательно,   в) зависит от ситуации,   г) объявлять тип не нужно.   Показать решение.

Ответ. г) объявлять тип не нужно.

1.3. Какие из представленных фрагментов кода являются литералами?

Варианты ответов: а) '#',   б) 0.77,   в) 5**2,   г) b = [1, 2].   Показать решение.

Ответ. а) '#',  б) 0.77.

'#' – литерал строки, 0.77 – литерал вещественного числа, 5**2 – выражение, b = [1, 2] – инструкция присваивания значения.

1.4. Какие из предлагаемых имен допустимы в Python?

Варианты ответов: а) s_5,   б) _5s,   в) 5_s,   г) Щ5.   Показать решение.

Ответ. а) s_5,  б) _5s,  г) Щ5.

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

1.5. Как будет выглядеть имя переменной в верблюжьей нотации при использовании фразы «show must go on»?

Варианты ответов: а) ShowMustGoOn,   б) show_must_go_on,   в) showMustGoOn,   г) SHOW_MUST_GO_ON.   Показать решение.

Ответ. в) showMustGoOn.

Имя переменной в верблюжей нотации будет иметь вид showMustGoOn (обычно используется для переменных и функций сторонних библиотек), при использовании змеиной нотации – show_must_go_on (используется для переменных и функций внутри Python и ее стандартной библиотеки). Для имен классов обычно используется нотация CupWords, поэтому имя будет иметь вид ShowMustGoOn.

1.6. Что по умолчанию служит концом инструкции в Python?

Варианты ответов: а) конец строки,   б) запятая,   в) точка,   г) точка с запятой.   Показать решение.

Ответ. а) конец строки.

Общее правило в Python гласит, что конец строки автоматически считается концом инструкции, находящейся в этой строке. Точка же с запятой необходима для разделения коротких инструкций, расположенных друг за другом в одной строке.

1.7. Для выделения блоков кода одного уровня вложенности в Питоне используются...

Варианты ответов: а) круглые скобки,   б) квадратные скобки,   в) фигурные скобки,   г) идентичные отступы.   Показать решение.

Ответ. г) идентичные отступы.

Неважно, какие отступы мы будем использовать, главное, чтобы для инструкций одного уровня вложенности они были одинаковыми. Так это могут быть символы табуляции или несколько подряд идущих пробелов, но что-то одно в пределах одного блока инструкций.

1.8. Какие из представленных символов или их комбинаций используются в Python для комментирования кода?

Варианты ответов: а) #,   б) //,   в) <!-- -->,   г) /* */.   Показать решение.

Ответ. а) #.

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

1.9. Чем отличаются операторы = и ==?

Варианты ответов: а) операторы эквивалентны,   б) оператор = менее точный,   в) оператор = присваивает значения, а == сравнивает их,   г) оператор == в Питоне не используется.   Показать решение.

Ответ. в) оператор = присваивает значения, а == сравнивает их.

И вообще, в программировании символ = означает присвоить, а не равно!

1.10. Как в Питоне записать выражение a не равно b?

Варианты ответов: а) a <> b,   б) a != b,   в) a is not b,   г) a ≠ b.   Показать решение.

Ответ. б) a != b.

a is b и a is not b проверяют на тождественность.

1.11. Какой параметр надо изменить, чтобы встроенная функция print() вывела переданные ей аргументы в столбик?

Варианты ответов: а) end,   б) sep,   в) вывод в столбик невозможен,   г) значения аргументов итак всегда выводятся с новой строки.   Показать решение.

Ответ. б) sep.

Например, можно использовать print('один', 'два', sep='\n').

1.12. Данные какого типа возвращает встроенная функция input()?

Варианты ответов: а) логический тип,   б) строка,   в) целое число,   г) вещественное число.   Показать решение.

Ответ. б) строка.

Для приведения поступаемых в программу данных к нужному типу можно, например, использовать конструкторы типов: bool(), float(), int(), complex(), tuple(), list(), dict(), set() и другие.

Тесты по числам

Теоретический материал по числам, математическим операциям и модулю math можно почитать в нашем учебнике здесь.

2.1. Какой тип данных в Python представляет целые числа?

Варианты ответов: а) complex,   б) float,   в) int,   г) bool.   Показать решение.

Ответ. в) int.

2.2. Какие из представленых литералов чисел относятся к типу float?

Варианты ответов: а) 1.7+4.3j,   б) 5.0,   в) 88,   г) -.4?   Показать решение.

Ответ. б) 5.0,  г) -.4.

Ноль для действительных чисел разрешается опускать, используя только точку.

2.3. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2.5,   б) 2,   в) 3,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 5
y = 2
z = x//y
print(z)

Ответ. б) 2.

Использовался оператор деления с округлением вниз, поэтому дробная часть просто отбросилась.

2.4. Что будет выведено на экран в результате выполнения инструкции print(4 + 3.0)?

Варианты ответов: а) 7.0,   б) 4 + 3.0,   в) 7,   г) ошибка.   Показать решение.

Ответ. а) 7.0.

Результат был приведен к более общему типу, т.е. типу float.

2.5. Какое число будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2.5,   б) 1,   в) 0.1,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 5
y = 2
z = x%y
print(z)

Ответ. б) 1.

Получили остаток от деления.

2.6. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 5,   б) 0,   в) 10,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 5
x += x - x
print(x)

Ответ. а) 5.

Эквивалентно инструкции x = x + x - x.

2.7. Выберите литералы чисел, представленные в шестнадцатеричной системе счисления.

Варианты ответов: а) 0X755,   б) 16755,   в) 0x1101,   г) 0o1675. Показать решение.

Ответ. а) 0X755,  в) 0x1101.

В шестнадцатеричной системе счисления запись целого числа должна начинаться с нуля и латинской буквы X в верхнем или нижнем регистре (т.е. 0x или 0X), после чего должны идти символы последовательности 0123456789ABCDEF, представляющих данную систему счисления. При этом буквы также разрешается использовать в любом регистре. Например, 0x7F, 0XDD5A, -0xfF9. Если будут использованы символы не входящие в данный диапазон, интерпретатор сгенерирует сообщение об ошибке.

2.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 9.0,   б) 9,   в) 6.0 + 3,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 3
y = 3.0
z = '3'
print(x + y + z)

Ответ. г) ошибка.

Числа разных типов могут участвовать в операции сложения и вычитания, а вот числа и строки – нет.

2.9. Какой оператор используется для получения остатка от деления в Python?

Варианты ответов: а) /,   б) //,   в) **,   г) %. Показать решение.

Ответ. г) %.

2.10. Что будет выведено на экран в результате выполнения инструкции print(5**(5 - 2))?

Варианты ответов: а) 15,   б) 125,   в) 45.0,   г) ошибка.   Показать решение.

Ответ. б) 125.

Сочетание символов ** используется в Питоне для возведения в степень. При этом 0**0 = 1.

2.11. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 9.4,   б) 9.35,   в) 9.15,   г) 9.45.   Показать решение.

Условие pythonCodes
x = round(3.153, 2)
y = round(6.25)
print(x + y)

Ответ. в) 9.15.

Первое число было округлено до двух знаков после запятой, а второе до целой части (по умолчанию). Поэтому и получили 3.15 + 6 = 9.15.

2.12. Какая из встроенных функций Python может быть использована для нахождения модуля числа?

Варианты ответов: а) round,   б) abs,   в) divmod,   г) pow.   Показать решение.

Ответ. б) abs.

2.13. Выберите допустимые записи вещественного числа 0.135 в исходном коде.

Варианты ответов: а) 135E-1,   б) 1.35e-1,   в) .135,   г) 1.35-e1.   Показать решение.

Ответ. б) 1.35e-1,  в) .135.

В Пайтон допустима запись вещественных чисел в экспоненциальной форме. При этом для представления степени 10n используется латинская буква E в верхнем или нижнем регистре (т.е. e или E), следующий за ней необязательный знак плюс или обязательный знак минус, а также сам показатель степени в виде положительного целого числа или нуля. Кроме того, ведущий ноль разрешается опускать.

Тесты по строкам

Теоретический материал по строкам можно почитать в нашем учебнике здесь.

Не забываем, что строки относятся к неизменяемому типу данных, поэтому изменить их непосредственно не получится. Но всегда можно получить измененную копию строки и заменить ею хранящуюся в переменной исходную строку.

3.1. Посчитайте количество литералов строк среди предложенных: '-23.5', '2 + 3', "яблоко", ['груша'], "[5, 7]".

Варианты ответов: а) 2,   б) 3,   в) 4,   г) 5.   Показать решение.

Ответ. в) 4.

'-23.5' и '2 + 3' – строки в одинарных кавычках, "яблоко" и "[5, 7]" – строки в двойных кавычках.

3.2. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 7 + 3,   б) 10,   в) 73,   г) ошибка.   Показать решение.

Условие pythonCodes
x = '7'
y = '3'
z = x + y
print(z)

Ответ. в) 73.

В результате конкатенации строк '7' + '3' получили строку '73'.

3.3. Какой из операторов используется для повторения строки в Python?

Варианты ответов: а) +,   б) *,   в) /,   г) %.   Показать решение.

Ответ. б) *.

Например, результатом выполнения инструкции 'б'*3 будет строка 'ббб'.

3.4. Какая последовательность символов представляет собой экранированную последовательность, соответствующую переводу строки?

Варианты ответов: а) \n,   б) /n,   в) \\n,   г) //n.   Показать решение.

Ответ. а) \n.

Экранированная последовательность – это специальная последовательность символов, начинающаяся со знака обратного слеша, которая обозначает символ, не всегда представимый внутри строки другими способами. Например, \n или \u000A – перевод строки, \" или \u0022 – двойная кавычка и т.д.

3.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 55,   б) 52,   в) 25,   г) ошибка.   Показать решение.

Условие pythonCodes
x = '5'
y = '2'
z = x*int(y)
print(z)

Ответ. а) 55.

Здесь строка '2' была сперва приведена к целому чилу. Поэтому в результате умножения '5'*2 была получена строка '55'.

3.6. Что будет выведено на экран в результате выполнения инструкции print("123456789"[5])?

Варианты ответов: а) 12345,   б) 5,   в) 6,   г) ошибка.   Показать решение.

Ответ. в) 6.

Все символы строки нумеруются, начиная с нуля. Поэтому на экран будет выведен символ строки '6', т.е. символ с индексом 5.

3.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 33,   б) 6,   в) 32,   г) ошибка.   Показать решение.

Условие pythonCodes
x = '3'
y = '2'
z = int(x*y)
print(z)

Ответ. г) ошибка.

Операция умножения строк между собой в Питоне не разрешена.

3.8. Какой из методов используется для преобразования строки в верхний регистр?

Варианты ответов: а) upper(),   б) capitalize(),   в) lower(),   г) title().  Показать решение.

Ответ. а) upper().

Например, 'she'.upper() вернет копию строки 'SHE'.

3.9. Что будет выведено на экран в результате выполнения инструкции print("123456789"[:5])?

Варианты ответов: а) 12345,   б) 5,   в) 6,   г) ошибка.   Показать решение.

Ответ. а) 12345.

Здесь нужно получить срез строки, начиная с первого символа с индексом 0 и заканчивая символом с индексом 4 (это '5').

3.10. Что выведет на экран инструкция print('okpython.net\')?

Варианты ответов: а) okpython.net,   б) okpython.net\,   в) okpython.net\',   г) ошибка.  Показать решение.

Ответ. г) ошибка.

Неформатированные строки не могут заканчиваться неэкранированным символом обратного слеша, т.к. он будет экранировать кавычки в конце строки. В таких случаях можно добавить его отдельно при помощи конкатенации (например, r'D:\text' + '\\'), продублировать и затем удалить при помощи среза (например, r'D:\text\\'[:-1]) или не использовать подавление вообще, экранировав все слеши в обычной строке (например, 'D:\\text\\').

3.11. Какой из методов используется для соединения подстрок в одну строку по заданному разделителю?

Варианты ответов: а) split(),   б) join(),   в) replace(),   г) strip().  Показать решение.

Ответ. б) join().

Например, ''.join(['G', 'P', 'T', '5']) вернет строку 'GPT5'.

3.12. Дана строка s = "012345". Перечислите инструкции, которые выведут на экран 3.

Варианты ответов: а) print(s[3]),   б) print(s[-3]),   в) print(s[3::3]),   г) все предыдущие варианты.  Показать решение.

Ответ. г) все предыдущие варианты.

Символ строки '3' доступен по положительному индексу 3, т.к. нумерация символов начинается с нуля, а также по отрицательному индексу -3, если получать доступ к нему с конца строки (в этом случае нумерация начинается с -1). Также данный символ является первым и единственным символом среза строки s[3::3], поскольку для получения второго элемента среза у строки не хватает длины.

3.13. Что будет выведено на экран в результате выполнения инструкции print('Гостиница 'Орбита', 3 звезды.')?

Варианты ответов: а) Гостиница Орбита, 3 звезды.,   б) Гостиница 'Орбита', 3 звезды.,   в) 'Гостиница 'Орбита', 3 звезды.',   г) ошибка.   Показать решение.

Ответ. г) ошибка.

Использование кавычек любого разрешенного типа внутри строковых литералов, заключенных в кавычки того же типа, разрешается при условии предварительного экранирования их при помощи обратного слеша. В нашем случае правильно было бы написать print('Гостиница \'Орбита\', 3 звезды.'). Также можно было бы использовать двойные кавычки.

3.14. Что возвращает функция len() при передаче в неё строки?

Варианты ответов: а) количество слов,   б) количество символов,   в) количество байт,   г) ошибка.  Показать решение.

Ответ. б) количество символов.

Например, len("груша") вернет 5.

3.15. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) ccc,   б) bbb,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
s = 'abc'*3
s = s[2] + s[5]
s += s[8]
print(s)

Ответ. г) ошибка.

После выполнения второй инструкции s = s[2] + s[5] в переменной будет храниться строка 'cc' длиной в два символа. Поэтому попытка получения символа строки с индексом 8 приведет к ошибке.

3.16. Какой из методов используется для удаления пробельных символов с начала и конца строки?

Варианты ответов: а) lstrip(),   б) rstrip(),   в) strip(),   г) все предыдущие варианты.  Показать решение.

Ответ. в) strip().

Например, ' ddd '.strip() вернет 'ddd'.

3.17. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 6,   б) 7,   в) 8,   г) 9.   Показать решение.

Условие pythonCodes
s = 'bc abc aabc'
s = s.replace('a', 'bc')
s = s.replace('bc', '1')
print(len(s))

Ответ. в) 8.

После выполнения инструкций замены в переменной будет храниться строка '1 11 111' длиной в восемь символов.

3.18. Как проверить, является ли некоторая строка s допустимым в Питоне идентификатором?

Варианты ответов: а) s is identifier,   б) isidentifier(s),   в) s.isidentifier,   г) s.isidentifier().  Показать решение.

Ответ. г) s.isidentifier().

Например, 'Var'.isidentifier() вернет True, а '*var'.isidentifier() вернет False.

3.19. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 'холливуд',   б) 'голливуд',   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
s_1 = 'холливуд'
s_2 = s_1
s_2[0] = 'г'
print(s_1)

Ответ. г) ошибка.

Помним, что строки неизменяемы. Поэтому инструкция s_2[0] = 'г' приведет к ошибке.

3.20. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) x + y = 12,   б) x + 7 = 12,   в) x + y = x + y,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 5; y = 7

print(f'x + {y} = {x + y}')

Ответ. б) x + 7 = 12.

Здесь x находится вне фигурных скобок, поэтому считается интерпретатором за обычный символ строки. А вот выражения внутри фигурных скобок f-строк вычисляются, поэтому при выводе {y} и {x + y} были заменены соответствующими им значениями.

Тесты по спискам

Теоретический материал по спискам можно почитать в нашем учебнике здесь.

Не забываем, что списки, в отличие от строк и кортежей, мы можем изменять непосредственно.

4.1. Какие из представленых литералов относятся к типу list?

Варианты ответов: а) ['1', '2', '3'],   б) '[1, 2, 3]',   в) [(1, 2, 3)],   г) ([1], [2], [3]).   Показать решение.

Ответ. а) ['1', '2', '3'],  в) [(1, 2, 3)].

['1', '2', '3'] – список из трех строковых элементов, а [(1, 2, 3)] – список из одного элемента в виде кортежа.

4.2. Как в Пайтоне создать пустой список?

Варианты ответов: а) li = [],   б) li = None,   в) li = 0,   г) li = list().   Показать решение.

Ответ. а) li = [],  г) li = list().

4.3. Выберите верные утверждения о списках.

Варианты ответов: а) неизменяемые,   б) упорядоченные,   в) последовательности,   г) изменяемые.   Показать решение.

Ответ. б) упорядоченые,  в) последовательности,  г) изменяемые.

4.4. Какие объекты можно хранить в списках?

Варианты ответов: а) только числа и строки,   б) только неизменяемые объекты,   в) любые, кроме объектов функций,   г) любые.   Показать решение.

Ответ. г) любые.

4.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) [3],   б) [1, 1, 1],   в) [1, 1, 1, 1],   г) ошибка.   Показать решение.

Условие pythonCodes
li = [1]
li += li*3
print(li)

Ответ. в) [1, 1, 1, 1].

В первой инструкции был создан список с одним элементом. Во второй инструкции к нему был присоединен список [1, 1, 1], полученный в результате операции умножения li*3 (объединение с самим собой 3 раза, т.е. li + li + li).

4.6. Что будет выведено на экран в результате выполнения инструкции print([1, 2, 3, 4, 5, 6][-4])?

Варианты ответов: а) 1,   б) 2,   в) 3,   г) ошибка.   Показать решение.

Ответ. в) 3.

При использовании отрицательных индексов отсчет элементов ведется с конца списка. При этом отсчет индексов начинается с -1, а не с нуля.

4.7. Что будет выведено на экран в результате выполнения инструкции print([1, 2, 3, 4, 5, 6][:-4])?

Варианты ответов: а) [1, 2],   б) 3,   в) [3],   г) ошибка.   Показать решение.

Ответ. а) [1, 2].

Берем срез [0:-4], т.е. начиная с первого элемента и заканчивая элементом с индексом -4, но не включая его в конечный результат.

4.8. Что задает третий параметр в срезе списка?

Варианты ответов: а) шаг среза,   б) начало среза,   в) конец среза,   г) в срезах не указывают третий параметр.   Показать решение.

Ответ. а) шаг среза.

4.9. Что будет выведено на экран в результате выполнения инструкции print([1, 2, 3, 4, 5, 6][::-4])?

Варианты ответов: а) 3,   б) [6, 3],   в) [6, 2],   г) ошибка.   Показать решение.

Ответ. в) [6, 2].

При использовании отрицательного шага срез берется в обратном направлении, т.е. выборка элементов для среза ведется с конца списка.

4.10. Как добавить элемент elem в конец списка li?

Варианты ответов: а) li.append(elem),   б) li.insert(len(li), elem),   в) li.extend([elem]),   г) li += [elem].   Показать решение.

Ответ. Все варианты верны.

И это еще не все. Можно, например, использовать срез li[len(li):len(li)] = [elem]

4.11. Что будет выведено на экран в результате выполнения инструкции print(['a', 'b', 'cd', 'e', 'f'][3])?

Варианты ответов: а) d,   б) e,   в) cd,   г) c.   Показать решение.

Ответ. б) e.

В списке содержится пять строковых элементов, просто один элемент представляет собой строку из двух символов. Элементом с индексом 3 является строка 'e'.

4.12. Как удалить из списка li элемент elem по его индексу i?

Варианты ответов: а) li.pop(i),   б) del li[i],   в) li.remove(elem),   г) li.clear().   Показать решение.

Ответ. а) li.pop(i),  б) del li[i].

Третий вариант удаляет из списка первый попавшийся элемент, имеющий значение elem. Последний вариант удаляет все элементы из списка.

4.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) [1, 2, 3, 4, 5],   б) [1, 2, 4, 5],   в) [1, 3, 4, 5],   г) ошибка.   Показать решение.

Условие pythonCodes
li = [1, 2, 3, 4, 5]
li = li[0:2] + li[3:]
print(li)

Ответ. б) [1, 2, 4, 5].

Во второй инструкции объединяются списки [1, 2] (результат среза li[0:2]) и [4, 5] (результат среза li[3:]).

4.14. Дан список li = ['a', 'b', 'cd', 'e', 'f']. Какие инструкции выведут на экран символ d.

Варианты ответов: а) print(li[2][1]),   б) print(li[2][2]),   в) print(li[3]),   г) print(li[-3][1]).  Показать решение.

Ответ. а) print(li[2][1]),  г) print(li[-3][1]).

Для доступа к элементам списка, которые сами являются последовательностями, используется цепочка квадратных скобок с указанием требуемых индексов. В нашем случае доступ к строке 'cd' можно получить через li[2] или же через li[-3], если считать с конца списка. Вторые квадратные скобки дают доступ уже к самому символу 'd' строки.

4.15. Как в Пайтоне объединить два списка в один?

Варианты ответов: а) li_1.join(li_2),   б) li_1 + li_2,   в) li_1.extend(li_2),   г) li_1.append(li_2).   Показать решение.

Ответ. б) li_1 + li_2,  в) li_1.extend(li_2).

Метод join() имеется у строк, у списков такой метод отсутствует. В последнем случае метод append() не объединит списки, а добавит второй список в первый в качестве нового элемента.

4.16. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) True,   б) None,   в) False,   г) ошибка.   Показать решение.

Условие pythonCodes
li = ['a', 'b', ['cd'], 'e', 'f']
ans = 'cd' in li
print(ans)

Ответ. в) False.

В списке li имеется элемент ['cd'] (список), а не 'cd' (строка).

4.17. Как в Питоне обратить порядок элементов в списке?

Варианты ответов: а) li.reverse(),   б) li = li[::-1],   в) reverse(li),   г) никак.   Показать решение.

Ответ. а) li.reverse(),  б) li = li[::-1].

Встроенная функция reverse() в Пайтоне отсутствует.

4.18. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) ['теплое', 'море'],   б) ['холодное', 'море'],   в) ['холодное', 'теплое', 'море'],   г) ошибка.   Показать решение.

Условие pythonCodes
li_1 = ['теплое', 'море']
li_2 = li_1
li_2[0] = 'холодное'
print(li_1)

Ответ. б) ['холодное', 'море'].

Обе ссылки li_1 и li_2 ссылаются на один и тот же изменяемый объект (список) в памяти и полное или частичное изменение этого объекта доступно через любую из них. Соответственно через любую из ссылок видны и последствия таких изменений.

4.19. Как добавить любой элемент x в конец списка li, используя срез?

Варианты ответов: а) li[len(li):] = [x],   б) li[len(li):] = x,   в) li[-1:] = [x],   г) li[-1:] = x.   Показать решение.

Ответ. а) li[len(li):] = [x].

Самостоятельно подумайте над результатами выполнения всех предложенных инструкций и проверьте ответы в интерпретаторе.

4.20. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) [1, 2, 3],   б) [1, 2, 3, 'abc'],   в) [1, 2, 3, 'a', 'b', 'c'],   г) ошибка.   Показать решение.

Условие pythonCodes
li = [1, 2, 3]
li.extend('abc')
print(li)

Ответ. в) [1, 2, 3, 'a', 'b', 'c'].

li.extend(iterable) – добавляет элементы из итерируемого объекта iterable в конец списка li (тоже самое что и li[len(li):] = iterable).

4.21. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) ['a', 'b'],   б) ['a', 'b', 'cd'],   в) ['a', 'b', 'c', 'd'],   г) ошибка.   Показать решение.

Условие pythonCodes
li = ['a', 'b']
li += 'cd'
print(li)

Ответ. в) ['a', 'b', 'c', 'd'].

Здесь в конец списка добавляются элементы итерируемого объекта. Число так добавить не получится.

Тесты по кортежам

Теоретический материал по кортежам можно почитать в нашем учебнике здесь.

Не забываем, что кортежи относятся к неизменяемому типу данных, поэтому изменить их непосредственно не получится. Но всегда можно получить измененную копию кортежа и заменить ею хранящийся в переменной исходный кортеж.

5.1. Какой тип данных в Python представляет кортежи?

Варианты ответов: а) dict,   б) list,   в) tuple,   г) set.   Показать решение.

Ответ. в) tuple.

dict – словарь, list – список, set – множество.

5.2. Выберите верные утверждения о кортежах.

Варианты ответов: а) неизменяемые,   б) изменяемые,   в) неупорядоченые,   г) упорядоченые.   Показать решение.

Ответ. а) неизменяемые,  г) упорядоченные.

В отличие от списков кортежи неизменяемы, т.е. добавлять в них новые элементы, а также заменять или удалять их запрещено. В тоже время кортежи упорядоченны, т.к. каждый элемент пронумерован целочисленными индексами.

5.3. Какие из представленых литералов относятся к кортежам?

Варианты ответов: а) (1,),   б) '(1, 2, 3)',   в) ([1, 2, 3]),   г) ("Питон").   Показать решение.

Ответ. а) (1,),  г) ("Питон",).

Вариант б) – строка, в) – список.

5.4. Как в Python создать пустой кортеж?

Варианты ответов: а) tpl = (),   б) tpl = {},   в) tpl = tuple(),   г) tpl = tuple(0).   Показать решение.

Ответ. а) tpl = (),  в) tpl = tuple().

Вариант б) – пустой словарь, г) – ошибка, т.к. в конструктор нужно передавать итерируемый объект.

5.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) (3,),   б) (1, 1, 1),   в) (1, 1, 1, 1),   г) ошибка.   Показать решение.

Условие pythonCodes
t = (1,)
t += t*3
del t[0]
print(t)

Ответ. г) ошибка.

Кортежи неизменяемы, а значит удалять элементы из них запрещается.

5.6. Как удалить из кортежа tpl элемент elem с индексом i?

Варианты ответов: а) tpl.pop(i),   б) del tpl[i],   в) tpl.remove(elem),   г) никак.   Показать решение.

Ответ. г) никак.

Кортежи неизменяемы, а значит удалять элементы из них запрещается.

5.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) (1,),   б) (1, [2]),   в) (1, [3]),   г) ошибка.   Показать решение.

Условие pythonCodes
tpl = (1, [2, 3])
del tpl[1][1]
print(tpl)

Ответ. б) (1, [2]).

Здесь все в порядке, т.к. элемент кортежа, которым является список, не удаляется, а изменяется.

5.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 0----,   б) 76543,   в) 10987,   г) ----.   Показать решение.

Условие pythonCodes
tpl = (1, 2, ('-3-4-5-6', '-7-8-9-10'))
print(tpl[2][1][-1::-2])

Ответ. а) 0----.

Здесь был получен доступ к строке '-7-8-9-10' вложенного кортежа и взят ее срез с использованием отрицательного шага.

Тесты по словарям

Теоретический материал по словарям можно почитать в нашем учебнике здесь.

6.1. Какой тип данных в Python представляет словари?

Варианты ответов: а) dict,   б) list,   в) tuple,   г) set.   Показать решение.

Ответ. а) dict.

list – список, tuple – кортеж, set – множество.

6.2. Какие из утверждений о словарях верны?

Варианты ответов: а) изменяемые,   б) неизменяемые,   в) доступ к элементам по индексу,   г) доступ к элементам по ключу.   Показать решение.

Ответ. а) изменяемые,  г) доступ к элементам по ключу.

6.3. Какие из представленых литералов относятся к словарям?

Варианты ответов: а) {'красный', 'синий'},   б) {1: 'Январь', 2: 'Февраль'},   в) ({'name': 'Оля'}, {'age': 18}),   г) {'list': [1, 2, 3]}.   Показать решение.

Ответ. б) {1: 'Январь', 2: 'Февраль'},  г) {'list': [1, 2, 3]}.

Вариант а) – множество, в) – кортеж из двух словарей.

6.4. Как в Питоне создать пустой словарь?

Варианты ответов: а) d = dict(),   б) d = (),   в) d = {},   г) d = [].   Показать решение.

Ответ. а) d = dict(),  в) d = {}.

Вариант б) – пустой кортеж, г) – пустой список.

6.5. Выберите верные способы создания словаря с двумя элементами.

Варианты ответов: а) d = dict(name='Eva', age=33),   б) d = dict(('name', 'Eva'), ('age', 33)),   в) d = dict('name'='Eva', 'age'=33),   г) d = dict((name, 'Eva'), (age, 33)).   Показать решение.

Ответ. а) d = dict(name='Eva', age=33),  б) d = dict(('name', 'Eva'), ('age', 33)).

в) – ошибка, т.к. в этом случае для ключей нужно использовать идентификаторы, а не строки,  г) – здесь наоборот.

6.6. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2,   б) 3,   в) 4,   г) ошибка.   Показать решение.

Условие pythonCodes
d = {1: 'a', '2': ['b', {'c': 3}], (5, '6'): ('f', 'g')}
print(len(d))

Ответ. б) 3.

Словарь содержит три элемента с ключами 1, '2' и (5, '6').

6.7. Какие из представленых литералов могут быть использованы в качестве ключей словаря?

Варианты ответов: а) (1,),   б) [2,],   в) '3',   г) -.4.   Показать решение.

Ответ. а) (1,),  в) '3',  г) -.4.

В качестве ключей разрешается использовать только хешируемые элементы. Так что список отпадает.

6.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1, 1, 1},   б) {'1', '1', '1'},   в) {1: '1', 1: '1', 1: '1'},   г) ошибка.   Показать решение.

Условие pythonCodes
d = {1: '1'}
d += d*2
print(d)

Ответ. г) ошибка.

Операция умножения на число для словарей не определена.

6.9. Как получить значение из словаря d по ключу key?

Варианты ответов: а) d.value(key),   б) d[key],   в) d.get(key),   г) d.setdefault(key).   Показать решение.

Ответ. б) d[key],  в) d.get(key),  г) d.setdefault(key).

Метод value() у словарей отсутствует.

6.10. Как удалить значение из словаря d по ключу key?

Варианты ответов: а) del d[key],   б) d.pop(key),   в) d.remove(key),   г) никак.   Показать решение.

Ответ. а) del d[key],  б) d.pop(key).

Метод remove() у словарей отсутствует.

6.11. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1: 'one', 2: 'два', 3: 'три'},   б) {},   в) {1: 'один', 2: 'два', 3: 'три'},   г) ошибка.   Показать решение.

Условие pythonCodes
d = {1: 'one'}
d.update([(1, 'один'), (2, 'два')])
d[3] = 'три'
print(d)

Ответ. в) {1: 'один', 2: 'два', 3: 'три'}.

В процессе обновления словаря значение 'one' ключа 1 было обновлено значением 'один'.

6.12. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) ['a', 'b'],   б) ['a', 'b', 'c'],   в) dict_keys(['a', 'b']),   г) ошибка.   Показать решение.

Условие pythonCodes
d = {'a': 1, 'b': 2, 'c': 3}
k = d.keys()
del d['c']
print(list(k))

Ответ. а) ['a', 'b'].

Здесь стоит помнить, что представление ключей динамически изменяется в процессе изменения словаря.

Тесты по множествам

Теоретический материал по множествам можно почитать в нашем учебнике здесь.

7.1. Какой тип данных в Питоне представляет множества?

Варианты ответов: а) tuple,   б) list,   в) dict,   г) set.   Показать решение.

Ответ. г) set.

7.2. Какие из утверждений о множествах верны?

Варианты ответов: а) коллекции неизменяемых объектов,   б) изменяемые коллекции объектов,   в) неупорядоченные коллекции объектов,   г) упорядоченные коллекции объектов.   Показать решение.

Ответ. а) коллекции неизменяемых объектов,  б) изменяемые коллекции объектов,  в) неупорядоченные коллекции объектов.

Сами множества изменять разрешается, но вот их элементы должны быть неизменяемыми типами данных. Поэтому мы можем добавить в качестве элемента число, но не список. Кроме того, множества неупорядоченные коллекции. Поэтому доступ к его элементам отсутствует как по индексам, так и по ключам.

7.3. Какие из представленых литералов относятся к типу set?

Варианты ответов: а) {'кот', "ток"},   б) "{1, 2, 3}",   в) {[], (), {}, ''},   г) [{'set': {1, 2, 3}}].   Показать решение.

Ответ. а) {'кот', "ток"},  в) {[], (), {}, ''}.

Вариант б) – строка, г) – список.

7.4. Как создать пустое множество в Пайтоне?

Варианты ответов: а) st = (),   б) st = set(),   в) st = [],   г) st = {}.   Показать решение.

Ответ. б) st = set().

Вариант а) – пустой кортеж, в) – пустой список, г) – пустой словарь.

7.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {3},   б) {1, 1, 1},   в) {1, 1, 1, 1},   г) ошибка.   Показать решение.

Условие pythonCodes
st = {1}
st += st*3
print(st)

Ответ. г) ошибка.

Как и для словарей, операция умножения на число у множеств не определена.

7.6. Даны два множества {'a', 'b', 'c'} и {'b', 'c', 'd'}. Какое из множеств является их пересечением?

Варианты ответов: а) {'a', 'b'},   б) {'b', 'c'},   в) {'c', 'd'},   г) {}.   Показать решение.

Ответ. б) {'b', 'c'}.

Операция пересечения предполагает получение нового множества с элементами, которые есть сразу у всех объединяемых множеств.

7.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {'о', 'н', 'л', 'а', 'я'},   б) {'о'},   в) {'н', 'а'},   г) ошибка.   Показать решение.

Условие pythonCodes
st_1 = {'о', 'н', 'а'}
st_2 = {'о', 'л', 'я'}
print(st_1 | st_2)

Ответ. а) {'о', 'н', 'л', 'а', 'я'}.

Операция объединения предполагает получение нового множества с элементами, которые есть хотя бы у одного из объединяемых множеств.

7.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1, 2, 3},   б) {(2, 3), 1},   в) {2, 3},   г) ошибка.   Показать решение.

Условие pythonCodes
st = set()
st.add(1)
st.add((2, 3))
print(st)

Ответ. б) {(2, 3), 1}.

Добавлять неизменяемые элементы в множество разрешается.

7.9. Как удалить элемент elem из множества st?

Варианты ответов: а) st.remove(elem),   б) st.discard(elem),   в) st.pop(elem),   г) никак.   Показать решение.

Ответ. а) st.remove(elem),  б) st.discard(elem).

Метод pop() у множеств не принимает в качестве аргумента элемент. Он просто удаляет и возвращает произвольный элемент множества или, если множество окажется пустым, возбуждает исключение KeyError.

7.10. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1, 2, 3, 4},   б) {(1, 2), [3, 4]},   в) [3, 4],   г) ошибка.   Показать решение.

Условие pythonCodes
st = set()
st.add((1, 2))
st.add([3, 4])
print(st)

Ответ. г) ошибка.

Добавлять изменяемые элементы в множество запрещается.

7.11. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {'1', '2'},   б) {},   в) {1, 2, '1', '2'},   г) ошибка.   Показать решение.

Условие pythonCodes
fst = frozenset({1, 2})	
fst.clear()
fst.add('1', '2')
print(fst)

Ответ. г) ошибка.

Изменять замороженное множество запрещается.

7.12. С помощью какой функции можно отсортировать элементы множества?

Варианты ответов: а) метод sort(),   б) встроенная функция sorted(),   в) пользовательская функция,   г) такой функции нет.   Показать решение.

Ответ. г) такой функции нет.

Не забываем, что множество представляет собой неупорядоченную коллекцию объектов, а значит, отсортировать его не получится.

7.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1, 2, 3},   б) True,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
st_1 = {1, 2}
st_2 = st_1.add(3)
print(st_2)

Ответ. в) None.

Элемент в множество st_1 конечно же добавлен будет. Однако метод хоть и изменяет свое множество, но возвращает не его, а значение None.

Тесты по логическому типу

Теоретический материал по логическому типу данных можно почитать в нашем учебнике здесь.

8.1. Какой тип данных в Пайтоне представляет логические значения?

Варианты ответов: а) NoneType,   б) bool,   в) float,   г) int.   Показать решение.

Ответ. б) bool.

NoneType – тип NoneType, float – вещественные числа, int – целые числа.

8.2. Выберите верные варианты написания имен булевых констант.

Варианты ответов: а) TRUE,   б) True,   в) false,   г) False.   Показать решение.

Ответ. б) True,  г) False.

Регистр написания имен имеет значение.

8.3. Какое значение будет иметь выражение True and False?

Варианты ответов: а) True,   б) False,   в) None,   г) ошибка.   Показать решение.

Ответ. б) False.

Еще раз посмотрите таблицу №3 параграфа.

8.4. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1,   б) 10,   в) 11,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 10
res = True + x*False
print(res)

Ответ. а) 1.

Булевы константы можно использовать в математических выражениях на равных с числами, оперируя True как 1, а False как 0.

8.5. Какой оператор позволяет проверить одновременное выполнение сразу нескольких условий?

Варианты ответов: а) and,   б) or,   в) not,   г) is.   Показать решение.

Ответ. а) and.

Например, True if (x in {-1, 0, 1.3}) and (x != 0) and (type(x) is int) else False.

8.6. Что выведет на экран инструкция print(False < (7 <= 10))?

Варианты ответов: а) None,   б) True,   в) False,   г) ошибка.   Показать решение.

Ответ. б) True.

Операции сравнения возвращают булевы значения, кроме того, 0 < 1.

8.7. Что выведет на экран инструкция print(11 > 0 is True)?

Варианты ответов: а) None,   б) True,   в) False,   г) ошибка.   Показать решение.

Ответ. в) False.

11 > 0 is True эквивалентно (11 > 0) and (0 is True). Это касасется и других комбинированных условий сравнения: в общем виде expr_1 op expr_2 op expr_3 эквивалентно (expr_1 op expr_2) and (expr_2 op expr_3).

8.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3 or три,   б) 3,   в) три,   г) True.   Показать решение.

Условие pythonCodes
x = 3
y = 'три'
print(x or y)

Ответ. б) 3.

Здесь 3 интерпретируется как True, поэтому правый операнд уже не вычислялся. Вместо этого был просто возвращен результат вычисления левого операнда (см. подробнее в учебнике).

8.9. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) Ok!,   б) not True or foo(),   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
def foo(): print('Ok!')
not True or foo()

Ответ. а) Ok!.

Здесь наоборот, not True интерпретируется как False, поэтому был возвращен результат вычисления правого операнда, т.е. вызов функции (см. подробнее в учебнике).

Тесты на приведение типов

Теоретический материал по приведению типов можно почитать в нашем учебнике здесь.

9.1. Каким будет результат преобразования типа для инструкции bool(-1)?

Варианты ответов: а) False,   б) True,   в) None,   г) 1.   Показать решение.

Ответ. б) True.

Среди чисел только нулевые значения преобразуются в False.

9.2. Каким будет результат преобразования типа для инструкции str([1, '2', 3])?

Варианты ответов: а) [1, '2', 3],   б) "1, '2', 3",   в) "[1, '2', 3]",   г) ['1', '2', '3'].   Показать решение.

Ответ. в) "[1, '2', 3]".

Будет выведено строковое представление объекта, в данном случае списка.

9.3. Каким будет результат преобразования типа для инструкции float('-42 ')?

Варианты ответов: а) -42,   б) -42.0,   в) -4.2e-1,   г) ошибка.   Показать решение.

Ответ. б) -42.0.

Если строка содержит верное представление целого числа в десятичной системе счисления, то интерпретатор в процессе приведения строки к вещественному типу вернет это число, добавив к нему нулевую дробную часть.

9.4. Каким будет результат преобразования типа для инструкции bool(' False ')?

Варианты ответов: а) False,   б) 'False',   в) True,   г) ошибка.   Показать решение.

Ответ. в) True.

Непустые строки преобразуются в True.

9.5. Каким будет результат преобразования типа для инструкции tuple(" hello ")?

Варианты ответов: а) (' ', 'h', 'e', 'l', 'l', 'o', ' '),   б) ('h', 'e', 'l', 'l', 'o'),   в) (" hello ",),   г) (" hello ").   Показать решение.

Ответ. а) (' ', 'h', 'e', 'l', 'l', 'o', ' ').

Все элементы итерируемого объекта, т.е. символы переданной строки, стали элементами кортежа.

9.6. Каким будет результат преобразования типа для инструкции set([1, 2, 3, 3])?

Варианты ответов: а) {1, 2, 3, 3},   б) {1, 2, 3},   в) [1, 2, 3, 3],   г) [1, 2, 3].   Показать решение.

Ответ. б) {1, 2, 3}.

Все неповторяющиеся элементы итерируемого объекта, т.е. числа переданного списка, стали элементами множества (коллекции уникальных объектов).

9.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2.0,   б) 2,   в) 0.0,   г) 0.   Показать решение.

Условие pythonCodes
res = int(True) + float(True)
print(res)

Ответ. а) 2.0.

После преобразования получим 1 + 1.0, поэтому результатом будет вещественное число (более общий тип).

9.8. Каким будет результат преобразования типа для инструкции int(-0.319e2)?

Варианты ответов: а) 0,   б) -3,   в) -31,   г) ошибка.   Показать решение.

Ответ. в) -31.

-0.319e2 – это вещественное число -31.9. А в ходе преобразования вещественных чисел в целые их дробная часть просто отбрасывается.

9.9. Каким будет результат преобразования типа для инструкции list({'a': 1, 'b': 2, 'c': 3})?

Варианты ответов: а) ['a', 'b', 'c'],   б) [1, 2, 3],   в) [('a', 1), ('b', 2), ('c', 3)],   г) ошибка.   Показать решение.

Ответ. а) ['a', 'b', 'c'].

Словари преобразуются в списки с ключами, теряя при этом свои значения.

9.10. Каким будет результат преобразования типа для инструкции dict(['a', 'b'])?

Варианты ответов: а) {'a': None, 'b': None},   б) {'a': False, 'b': False},   в) {'a': True, 'b': True},   г) ошибка.   Показать решение.

Ответ. г) ошибка.

К словарям напрямую могут быть преобразованы только итерируемые объекты, содержащие пары значений, в которых первые элементы становятся ключами словаря, а вторые – его значениями.

Тесты по инструкции присваивания

Теоретический материал по инструкциям присваивания можно почитать в нашем учебнике здесь.

10.1. Какой из представленных вариантов соответствует позиционной инструкции присваивания?

Варианты ответов: а) b = [1, 2],   б) a += [1, 2],   в) a = b = [1, 2],   г) a, b = [1, 2].   Показать решение.

Ответ. г) a, b = [1, 2].

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

10.2. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 10,   б) 20,   в) 30,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 10
y = x
x = 20
print(y)

Ответ. а) 10.

Сперва переменная x хранила ссылку на объект целого числа 10 в памяти. Далее, в результате присваивания, ссылку на объект получила еще и переменная y. В результате на неизменяемый объект в памяти стало указывать уже две ссылки. Но ниже переменной x было присвоено новое значение, точнее новая ссылка на другой объект целого числа 20. Однако объект числа 10 при этом из памяти не удалился, ведь ссылка на него осталась еще в переменной y, что и подтвердил вывод инструкции print(y).

10.3. Какой оператор используется для присваивания значения переменной внутри выражения?

Варианты ответов: а) =,   б) ==,   в) :=,   г) +=.   Показать решение.

Ответ. в) :=.

Был введен в Python 3.8.

10.4. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 10,   б) [1, 2, 3],   в) [10, 2, 3],   г) ошибка.   Показать решение.

Условие pythonCodes
a = [1, 2, 3]
b = a
a[0] = 10
print(b)

Ответ. в) [10, 2, 3].

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

10.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) (1, 2),   б) (2, 1),   в) (4, 3),   г) (3, 4).   Показать решение.

Условие pythonCodes
x = (1, 2)
y = (3, 4)
x, y = y, x
print(x)

Ответ. в) (3, 4).

В результате позиционного присваивания происходит обмен значениями за счет создания временного кортежа ((3, 4), (1, 2)).

10.6. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) [1, 2],   б) [10, 2],   в) [],   г) ошибка.   Показать решение.

Условие pythonCodes
x = [1, 2]
y = x[:]
x[0] = 10
print(y)

Ответ. а) [1, 2].

В отличие от четвертого теста, здесь переменные ссылаются на разные объекты в памяти, т.к. переменной y присваивается ссылка на совершенно другой объект в памяти, создаваемый для хранения копии исходного списка. Поэтому инструкция x[0] = 10 изменяет только тот объект в памяти, на который ведет соответствующая переменной x ссылка.

10.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3,   б) 6,   в) 7,   г) ошибка.   Показать решение.

Условие pythonCodes
a, b, *c = [1, 2, 3, 4, 5] 
a += b + c[1]
print(a)

Ответ. в) 7.

В результате использования в первой инструкции расширенного синтаксиса распаковывания последовательностей в переменных будут храниться значения 1, 2 и [3, 4, 5]. Во второй инструкции в результате комбинированного присваивания в переменной a будет храниться число 7 (1 + 2 + 4).

10.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {1, 2}, {1, 2}, {1, 2},   б) {1}, {2}, {},   в) {1}, {1, 2}, {},   г) ошибка.   Показать решение.

Условие pythonCodes
a = b = c = set()  
a |= {1}
b |= {2}
print(a, b, c, sep=', ')

Ответ. а) {1, 2}, {1, 2}, {1, 2}.

В результате группового присваивания пустого множества сразу трем переменным на созданный под это множество в памяти объект будет вести сразу три ссылки. Добавление в это множество новых элементов (т.е. изменение этого совместно используемого объекта) возможно через любую из них. Через любую иэ этих ссылок можно наблюдать затем и изменения, произошедшие в объекте.

10.9. Какие из представленных фрагментов кода содержат ошибки?

Варианты ответов: а) x, y = [3, '3'],   б) x, *y = 1, 2, 3,   в) *x, = 1, 2, 3,   г) x, *y, *z = 1, 2, 3, 4.   Показать решение.

Ответ. г) x, *y, *z = 1, 2, 3, 4.

Расширенный синтаксис распаковывания последовательностей допускает использование в позиционном присваивании только одной переменной со звездочкой.

Тесты по условной инструкции

Теоретический материал по условной инструкции можно почитать в нашем учебнике здесь.

11.1. Какие из частей условной инструкции не являются обязательными?

Варианты ответов: а) if,   б) elif,   в) else,   г) все части необязательны.   Показать решение.

Ответ. б) elif,  в) else.

Блоков elif может быть как несколько, так и вообще ниодного. Блок else может отсутствовать, но если он используется, то только один.

11.2. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) a>b,   б) a>=b,   в) a<b,   г) a<=b.   Показать решение.

Условие pythonCodes
a, b = 5, 10

if a>b:
    print("a>b")
else:
    print("a<=b")

Ответ. г) a<=b.

Поскольку условие блока if оказалось ложным, сработал блок else.

11.3. Какой из представленных вариантов можно отнести к верному формату представления условной инструкции?

Варианты ответов: а) if/elseif/else,   б) if/elif/else,   в) if/else/elif,   г) A = Y if X else Z.   Показать решение.

Ответ. б) if/elif/else.

Вариант г) соответствует верному формату трехместного выражения if/else. Но в тесте требуется найти верный формат именно инструкции.

11.4. Сколько условий допускается для проверки внутри одной условной конструкции?

Варианты ответов: а) 1,   б) 2,   в) не более 100,   г) любое количество.   Показать решение.

Ответ. г) любое количество.

Просто следует использовать требуемое количество блоков elif.

11.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1-й разряд,   б) 2-й разряд,   в) 3-й разряд,   г) не присваивается.   Показать решение.

Условие pythonCodes
очки = 73

if очки >= 90:
    разряд = "1-й разряд"
elif очки >= 80:
    разряд = "2-й разряд"
elif очки >= 70:
    разряд = "3-й разряд"
else:
    разряд = "не присваивается"

print(разряд)

Ответ. в) 3-й разряд.

11.6. Какой из предлагаемых операторов можно использовать для инвертирования условия в инструкции if?

Варианты ответов: а) and,   б) or,   в) not,   г) is.   Показать решение.

Ответ. в) not.

Например, if not y==0: print(x/y).

11.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1,   б) 2,   в) 3,   г) ошибка.   Показать решение.

Условие pythonCodes
res = 0
if []: res += 1
if False: res += 1
if not None: res += 1
if -1: res += 1
print(res)

Ответ. б) 2.

Нужно вспомнить особенности приведения к логическому типу: пустой список приводится к False, а вот число -1 к значению True. Кроме того, not None конвертируется в True. В результате из четырех блоков if выполнится только два.

11.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) None,   б) True,   в) False,   г) ошибка.   Показать решение.

Условие pythonCodes
s = ''

if s:
    if 'a' in s:
        res = True
    else:
        res = False    
else:
    res = None 

print(res)

Ответ. а) None.

Опять же, нужно вспомнить особенности приведения к логическому типу: пустая строка приводится к False. Следовательно будет выполнен блок else.

11.9. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) -8,   б) -2,   в) 2,   г) ошибка.   Показать решение.

Условие pythonCodes
x, y = -5, -3
res = (-1*x if x<0 else x) + y
print(res)

Ответ. в) 2.

Здесь используется трехместное условное выражение, поэтому ошибки не будет.

Тесты по циклам for и while

Теоретический материал по циклам можно почитать в нашем учебнике здесь.

12.1. Какие из представленных операторов представляют циклы в Питоне?

Варианты ответов: а) if,   б) while,   в) switch,   г) for.   Показать решение.

Ответ. б) while,  г) for.

switch в Питоне вообще отсутствует.

12.2. Какой из следующих вариантов можно использовать для организации бесконечного цикла?

Варианты ответов: а) while True:,   б) while 1:,   в) for i in range(inf):,   г) все вышеуказанные.   Показать решение.

Ответ. а) while True:,  б) while 1:.

1 и True взаимозаменяемы.

12.3. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3,   б) (3),   в) 1 2 3 ,   г) ошибка.   Показать решение.

Условие pythonCodes
for i in (3):
    print(i, end=' ')

Ответ. г) ошибка.

(3) – это не кортеж с одним элементом, а просто число в скобках, т.е. неитерируемый объект.

12.4. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) -1 -2 -3,   б) 0 -1 -2 -3,   в) -1 -2 -3,   г) 0 -1 -2.   Показать решение.

Условие pythonCodes
for i in range(3):
    print(-i, end=' ')

Ответ. г) 0 -1 -2.

Функция range() в нашем случае вернет объект с последовательностью из трех чисел от нуля до двух. А цикл for выведет их на экран с противоположным знаком.

12.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 0 1 2 3 4 5,   б) 1 2 3 4 5,   в) a b c d e f,   г) ошибка.   Показать решение.

Условие pythonCodes
li = ['12345', 'abcdef']
for elem in li[0]:
    print(elem, end=' ')

Ответ. б) 1 2 3 4 5.

Осуществили итерацию по символам строки, которая является первым элементом списка.

12.6. Какой из следующих операторов предназначен для прерывания цикла?

Варианты ответов: а) pass,   б) continue,   в) break,   г) else.   Показать решение.

Ответ. в) break.

Для прерывания только одного витка итерации и перехода на следующий используется continue.

12.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) a (b, c) d (e, f),   б) a ('b', 'c') d ('e', 'f'),   в) a [b, c] d [e, f],   г) a ['b', 'c'] d ['e', 'f'].   Показать решение.

Условие pythonCodes
d = [('a', 'b', 'c'), ('d', 'e', 'f')]
for x, *y in d: 
    print(x, y, end=' ')

Ответ. г) a ['b', 'c'] d ['e', 'f'].

Здесь осуществляется итерация по двум элементам (кортежам) списка. При этом используется расширенный синтаксис распаковывания последовательностей. В результате на каждом витке первый элемент целевого кортежа присваивается переменной x, а оставшиеся собираются в список, который присваивается переменной y. Далее значения переменных просто выводятся на экран.

12.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1 2 3,   б) 1 2 3 4,   в) 1 2 3 4 5,   г) ошибка.   Показать решение.

Условие pythonCodes
k = 1
while k <= 5:
    if k > 3: break            
    print(k, end=' ')               
    k += 1   

Ответ. а) 1 2 3.

Счетчик стартует с единицы. Цикл прерывается оператором break и не достигает очередной инструкции вывода, как только значение счетчика достигнет четырех.

12.9. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1 2 3 4 5,   б) 0 1 2,   в) 0 1 2 3,   г) 0 1 2 4 5.   Показать решение.

Условие pythonCodes
k = 0
while True:
    if k > 5: break            
    if k == 3: 
        k += 1
        continue 
    print(k, end=' ')               
    k += 1 

Ответ. г) 0 1 2 4 5.

Счетчик стартует с нуля. Цикл прерывается оператором break и не достигает очередной инструкции вывода, как только значение счетчика достигнет шести. При этом по ходу цикла значение 3 пропускается из-за условной инструкции if и оператора continue внутри.

12.10. Какой из следующих операторов можно использовать для выполнения блока кода после завершения цикла?

Варианты ответов: а) pass,   б) continue,   в) break,   г) else.   Показать решение.

Ответ. г) else.

Операторы continue и break используются внутри циклов. А pass – это вообще пустая инструкция-заполнитель, которая может использоваться внутри циклов вместо тела.

12.11. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2 1 0,   б) 3 2 1 0,   в) 3 2 1 0 0,   г) ошибка.   Показать решение.

Условие pythonCodes
k = 4
while k:
    k -= 1           
    print(k, end=' ')               
    if k>2: continue
else:
    print(0)

Ответ. в) 3 2 1 0 0.

Счетчик стартует с четырех. Внутри цикла он сразу же уменьшается на единицу, а новое значение выводится на экран. Поскольку условная инструкция if с оператором continue внутри используется позже, она никак и не повлияла на вывод значений. После обнуления счетчика, цикл завершается без ошибок, а значит срабатывает блок инструкций else, т.е. выводится еще один ноль.

12.12. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2 1 2 1,   б) 2 1 2 1 2 1,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
k = 1
while True:
    for n in range(2, 0, -1):
        print(n, end=' ')
    k += 1                        
    if k == 3: break 

Ответ. а) 2 1 2 1.

Счетчик основного цикла while стартует с одного. Внутри цикла сразу же начинает работать внутренний цикл for, который выводит на экран все значения n убывающей последовательности чисел от двух до нуля с шагом -1. А это всего два числа: два и один. Когда внутренний цикл завершается, счетчик основного цикла увеличивается на единицу. Далее проверяется условие равенства счетчика трем: по достижении этого значения внешний цикл завершает свою работу. А это значит, что внешний цикл повторяется всего два раза.

12.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2 1 2 1,   б) 2 1 2 1 2 1,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
k = 1
while True:
    for n in range(2, 0, -1):
        print(n, end=' ')
    if k == 3: break 
    k += 1 

Ответ. б) 2 1 2 1 2 1.

Различие с предыдущим тестов в том, что счетчик увеличивается после проверки условия на равенство его значения трем! Это и дает прирост количества итераций на единицу. Ответили неверно? Пройдитесь по итерациям еще раз.

Тесты на итерации и генераторы

Теоретический материал по итерациям и генераторам можно почитать в нашем учебнике здесь.

13.1. Какие из предложенных вариантов объектов относятся к итерируемым?

Варианты ответов: а) 'abc',   б) (25,),   в) 321,   г) {'a': 1}.   Показать решение.

Ответ. а) 'abc',  б) (25,),  г) {'a': 1}.

Строки хотя и относятся к неизменяемому типу данных, но дают доступ к своим символам. А вот пройтись по цифрам числа напрямую не получится.

13.2. С помощью какой функции можно преобразовать итерируемый объект в итератор?

Варианты ответов: а) iter,   б) next,   в) list,   г) никак.   Показать решение.

Ответ. а) iter.

Например, li_iter = iter([1, 2, 3]). Что касается встроенной функции next, то она используется для получения следующего элемента полученного итератора.

13.3. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) b,   б) cd,   в) True,   г) ошибка.   Показать решение.

Условие pythonCodes
li = ['ab', 'cd', 'ef']
li_iter = iter(li)
next(li_iter)
print(next(li_iter)) 

Ответ. б) cd.

Встроенная функция next используется для получения следующего элемента полученного итератора. Следовательно в ходе первого ее применения будет возвращен первый элемент итератора (на экран мы его не выводим), а в ходе второго вызова – второй элемент, который и будет выведен на экран функцией print.

13.4. Что произойдет, если попытаться получить элемент из итератора, который исчерпал все свои элементы?

Варианты ответов: а) будет возвращено None,   б) будет возвращен пустой кортеж,   в) будет брошено исключение StopIteration,   г) будет возвращено False.   Показать решение.

Ответ. в) будет брошено исключение StopIteration.

13.5. Какая из конструкций вернет готовый итератор?

Варианты ответов: а) {x for x in 'abc'},   б) (x for x in 'abc'),   в) [x for x in 'abc'],   г) {x: None for x in 'abc'}. Показать решение.

Ответ. б) (x for x in 'abc').

Остальные генераторы вернут множество, список и словарь, итераторы которых сперва придется получить при помощи функции iter.

13.6. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2,   б) 3,   в) 4,   г) ошибка.   Показать решение.

Условие pythonCodes
g_1 = (x for x in range(2, 5))
g_2 = [x+1 for x in range(2, 5)]

res = next(g_1) + next(g_2)
print(res) 

Ответ. г) ошибка.

К спискам не применима функция next! Сперва нужно получить итератор с помощью функции iter(g_2), а затем уже получать элемент и находить сумму.

13.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 4,   б) 3,   в) 2,   г) 1.   Показать решение.

Условие pythonCodes
def f_2(n):
    for i in range(1, n+1):
        yield i

gen = f_2(30)
res = next(gen) + next(gen) + next(f_2(30))
print(res)

Ответ. а) 4.

В первый раз next(gen) вернет один, затем два. next(f_2(30)) вернет один, т.к. каждый новый вызов функции f_2 создает новый объект итератора, а значит выдача элементов начинается заново.

Тесты по функциям

Теоретический материал по функциям можно почитать в нашем учебнике здесь.

14.1. Какая инструкция используется в Python для определения функций?

Варианты ответов: а) df,   б) def,   в) dfn,   г) define.   Показать решение.

Ответ. б) def.

Остальные имена в Пайтоне отсутствуют вообще.

14.2. Что возвращает функция, в которой отсутствует инструкция return?

Варианты ответов: а) объект функции,   б) None,   в) False,   г) ничего.   Показать решение.

Ответ. в) None.

Технически все равно будет возвращено None. Проверить легко, использовав, например, вызов пустой функции def func(): pass в инструкции print(func()).

14.3. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) True,   б) None,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
def my_func():
    print(True)
my_func

Ответ. в) ничего.

Ничего на экран выведено не будет, т.к. вызов функции осуществлен не был. Для этого нужно было к имени функции добавить скобки. А так в код программы было просто вписано имя, ссылающееся на объект ранее определенной функции, что вполне себе разрешено и ошибки не вызовет.

14.4. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1 2,   б) 2 1,   в) 1,   г) ошибка.   Показать решение.

Условие pythonCodes
def my_func_1(): print(1, end=' ')
my_func_2()

def my_func_2(): print(2, end=' ')
my_func_1()

Ответ. г) ошибка.

Не забываем, что функции можно вызывать только после их объявления. Если ход выполнения скрипта не дошел до места определения функции, будет брошено исключение. Это касается и объявлений функций внутри условных инструкций.

14.5. Какой из предлагаемых вариантов является допустимым способом передачи аргументов функции?

Варианты ответов: а) по порядку,   б) по ключевому слову,   в) по умолчанию,   г) все вышеуказанные.   Показать решение.

Ответ. г) все вышеуказанные.

Еще раз загляните в пункт нашего учебника «Аргументы функций».

14.6. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 17,   б) 16,   в) 15,   г) ошибка.   Показать решение.

Условие pythonCodes
def f_1(a, b): 
    return a + b

def f_2(a, b=3, c=4): 
    return a + b + c

res = f_1(1, 2) + f_2(5, 5)
print(res)

Ответ. а) 17.

Ошибки здесь не будет, т.к. во второй функции используются значения по умолчанию, которые можно не указывать. Поэтому функцией будет возвращен результат вычисления выражения 5 + 5 + 4.

14.7. Выберите верные варианты вызова функции, определяемой инструкцией def func(x, y, z): pass?

Варианты ответов: а) func(x, y=2, z=5),   б) func(x=8, y, z),   в) func(x=8, y=2, z),   г) func(x, y, z=5).   Показать решение.

Ответ. а) func(x, y=2, z=5),  г) func(x, y, z=5).

Здесь нужно помнить, что первыми должны передаваться позиционные аргументы и только потом именованные. Это условие было нарушено вариантами б) и в).

14.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 14,   б) 15,   в) 16,   г) ошибка.   Показать решение.

Условие pythonCodes
def f_1(a, b=2): 
    return a + b

def f_2(a, b, c=3): 
    return a + b + c

res = f_1(b=1, 2) + f_2(3, 4, c=5)
print(res)

Ответ. г) ошибка.

Опять же, первыми должны передаваться позиционные аргументы и только потом именованные. Правильно было бы написать f_1(2, b=1), f_1(b=1, a=2), f_1(a=2, b=1) или просто f_1(2, 1).

14.9. Какой из предложенных вариантов заголовка функции может использоваться для определения функции, принимающей переменное число аргументов?

Варианты ответов: а) def func_name(*args):,   б) def func_name(**kwargs):,   в) def func_name(*args, **kwargs):,   г) все вышеуказанные.   Показать решение.

Ответ. г) все вышеуказанные.

Первый вариант предполагает передачу произвольного числа позиционных аргументов (будут собраны в кортеж), второй – именованных (будут собраны в словарь), третий – и тех, и других.

14.10. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 6,   б) [1, 2, 3],   в) (1, 2, 3),   г) ошибка.   Показать решение.

Условие pythonCodes
def f_1(a, *b): 
    return a + b

print(f_1(1, 2, 3))

Ответ. г) ошибка.

Сама функция определена на первый взгляд верно. Однако передача ей даже двух аргументов при вызове будет возбуждать ошибку, т.к. операция сложения чисел с кортежами в Питоне не предусмотрена.

14.11. Выберите верные варианты вызова функции, определяемой инструкцией def func(x, *y, z): pass?

Варианты ответов: а) func(1, 2, 3),   б) func(1, 2, z=3),   в) func(1, z=3),   г) func(z=3, 1, 2).   Показать решение.

Ответ. б) func(1, 2, z=3),  в) func(1, z=3).

В первом варианте отсутствует передача обязательного именованного аргумента z, а в последнем именованный аргумент передается перед позиционными, что также запрещено.

14.12. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) (1,) {'x': 3, 'y': 4},   б) 1, 3, 4,   в) (1, 3, 4),   г) ошибка.   Показать решение.

Условие pythonCodes
def func(*a, **b): 
    print(a, b)

func(1, x=3, y=4)

Ответ. а) (1,) {'x': 3, 'y': 4}.

Определением функции подразумевается сбор всех позиционных аргументов в кортеж, а именованных в словарь.

14.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 10,   б) 20,   в) 30,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 10
def func():
    global x
    x = 20

func()
print(x)

Ответ. б) 20.

В теле функции интерпретатору сообщается о том, что необходимо использовать глобальную переменную (инструкция global x).

14.14. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 20,   б) 30,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
def func_1(): 
    x = 20
    def func_2():
        nonlocal x
        x = 30
    print(x)

func_1()

Ответ. а) 20.

Функция func_2 была определена, но не была вызвана.

14.15. Какой из предлагаемых операторов можно использовать для создания анонимной функции?

Варианты ответов: а) def,   б) lambda,   в) yield,   г) все вышеуказанные.   Показать решение.

Ответ. б) lambda.

Инструкция yield используется для создания функций-генераторов.

14.16. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 10,   б) 20,   в) 30,   г) ошибка.   Показать решение.

Условие pythonCodes
x = 10
def func_1(): 
    x = 20
    def func_2():
        global x
        x = 30
    func_2()

func_1()
print(x)

Ответ. в) 30.

Внутри функции func_1 использутеся локальная переменная x, а вот внутри вложенной функции func_2 – уже глобальная переменная. При этом функция func_2 не только определяется, но и вызывается при вызове родительской функции func_1, что и приводит к изменению значения глобальной переменной.

14.17. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 4,   б) 4.0,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
ld = lambda x, y=5: x/y if y != 0 else None
print(ld(20))

Ответ. б) 4.0.

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

14.18. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 9,   б) 6.0,   в) 9.0,   г) ошибка.   Показать решение.

Условие pythonCodes
ld = lambda x: if x>0: x**2
print(ld(3.0))

Ответ. г) ошибка.

Внутри тела анонимной функции инструкции запрещены.

14.19. Какие функции в Питоне называют рекурсивными?

Варианты ответов: а) функция, которая вызывает саму себя внутри своего тела,   б) функция, которая вызывает другую функцию внутри своего тела,   в) функция, которая одновременно не имеет параметров и возвращаемого значения,   г) рекурсивные функции в Пайтоне запрещены.   Показать решение.

Ответ. а) функция, которая вызывает саму себя внутри своего тела.

14.20. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 0,   б) 25,   в) 120,   г) ошибка.   Показать решение.

Условие pythonCodes
def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n*factorial(n - 1)

print(factorial(5)) 

Ответ. в) 120.

Если результат вызывает затруднения, еще раз внимательно почитайте пункт нашего учебника «Рекурсивные функции». После чего еще раз пройдитесь по всем этапам выполнения кода теста.

14.21. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3 + 5,   б) 35,   в) 3 + '''5''',   г) ошибка.   Показать решение.

Условие pythonCodes
def f(x):
    '''5'''        
    return x

res = f('3') + f.__doc__
print(res)

Ответ. б) 35.

При вызове функции ей была передана строка, которая затем была в ходе этого вызова возвращена и объединена со строкой документации.

Тесты по ООП

Теоретический материал по объектно-ориентированному программированию можно почитать в нашем учебнике здесь.

15.1. Что такое ООП?

Варианты ответов: а) операторно-ориентированное программирование,   б) основы объектного программирования,   в) оптимизационно-ориентированное программирование,   г) объектно-ориентированное программирование.   Показать решение.

Ответ. г) объектно-ориентированное программирование.

15.2. Как называется механизм ООП, который позволяет объединять данные и методы, работающие с этими данными, в единый объект, скрывая при этом детали реализации от пользователя?

Варианты ответов: а) полиморфизм,   б) инкапсуляция,   в) наследование,   г) композиция.   Показать решение.

Ответ. б) инкапсуляция.

15.3. Какое ключевое слово используется в Python для определения классов?

Варианты ответов: а) class,   б) cls,   в) object,   г) obj.   Показать решение.

Ответ. a) class.

15.4. Какой стиль именования классов рекомендуется в руководстве PEP 8 по оформлению кода на Python?

Варианты ответов: а) camelCase,   б) CapWords,   в) snake_case,   г) ALL_CAPS.   Показать решение.

Ответ. б) CapWords.

15.5. Какой оператор используется для доступа к атрибуту объекта или класса в Python?

Варианты ответов: а) ->,   б) ::,   в) .,   г) [].   Показать решение.

Ответ. в) ..

15.6. Укажите специальный метод, который используется для инициализации исходными данными вновь создаваемых экземпляров класса.

Варианты ответов: а) __construct__,   б) __new__,   в) __init__,   г) __start__.   Показать решение.

Ответ. в) __init__.

Данный метод называется конструктором класса.

15.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1,   б) 2,   в) 3,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test:
    def __init__(self, x=1):
        self.x = x

t_1 = Test()
t_2 = Test(2)
print(t_1.x + t_2.x)

Ответ. в) 3.

В конструкторе используется передача аргумента со значением по умолчанию. Поэтому t_1.x == 1, а t_2.x == 2.

15.8. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 25,   б) 30,   в) 55,   г) ошибка.   Показать решение.

Условие pythonCodes
class Person:
    def set_age(self, age):
        self.age = age

ivan = Person(25)
ivan.set_age(30)
print(ivan.age)

Ответ. г) ошибка.

В данном случае мы не определяли собственный конструктор класса, который принимал бы начальное значение возраста. Поэтому будет выведена ошибка «Person() takes no arguments», уведомляющая нас о том, что передача аргументов конструктором не предусмотрена.

15.9. Перечислите допустимые способы изменения значения атрибута объекта в Python.

Варианты ответов: а) obj.attr = value,   б) setattr(obj, attr_name, value),   в) obj.setattr(attr_name, value),   г) все вышеперечисленные.   Показать решение.

Ответ. а) obj.attr = value,  б) setattr(obj, attr_name, value).

Для изменения значения атрибута необходимо просто присвоить ему новое значение или использовать встроенную функцию setattr(obj, attr_name, value), передав ей объект, строку с именем атрибута и само значение.

15.10. Укажите допустимые способы удаления атрибута объекта в Python.

Варианты ответов: а) del obj.attr,   б) obj.del(attr_name),   в) obj.delattr(attr_name),   г) delattr(obj, attr_name).   Показать решение.

Ответ. а) del obj.attr,  г) delattr(obj, attr_name).

Для удаления атрибутов можно использовать оператор del или встроенную функцию delattr(obj, attr_name), в которой вторым аргументом нужно передать строку с именем удаляемого атрибута.

15.11. Какой атрибут используется для получения словаря, содержащего атрибуты объекта или класса?

Варианты ответов: а) __attrs_,   б) __items__,   в) __dict__,   г) __vars__.   Показать решение.

Ответ. в) __dict__.

Получить доступ или посмотреть текущий набор атрибутов класса или экземпляра можно при помощи словаря атрибутов object.__dict__. При этом важно помнить, что словарь динамически изменяется в процессе изменения как количества доступных атрибутов, так и их значений.

15.12. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) {'name': 'ivan', 'age': 25},   б) {'age': 25},   в) {'name': 'ivan'},   г) ошибка.   Показать решение.

Условие pythonCodes
class Person:
    def set_age(self, age):
        self.age = age

ivan = Person()
setattr(ivan, 'name', 'ivan')    
ivan.set_age(25)

print(ivan.__dict__)    
del ivan.age

Ответ. а) {'name': 'ivan', 'age': 25}.

На экран будет выведен словарь атрибутов объекта, имеющихся у него на момент обращения к словарю. Но атрибут age удаляется лишь в следующей инструкции.

15.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1 + 1,   б) 2,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test:
	x = 1

t = Test()
print(Test.x + t.x)

Ответ. б) 2.

Не забываем, что атрибут данных класса доступен как из любого экземпляра класса, так и напрямую из объекта самого класса.

15.14. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2,   б) 4,   в) 6,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test:
	x = 1
	def __init__(self, x):
		self.x = x

t = Test(3)
print(Test.x + t.x)

Ответ. б) 4.

Атрибут данных класса Test.x остался прежним, т.к. в конструкторе он переопределяется только для каждого конкретного вновь создаваемого экземпляра класса. Поэтому t.x == 3, а Test.x == 1.

15.15. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2,   б) 3,   в) 4,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test:
    x = 1

t = Test()
t.x = 2   
del t.x
print(Test.x + t.x)

Ответ. а) 2.

Даже после удаления атрибута x в экземпляре t при повторной попытке обращения к нему через t.x интерпретатор не выдал ошибку, а сперва попытался отыскать одноименный атрибут в самом классе Test, вернув, как следствие, значение общедоступного атрибута Test.x.

15.16. Какой декоратор используется для определения метода класса и позволяет работать с атрибутами класса, а не с атрибутами объекта?

Варианты ответов: а) @staticmethod,   б) @classmethod,   в) @property,   г) @operator.   Показать решение.

Ответ. б) @classmethod.

Для объявления метода класса нужно записать декоратор @classmethod на отдельной строке, предшествующей строке с определением целевого метода.

15.17. Перечислите верные варианты вызова метода класса в Пайтоне.

Варианты ответов: а) obj.method(cls),   б) Class.method(cls),   в) obj.method(),   г) Class.method().   Показать решение.

Ответ. в) obj.method(),  г) Class.method().

Следует помнить, что методы класса призваны обрабатывать данные самого класса, являющиеся общими сразу для всех экземпляров этого класса. Кроме того, если первый аргумент методов экземпляра при определении принято обозначать через self и его нужно передавать явным образом при вызове через класс, то для первого аргумента методов класса принято использовать имя cls, не указывая его явным образом как при вызове из экземпляров, так и вызове через сам класс.

15.18. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 0,   б) 1,   в) 2,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    @classmethod
    def m_1(cls): 
        return (1 if 1>0 else 0)          

obj = Test()        
print(obj.m_1() + Test.m_1())

Ответ. в) 2.

Методы класса в общем случае доступны для вызова как через объект самого класса, так и через любой из его экземпляров.

15.19. Перечислите верные варианты вызова статического метода в Python.

Варианты ответов: а) obj.method(),   б) Class.method(),   в) Class.method(obj),   г) method().   Показать решение.

Ответ. а) obj.method(),  б) Class.method().

Методы, которые были объявлены статическими, в общем случае доступны для вызова как через объект самого класса, так и через любой из его экземпляров.

15.20. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 1,   б) 2,   в) 3,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    def m_1(): 
      return (1 if 1>0 else 0)          
    
    @staticmethod
    def m_2(): 
        return (2 if 2>0 else 0)                   

obj = Test()        
print(obj.m_1() + Test.m_2())

Ответ. г) ошибка.

Методы, просто объявленные внутри пространства имен класса, доступны посредством объекта класса, но недоступны для вызовов из экземпляров класса. Для этого нужно использовать декоратор @staticmethod.

15.21. Как в Питоне принято обозначать атрибуты класса, предназначенные для внутреннего (служебного) использования?

Варианты ответов: а) _,   б) __,   в) @,   г) никак.   Показать решение.

Ответ. а) _.

Атрибуты, предназначенные для внутреннего использования, принято начинать с одного символа подчеркивания (например, _var).

15.22. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 5,   б) False,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    def __init__(self, x): 
        self._x = x         

obj = Test(5)        
print(obj._x)

Ответ. а) 5.

Атрибут, начинающийся с одного символа нижнего подчеркивания, остается доступен вне класса. Просто встретив такой атрибут, другой программист будет иметь в виду, что он не предназначен для публичного использования и в дальнейшем может быть даже удален без предварительного уведомления. В тоже время никто не запрещает изменять такой атрибут на свой страх и риск, надеясь, что это не повлияет на работоспособность класса.

15.23. Как в Питоне принято обозначать приватные атрибуты класса?

Варианты ответов: а) _,   б) __,   в) @,   г) никак.   Показать решение.

Ответ. б) __.

Атрибут, начинающийся с двух символов нижнего подчеркивания, останется доступен внутри класса, но станет недоступен по такому имени за его пределами, т.к. вне класса имена атрибутов, начинающихся с двух символов подчеркивания, автоматически преобразуются интерпретатором из формата __attr_name в формат _Class__attr_name.

15.24. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 5,   б) False,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    def __init__(self, x): 
        self.__x = x         

obj = Test(5)        
print(obj.__x)

Ответ. г) ошибка.

Опять же, атрибут, начинающийся с двух символов нижнего подчеркивания, останется доступен внутри класса, но станет недоступен по такому имени за его пределами, т.к. вне класса имена атрибутов, начинающихся с двух символов подчеркивания, автоматически преобразуются интерпретатором из формата __attr_name в формат _Class__attr_name.

15.25. Какая из встроенных функций предназначена для создания управляемых атрибутов класса?

Варианты ответов: а) staticmethod,   б) classmethod,   в) property,   г) setattr.   Показать решение.

Ответ. в) property.

Результатом вызова встроенной функции property(fget=None, fset=None, fdel=None, doc=None) является объект свойства, присваиваемый имени атрибута, которым требуется управлять, находящийся в области видимости класса, внутри которого она вызывалась, и наследующийся всеми экземплярами этого класса.

15.26. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3,   б) 4,   в) 5,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    @property
    def attr_x(self):
        return self.__x
    
    @attr_x.setter
    def attr_x(self, x):
        self.__x = 3
    
obj = Test()        
obj.attr_x = 4
obj.attr_x += 1
print(obj.attr_x)

Ответ. а) 3.

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

15.27. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 7,   б) Атрибут удален!,   в) ничего,   г) ошибка.   Показать решение.

Условие pythonCodes
class Test: 
    @property
    def attr_x(self):
        return self.__x
    
    @attr_x.setter
    def attr_x(self, x):
        self.__x = x        
    
    @attr_x.deleter
    def del_attr_x(self):
        del self.__x
        print('Атрибут удален!')

obj = Test()        
obj.attr_x = 7
del obj.attr_x

Ответ. г) ошибка.

Не забываем, что при использовании декораторов все методы должны иметь одно и то же имя, иначе интерпретатор возбудит исключение. В нашем случае мы получим ошибку удаления управляемого атрибута «property 'attr_x' of 'Test' object has no deleter».

15.28. Укажите верные варианты вызова метода method суперкласса A из его дочернего подкласса B.

Варианты ответов: а) super().method(),   б) super(B, self).method(),   в) super(A, self).method(),   г) super(B, method).   Показать решение.

Ответ. а) super().method(),  б) super(B, self).method().

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

15.29. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3,   б) 4,   в) 5,   г) ошибка.   Показать решение.

Условие pythonCodes
class A: 
    def m_s(self):
        return 1

class B: 
    def m_s(self):
        return 2        

class C(B, A): 
    def m_sub(self):
        return 3                      

obj = C()
print(obj.m_s() + obj.m_sub())

Ответ. в) 5.

Если подкласс наследует сразу несколько суперклассов с одинаковыми именами атрибутов, то им будет унаследовано значение атрибута того суперкласса, который перечисляется в заголовке инструкции class первым.

15.30. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 2,   б) 3,   в) 4,   г) ошибка.   Показать решение.

Условие pythonCodes
class A: 
    def set_1(self): 
        self.__x = 1
        return self.__x

class B: 
    def set_2(self): 
        self.__x = 2
        return self.__x

class C(A, B): pass 

obj = C()
print(obj.set_1() + obj.set_2())

Ответ. б) 3.

Благодаря наличию приставки из двух символов подчеркивания атрибуты остались доступны по короткому имени внутри классов, но стали недоступны извне, поскольку имена этих атрибутов были дополнены интерпретатором именами их классов до _A__x и _B__x.

15.31. Имена магических методов в Питоне выделяются следующим образом:

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

Ответ. г) начинаются и заканчиваются двумя символами подчеркивания.

15.32. Разрешается ли наследование магических методов, а также их переопределение в подклассах?

Варианты ответов: а) не разрешается,   б) разрешается,   в) разрешается только наследование,   г) разрешается только переопределение.   Показать решение.

Ответ. б) разрешается.

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

15.33. Какой магический метод отвечает за операцию сложения?

Варианты ответов: а) __sum__,   б) __concat__,   в) __add__,   г) __plus__.   Показать решение.

Ответ. в) __add__.

Еще раз взгляните на наиболее часто используемые магические методы: __add__ (сложение), __sub__ (вычитание), __mul__ (умножение), __truediv__ (деление), __mod__ (остаток от деления), __pow__ (возведение в степень), __and__ (логическое И), __or__ (логическое ИЛИ), __getattr__ (обращение к атрибуту), __setattr__ (присваивание атрибуту), __delattr__ (удаление атрибута), __getitem__ (доступ к элементу по индексу, извлечение среза, итерации), __setitem__ (присваивание элементу по индексу или срезу), __delitem__ (удаление среза или элемента по индексу), __len__ (длина), __bool__ (проверка логического значения), __lt__ (меньше), __gt__ (больше), __le__ (меньше или равно), __ge__ (больше или равно), __eq__ (равно), __ne__ (не равно), __iter__ (получение итератора), __iadd__ (комбинированный оператор сложения), __next__ (получение следующего элемента итератора), __contains__ (оператор проверки на вхождение in), __new__ (создание объекта), __init__ (конструктор), __del__ (деструктор), __call__ (вызов функции) и др.

15.34. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3,   б) 4,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
class N: 
    def __init__(self, n):           
        self._n = n        
    
    def __mul__(self, x):            
        return self._n + x

print(N(1)*3)

Ответ. б) 4.

Поскольку магический метод __mul__ был переопределен, операция умножения экземпляра класса N на число стала возвращать сумму значений, а не их произведение. Вне контекста тестов делать так конечно же не следует.

15.35. Какой базовый класс модуля abc стандартной библиотеки может быть использован для создания абстрактных классов в Python?

Варианты ответов: а) abc,   б) __abc__,   в) Abc,   г) ABC.   Показать решение.

Ответ. г) ABC.

Не забываем, что для использования класса его нужно сперва из модуля импортировать, например, инструкцией from abc import ABC, abstractmethod.

15.36. Укажите верный декоратор модуля abc стандартной библиотеки, который может быть использован для создания абстрактных методов?

Варианты ответов: а) @abstractmethod,   б) @abstract_method,   в) @abstract,   г) @ABSTRACT.   Показать решение.

Ответ. а) @abstractmethod.

Не забываем, что для использования декоратора его нужно сперва из модуля импортировать, например, инструкцией from abc import ABC, abstractmethod.

15.37. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) Питоша,   б) False,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
from abc import ABC, abstractmethod

class Test(ABC): 
    @abstractmethod
    def set_name(self, name):            
        self.name = name

obj = Test()
obj.set_name('Питоша')
print(obj.name)

Ответ. г) ошибка.

Абстрактный класс не может использоваться для создания экземпляров. Для этого он должен быть сперва унаследован, а все его абстрактные методы реализованы.

15.38. Какой магический метод используется для определения деструктора?

Варианты ответов: а) __del__,   б) __delete__,   в) __destroy__,   г) __remove__.   Показать решение.

Ответ. а) __del__.

Тесты на импорт, модули и пакеты

Теоретический материал по импортированию, модулям и пакетам можно почитать в нашем учебнике здесь.

16.1. Какое ключевое слово используется для импорта модуля в Python?

Варианты ответов: а) import,   б) include,   в) load,   г) require.   Показать решение.

Ответ. а) import.

16.2. Как импортировать модуль module под другим именем (псевдонимом) name?

Варианты ответов: а) import module with name,   б) import module as name,   в) import module by name,   г) никак.   Показать решение.

Ответ. б) import module as name.

16.3. Как импортировать из модуля module лишь одно конкретное имя (атрибут) name?

Варианты ответов: а) name import from module,   б) import name from module,   в) from module import name,   г) никак.   Показать решение.

Ответ. в) from module import name.

16.4. Как импортировать из модуля module сразу все имена (атрибуты)?

Варианты ответов: а) import all from module,   б) from module import all,   в) from module import *,   г) никак.   Показать решение.

Ответ. в) from module import *.

Важно помнить, что использовать инструкцию from module import * в локальной области видимости функций запрещается.

16.5. Что содержится в переменной sys.path?

Варианты ответов: а) кортеж строк с путями поиска модулей,   б) список строк с путями поиска модулей,   в) строка с путем к интерпретатору,   г) строка с путем к текущему модулю.   Показать решение.

Ответ. б) список строк с путями поиска модулей.

Данный список включает:

  • домашний каталог программы, который в поиске участвует всегда, автоматически добавляясь в начало списка (если код запускается в интерактивном сеансе, в начало списка добавляется пустая строка);
  • содержимое переменной окружения PYTHONPATH, если она задана;
  • каталог стандартной библиотеки, который также всегда участвует в поиске;
  • список каталогов, настроенных во время установки Python;
  • содержимое любых файлов с расширением *.pht, если они используются.

16.6. Что представляют собой строки в файле *.pth?

Варианты ответов: а) абсолютные или относительные пути к каталогам и файлам,   б) имена модулей или пакетов,   в) инструкции импорта модулей или пакетов,   г) комментарии с именами модулей или пакетов.   Показать решение.

Ответ. а) абсолютные или относительные пути к каталогам и файлам.

Если необходимость в импортировании модуля за пределами домашней папки и вне прописанных путей поиска все-таки возникает, разрешается использовать обычный текстовый файл с расширением *.pth, в котором нужно прописать добавляемые каталоги по одному в каждой строке, а сам файл поместить либо в каталог установки Python, либо в подкаталог site-packages стандартной библиотеки. В результате все перечисленные в файле и при этом существующие каталоги будут добавлены в путь поиска модулей в порядке очередности, что можно будет увидеть в списке переменной sys.path: в первом случае каталоги будут добавлены после каталога установки Python, но перед подкаталогом site-packages стандартной библиотеки, а во втором – после подкаталога site-packages.

16.7. Как в Пайтон создать пакет модулей?

Варианты ответов: а) создать папку с любым именем и поместить в неё файлы модулей,   б) создать папку с файлом __package__.py и поместить в неё файлы модулей,   в) создать папку с файлом __main__.py и поместить в неё файлы модулей,   г) создать папку с файлом __init__.py и поместить в неё файлы модулей.   Показать решение.

Ответ. г) создать папку с файлом __init__.py и поместить в неё файлы модулей.

Пакет (от англ. package) – это отдельный каталог в Python, в котором содержатся модули и другие пакеты, а также обязательный файл __init.py__, отвечающий за инициализацию пакета.

16.8. С помощью какой инструкции можно импортировать модуль module из пакета package?

Варианты ответов: а) import package.module,   б) import package/module,   в) from package import module,   г) все вышеперечисленные варианты.   Показать решение.

Ответ. а) import package.module,   в) from package import module.

16.9. Укажите верный вариант импортирования относительно пакета модуля foo, находящегося в том же пакете spam, что и текущий модуль?

Варианты ответов: а) import foo,   б) import .foo,   в) from . import foo,   г) from ..spam import foo.   Показать решение.

Ответ. в) from . import foo.

В случае импортирования подпакетов и модулей внутри пакетов для инструкции from <path> import <name> имеется возможность использовать относительный путь вместо абсолютного. В этом случае для указания текущего пакета, в котором находится модуль осуществляющий операцию импорта, используется одна ведущая точка, а для указания подпакета, расположенного на один уровень вверх, используются две ведущие точки. Соответственно, три ведущие точки означают подпакет на два уровня выше и т.д. Главное, чтобы все каталоги являлись подпакетами, т.е. находились внутри корневой папки всего пакета, и содержали файл инициализации __init.py__.

16.10. Пусть в некотором пакете расположены подпакеты spam и spam_2. Укажите верный вариант импортирования относительно пакета модуля foo, находящегося в каталоге spam, если текущий модуль расположен в каталоге spam_2.

Варианты ответов: а) from . import foo,   б) from .. import foo,   в) from .spam import foo,   г) from ..spam import foo.   Показать решение.

Ответ. г) from ..spam import foo.

16.11. Как предотвратить импортирование некоторых имен из модуля module инструкцией from module import *?

Варианты ответов: а) начинать имена переменных, запрещенных к импорту инструкцией from module import *, символом нижнего подчеркивания,  б) указать имена, разрешенные к импорту инструкцией from module import *, в списке __all__ на верхнем уровне модуля,   в)  указать имена, разрешенные к импорту инструкцией from module import *, в списке __all__ на верхнем уровне файла инициализации __init__.py пакета,  г) запрет на импорт имен данной инструкцией в Пайтоне не предусмотрен.   Показать решение.

Ответ. а) начинать имена переменных, запрещенных к импорту инструкцией from module import *, символом нижнего подчеркивания,  б) указать имена, разрешенные к импорту инструкцией from module import *, в списке __all__ на верхнем уровне модуля.

16.12. Укажите верные варианты перезагрузки ранее импортированного модуля module.

Варианты ответов: а) импортировать и вызвать функцию reload(module),   б) использовать метод module.reload(),   в) повторно использовать инструкцию import module,   г) перезагрузка модулей в Питоне запрещена.   Показать решение.

Ответ. а) импортировать и вызвать функцию reload(module).

Функция reload находится в модуле importlib стандартной библиотеки и может быть из него импортирована, например, инструкцией from importlib import reload.

16.13. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) 3.141592653589793,   б) 3,14,   в) None,   г) ошибка.   Показать решение.

Условие pythonCodes
from importlib import import_module
m = import_module(math)
print(round(m.pi, 2))

Ответ. г) ошибка.

Функция import_module(name, package=None) принимает путь к файлу импортируемого модуля в виде строки, в то время как в коде указан просто идентификатор!

16.14. Какой атрибут хранит путь к файлу текущего модуля?

Варианты ответов: а) __name__,   б) ____,   в) __path__,   г) __file__.   Показать решение.

Ответ. г) __file__.

Тесты на обработку исключений

Теоретический материал по обработке исключений можно почитать в нашем учебнике здесь.

17.1. Какая составная инструкция используется в Python для обработки исключений?

Варианты ответов: а) if/elif/else,   б) try/except/else/finally,   в) for/in,   г) with/as.   Показать решение.

Ответ. б) try/except/else/finally.

17.2. В каком случае выполняется код блока else составной инструкции try/except/else/finally?

Варианты ответов: а) при отсутствии исключений в блоке try,   б) при отсутствии блоков except,   в) после выполнения инструкций одного из блоков except,   г) всегда.   Показать решение.

Ответ. а) при отсутствии исключений в блоке try.

Необязательный блок else выполняется только в случае отсутствия исключений в блоке try.

17.3. В каком случае выполняется код блока finally составной инструкции try/except/else/finally?

Варианты ответов: а) при отсутствии исключений в блоке try,   б) при возникновении исключений в блоке try,   в) при отсутствии блока else,   г) всегда.   Показать решение.

Ответ. г) всегда.

Блок finally выполняется в любом случае, независимо от того, было ли исключение или нет, и был ли блок else или нет. Это полезно для завершения каких-то действий, которые нужно сделать в конце, например, закрыть файл или освободить ресурсы.

17.4. Перечислите верные форматы использования инструкции try.

Варианты ответов: а) try/except,   б) try/else,   в) try/finally,   г) try/else/finally.   Показать решение.

Ответ. а) try/except,  в) try/finally.

Блок else может использоваться только при наличии хотя бы одного блока except, следовательно варианты try/else и try/else/finally недопустимы.

17.5. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) Все Ок?,   б) Да, все ОК!,   в) Нет, все плохо!,   г) ничего.   Показать решение.

Условие pythonCodes
try:
    printt('Все Ок?')    
except Exception as err:
    print('Нет, все плохо!')
else:
    print('Да, все ОК!')
finally:
    pass

Ответ. в) Нет, все плохо!.

Интерпретатор перехватит исключение NameError, поэтому сработает блок except. Блок finally срабатывает всегда, но в нем была использована лишь инструкция pass.

17.6. Имеется ли в Питоне возможность вызывать исключения принудительно?

Варианты ответов: а) использовать инструкцию assert,   б) использовать инструкцию raise,   в) использовать инструкцию try,   г) такая возможность отсутствует.   Показать решение.

Ответ. б) использовать инструкцию raise.

Для явного возбуждения исключений в Python предназначена инструкция raise, которой необходимо через пробел передавать имя класса или экземпляра возбуждаемого исключения. Данная инструкция может использоваться для явного возбуждения не только встроенных исключений, но и созданных пользователем. Пользовательские исключения представляют собой самые обычные классы, наследуемые от классов встроенных исключений, чаще всего от класса Exception.

17.7. Что будет выведено на экран в результате выполнения кода условия?

Варианты ответов: а) Деление на ноль!,   б) 5,   в) 5.0,   г) ничего.   Показать решение.

Условие pythonCodes
try:
    res = 10/2
    raise ZeroDivisionError
except Exception as err:
    print('Деление на ноль!')
else:
    print(res)

Ответ. а) Деление на ноль!.

Интерпретатор перехватит принудительно возбужденное исключение ZeroDivisionError, поэтому сработает блок except, а не блок else.