Главная / Программирование /
Язык программирования Python / Тест 3
Язык программирования Python - тест 3
Упражнение 1:
Номер 1
Какие из перечисленных языков программирования поддерживают функциональное программирование?
Ответ:
 (1) LISP 
 (2) OCAML 
 (3) Pascal 
 (4) Visual Basic 
Номер 2
Какие признаки являются характерными для функциональных языков?
Ответ:
 (1) возможность определения функции пользователем 
 (2) построение программы как композиции функций 
 (3) применение операторов 
 (4) возможность строить функции над функциями 
Номер 3
Как определить функцию в Python?
Ответ:
 (1) с помощью оператора def
 
 (2) с помощью оператора import
 
 (3) заданием списка строк исходного кода 
 (4) с помощью lambda-выражения 
Номер 4
Что из перечисленного правильно характеризует отличия функций в математике от функций в языках программирования?
Ответ:
 (1) в математике функции имеют строго оговоренные множества определения, в программировании это невозможно 
 (2) в математике функции не имеют побочных эффектов 
 (3) в программировании функции всегда имеют побочные эффекты 
 (4) числовые функции языка программирования — часто лишь приближение математической функции 
Номер 5
Что из нижеперечисленного естественно для реализации в функциональном стиле?
Ответ:
 (1) рекурсия 
 (2) итераторы 
 (3) циклы 
Упражнение 2:
Номер 1
Какая встроенная функция Python лучше всего подходит для цепочечных вычислений (в частности, вычислений значения многочлена по схеме Горнера)?
Ответ:
 (1) map()
 
 (2) reduce()
 
 (3) filter()
 
 (4) chain()
 
Номер 2
Какие операторы и функции Python 2.4 подходят для поэлементной обработки элементов последовательности?
Ответ:
 (1) функция map()
 
 (2) списковое включение [x for x in s]
 
 (3) функция apply()
 
 (4) функция iter()
 
Номер 3
Какие функции Python 2.4 позволяют организовать обработку сразу двух и более последовательностей?
Ответ:
 (1) функция zip()
 
 (2) функция filter()
 
 (3) функция map()
 
 (4) функция itertools.repeat()
 
Номер 5
Карринг — это...
Ответ:
 (1) передача функции в другую функцию 
 (2) получение новой функции на основе заданной функции, при котором часть аргументов получает значение 
 (3) перенос параметров функции в ее результат 
 (4) возврат объекта-функции из другой функции 
Упражнение 3:
Номер 1
Начало определения функции f
выглядит так:
def f(a, b, c=None, d="0"):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
Ответ:
 (1) f()
 
 (2) f(1, 2)
 
 (3) f(1, 2, 3, 4)
 
 (4) f(1, 2, d=3, c=4)
 
 (5) f(1, 2, d=3)
 
 (6) f(1, d=3)
 
Номер 2
Начало определения функции f
выглядит так:
def f(a, b, **k):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
Ответ:
 (1) f()
 
 (2) f(1, 2)
 
 (3) f(1, 2, 3, 4)
 
 (4) f(1, 2, d=3, c=4)
 
 (5) f(1, 2, d=3)
 
 (6) f(1, d=3)
 
Номер 3
Начало определения функции f
выглядит так:
def f(a, b, *p):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
Ответ:
 (1) f()
 
 (2) f(1, 2)
 
 (3) f(1, 2, 3, 4)
 
 (4) f(1, 2, d=3, c=4)
 
 (5) f(1, 2, d=3)
 
 (6) f(1, d=3)
 
Номер 4
Начало определения функции f
выглядит так:
def f(*p, **k):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
Ответ:
 (1) f(1, d=2, 3)
 
 (2) f(1, 2)
 
 (3) f(1, 2, 3, 4)
 
 (4) f(1, 2, d=3, c=4)
 
 (5) f(1, 2, d=3)
 
Номер 5
Начало определения функции f
выглядит так:
def f(a, b, c=1, *p, **k):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
Ответ:
 (1) f()
 
 (2) f(1, 2)
 
 (3) f(1, 2, 3, 4)
 
 (4) f(1, 2, d=3, c=4)
 
 (5) f(1, 2, d=3)
 
 (6) f(1, d=2, 3)
 
Упражнение 4:
Номер 1
К каким из приведенных ниже выражений можно применить функцию iter()
для получения итератора?
Ответ:
 (1) 1 
 (2) "1" 
 (3) xrange(10)
 
Номер 2
Какие из получаемых в следующем фрагменте кода объектов являются итераторами?
def gen(N):
for i in xrange(N):
yield i
lst = [1, 2, 3, 4]
xr = xrange(12)
g = gen(10)
en = enumerate(lst)
Ответ:
 (1) gen
 
 (2) lst
 
 (3) xr
 
 (4) g
 
 (5) en
 
Номер 3
Сколько элементов будет содержать список, полученный в следующем списковом включении:
[x for x in itertools.takewhile(lambda x: x < 23, itertools.count(10))]
Ответ:
 (1) 0 
 (2) 10 
 (3) 13 
 (4) 23 
Номер 4
Сколько списков занимающих много памяти задействовано в следующей программе:
for i in itertools.izip(xrange(10**6), xrange(10**6)):
pass
Ответ:
 (1) 0 
 (2) 1 
 (3) 2 
 (4) 3 
Номер 5
Аналогом какой функции является функция x
?
def x(a, b):
for c in b:
yield a(*c)
Ответ:
 (1) itertools.izip()
 
 (2) itertools.imap()
 
 (3) itertools.starmap()
 
 (4) map(None, ...)
 
Упражнение 5:
Номер 1
Какие из перечисленных функций имеют побочные эффекты:
import os
global v
v = 0
def A(x, y):
return abs(x + y)
B = lambda k, v: os.environ.setdefault(k, v)
def C(x):
global v
v = v + 1
return v + x
Ответ:
 (1) A, B, C 
 (2) только B и C 
 (3) только A и C 
 (4) только C 
 (5) никакие 
Номер 2
Какие из перечисленных функций имеют побочные эффекты:
lst = []
def A(l, x):
return lst + [x]
def B(l, x):
lst.append(x)
return lst
def C(l, x):
return lst.count(x)
Ответ:
 (1) A, B, C 
 (2) только A и B 
 (3) только B и C 
 (4) только B 
 (5) никакие 
Номер 3
Какая из перечисленных функций имеет побочные эффекты:
lst = []
def A(lst, x):
return lst + [x]
def B(x):
lst.append(x)
return lst
def C(lst, x):
return lst.count(x)
Ответ:
 (1) A 
 (2) B 
 (3) C 
Номер 4
Какие из перечисленных функций имеют побочные эффекты:
def A(lst):
def AA(x):
return lst + [x]
return AA
def B(x):
def BB(lst):
return lst + [x]
return BB
def C(x, cache={}):
if cache.has_key(x):
return cache[x]
def CC(lst):
return lst + [x]
cache[x] = CC
return CC
Ответ:
 (1) A, B, C 
 (2) только B и C 
 (3) только C 
 (4) никакие 
Номер 5
Какие из перечисленных функций имеют побочные эффекты:
def A(lst):
return lambda x: lst + [x]
def B(x):
return lambda lst: lst + [x]
def C(x, cache={}):
return cache.setdefault(x, lambda lst: lst + [x])
Ответ:
 (1) A, B, C 
 (2) только B и C 
 (3) только C 
 (4) никакие 
Упражнение 6:
Номер 1
Дана функция-генератор:
def ggg(s):
for i in range(0, len(s)-1, 2):
yield s[i], s[i+1]
Какие из перечисленных ниже способов ее использования для вывода значений правильные (в Python 2.4)?
Ответ:
 (1) for k in ggg([1, 2, 3, 4]): print k
 
 (2) print list(ggg("asdf"))
 
 (3) print iter(ggg("asdf"))
 
 (4) print ggg("asdf")
 
Номер 2
Какие варианты использования значений генераторного выражения gg
имеют смысл?
gg = ((s[i], s[i+1]) for i in range(0, len(s)-1, 2))
Ответ:
 (1) print gg
 
 (2) print list(gg)
 
 (3) d = dict(gg)
 
 (4) print len(gg)
 
Номер 3
Имеется следующий генератор для слияния двух отсортированных последовательностей:
def merge(a1, a2):
a1 = list(a1)
a2 = list(a2)
while a1 or a2:
if a1 and (not a2 or a1[0] < a2[0]):
r = a1
else:
r = a2
yield r[0]
del r[0]
Какие ошибки или особенности имеет эта программа?
Ответ:
 (1) в последней строке каждый раз удаляется элемент из временного списка, а не из a1
или a2
: генератор зациклится 
 (2) генератор оставит за собой временный список, так как del
происходит после yield
 
 (3) генератор будет портить переданные ему списки 
 (4) ошибок нет 
Номер 4
Имеется следующий генератор для слияния двух отсортированных последовательностей:
def merge(a1, a2):
i1 = iter(a1)
i2 = iter(a2)
while i1 or i2:
if i1 and (not i2 or i1[0] < i2[0]):
r = i1
else:
r = i2
yield r.next()
Какие ошибки или особенности имеет эта программа?
Ответ:
 (1) индексирование (i1[0], i2[0])
неприменимо к итераторам 
 (2) длина итератора в общем случае неизвестна: ошибка в строке с условием цикла 
 (3) генератор будет портить переданные ему списки 
 (4) ошибок нет 
Номер 5
В каких местах допущены ошибки в генераторном выражении, выдающем список координат полей шахматной доски?
(j+str(i) for i in xrange(1, 9) for j in "abcdefgh")
Ответ:
 (1) ошибка в j+str(i)
 
 (2) ошибка в for i in xrange(1, 9)
 
 (3) ошибка в for j in "abcdefgh"
 
 (4) ошибок нет