игра брюс 2048
Главная / Программирование / Язык программирования 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)

 (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)

 (2) 10 

 (3) 13 

 (4) 23 


Номер 4
Сколько списков занимающих много памяти задействовано в следующей программе:
for i in itertools.izip(xrange(10**6), xrange(10**6)): 
  pass

Ответ:

 (1)

 (2)

 (3)

 (4)


Номер 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)

 (2)

 (3)


Номер 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) ошибок нет 




Главная / Программирование / Язык программирования Python / Тест 3