Простой тест на знание Python — вопросы

Материал из DISCOPAL
Перейти к: навигация, поиск
12345678910
Простой тест на знание Python

Вариант 4278918532.


Ваше имя*:


Вопрос 1

Чему будет равно значение следующего выражения:

import numpy as np
print(np.shape(np.array([[1, 2], [3, 4], [5, 6]])))
  1.  (6,)
  2.  (3, 2)
  3.  (2, 3)
  4.  (3,)

Вопрос 2

Какие встроенные функции служат для создания объектов определенного типа (конструкторы классов/функции-фабрики…)?

  1.  isinstance()
  2.  dict()
  3.  chr()

Вопрос 3

Сколько элементов будет содержать список L после выполнения следующего кода:

L = []
L.append([1,2,3])
L.insert(1, "abc")
del L[0][0]
  1.  2
  2.  1
  3.  сообщение об ошибке
  4.  3
  5.  4

Вопрос 4

Что делает следующая программа?

 
import threading
ready = threading.Event()
 
def proc():
  ready.wait()
  print("Done!")
 
for i in range(5):
  p = threading.Thread(target=proc)
  p.start()
 
print("Prepare!")
ready.set()
 
  1.  программа запускает пять дополнительных потоков, один из которых печатает "Done!" после выполнения ready.set(), а остальные ждут следующего ready.set()
  2.  программа запускает пять дополнительных потоков, печатающих "Done!" одновременно
  3.  программа запускает пять дополнительных потоков, печатающих "Done!" после выполнения ready.set(), то есть, после печати "Prepare!"
  4.  программа создает пять дополнительных потоков, которые запускаются после выполнения ready.set() в главном потоке

Вопрос 5

Класс имеет методы «__iter__()» и «next()».

О чем это говорит и как пользоваться этим методом?

 
class A:
  #...
  def __iter__(self): 
    #...
  def next(self):
    #...
a = A(1, 2, 3)
 
  1.  нет особого названия. Пользоваться можно так: print a.next()
  2.  итератор. Пользоваться можно так: for i in a: print i
  3.  генератор. Пользоваться можно так: for i in a(): print i
  4.  последовательность. Пользоваться можно так: print a[2]

Вопрос 6

Что делает следующая программа?

import threading
l = threading.Lock()
 
def proc(nm, n=0):
  l.acquire()
  try:
    if n < 5:
      print("*", end='')
      return proc(nm, n+1)
    else:
      return nm
  finally:
    l.release() 
 
for i in range(5):
  threading.Thread(target=proc, args=(str(i),)).start()
  1.  аварийно завершается при попытке выполнить l.acquire() во второй раз
  2.  печатает 5 звездочек
  3.  беспрерывно печатает звездочки
  4.  печатает 1 звездочку и зависает
  5.  печатает 25 звездочек

Вопрос 7

В каких точках программы необходимо выполнять acquire() и release() замка Z, чтобы функция f могла правильно работать в многопоточном приложении? (Как обычно, нужно минимизировать общее время, на которое запирается замок)

def f(x, y, z):
  global d1, d2
  # 1
  d1[(x, y)] = z
  # 2
  d2[z] = (x, y)
  # 3
  res = len(d2)
  # 4
  return res 


  1.  замок не нужен
  2.  1: Z.acquire(), 2: Z.release(), Z.acquire(), 3: Z.release()
  3.  1: Z.acquire(), 4: Z.release()
  4.  1: Z.acquire(), 3: Z.release()

Вопрос 8

Какого типа значение получится в результате вычисления следующего выражения:

(" ", )
  1.  это синтаксическая ошибка
  2.  tuple (кортеж)
  3.  str (строка)
  4.  unicode (Unicode-строка)

Вопрос 9

Имеется следующий генератор для слияния двух отсортированных последовательностей:

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.  ошибок нет
  2.  генератор будет портить переданные ему списки
  3.  в последней строке каждый раз удаляется элемент из временного списка, а не из «a1» или «a2»: генератор зациклится
  4.  генератор оставит за собой временный список, так как «del» происходит после «yield»

Вопрос 10

Каким из приведенных ниже способов можно привести латинские символы строки s к нижнему регистру?

  1.  s.islower()
  2.  s.tolower()
  3.  s.lower()
  4.  s.replace('A-Z', 'a-z')