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

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

Вариант 1408290000.


Ваше имя*:


Вопрос 1

Как определить функцию в Python?

  1.  с помощью оператора import
  2.  с помощью lambda-выражения
  3.  заданием списка строк исходного кода
  4.  с помощью ключевого слова «function»

Вопрос 2

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

 
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.  программа создает пять дополнительных потоков, которые запускаются после выполнения ready.set() в главном потоке
  2.  программа запускает пять дополнительных потоков, печатающих "Done!" одновременно
  3.  программа запускает пять дополнительных потоков, печатающих "Done!" после выполнения ready.set(), то есть, после печати "Prepare!"
  4.  программа запускает пять дополнительных потоков, один из которых печатает "Done!" после выполнения ready.set(), а остальные ждут следующего ready.set()

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

Вопрос 4

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

def f(x):
  # 1
  fc = open("file.txt", "w+")
  # 2
  fc.write(x)
  # 3
  fc.write("\n")
  # 4
  fc.close()
  # 5


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

Вопрос 5

Что можно узнать с помощью регулярного выражения r'([01]+)\1\1'?

  1.  наличие в строке нулей, единиц и обратной косой черты
  2.  троекратное повторение одной и той же строки из нулей и единиц, возможно, не подряд
  3.  троекратное повторение одной и той же строки из нулей и единиц подряд
  4.  наличие в строке нулей и единиц

Вопрос 6

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

 
import threading
 
class PR(threading.Thread):
  def __init__(self, n):
    threading.Thread.__init__(self, name="t" + n)
    self.n = n
  def run(self):
    import time
    time.sleep(1)
    print "*"
 
p1 = PR("1")
p2 = PR("2")
p1.start()
p2.start()
 
  1.  выводит одну звездочку и зависает
  2.  через секунду выводит звездочку, а затем через секунду — еще одну
  3.  выводит две звездочки спустя секунду после запуска
  4.  выводит одну звездочку и завершается

Вопрос 7

Какие новые имена появятся в текущем модуле после выполнения следующего кода:

import sre as re
from re import compile
  1.  имена sre, re и compile
  2.  нельзя одновременно делать import и «from … import»
  3.  только имена sre и compile
  4.  только имена re и compile

Вопрос 8

Сколько элементов будет содержать словарь D (то есть, чему будет равно len(D)) после выполнения следующего кода:

D = {}
D[1], D[2], D[3] = "ABB"
D[0], D[1] = "AB"
  1.  2
  2.  4
  3.  сообщение об ошибке
  4.  1
  5.  3

Вопрос 9

Укажите набор атрибутов, которые считаются приватными, для экземпляров следующего класса:

 
class Ex:
  def __init__(self, x, y):
    xy = x, y
    self.position = xy
    self._length = self.__len(x, y)
  def __len(self, x, y):
    return abs(x) + abs(y)
  def getlen(self):
    return self._length
 


  1.   _length, __len
  2.   _length, __len, position
  3.   xy, x, y, self, _length, position
  4.   __len, xy, x, y, self

Вопрос 10

Что будет выведено следующей программой?

a = 1
b = 2
a, b = b, a
print(a, b, a)
  1.  1 2 1
  2.  1 1 1
  3.  1 1 1 1 2 1
  4.  2 1 2