Главная / Программирование /
Язык программирования Python / Тест 9
Язык программирования Python - тест 9
Упражнение 1:
Номер 1
К какому уровню модели взаимодействия открытых систем относится протокол IP?
Ответ:
 (1) физическому 
 (2) канальному 
 (3) сетевому 
 (4) транспортному 
Номер 2
К какому уровню модели взаимодействия открытых систем относится протокол TCP?
Ответ:
 (1) физическому 
 (2) канальному 
 (3) сетевому 
 (4) транспортному 
Номер 3
К какому уровню модели взаимодействия открытых систем относится протокол HTTP?
Ответ:
 (1) сетевому 
 (2) транспортному 
 (3) сеансовому 
 (4) представления 
 (5) приложений 
Номер 4
К какому уровню модели взаимодействия открытых систем относится протокол FTP?
Ответ:
 (1) сетевому 
 (2) транспортному 
 (3) сеансовому 
 (4) представления 
 (5) приложений 
Номер 5
К какому уровню модели взаимодействия открытых систем относится протокол UDP?
Ответ:
 (1) сетевому 
 (2) транспортному 
 (3) сеансовому 
 (4) представления 
 (5) приложений 
Упражнение 2:
Номер 1
Как с помощью модуля smtplib
создать SMTP-соединение с сервером mail.server?
Ответ:
 (1) c = smtplib.sendmail('mail.server', from_, to_, message)
 
 (2) c = smtplib.connect('mail.server')
 
 (3) c = smtplib.SMTP('mail.server')
 
 (4) c = smtplib.SMTP(); c.connect('mail.server')
 
Номер 2
Какие ошибки (и погрешности) допущены в следующем примере?
fromaddr = "tetja@abcde.ru"
toaddr = "ktoto@edcba.ru"
message = """Здравствуйте! Я ваша тетя.
"""
connect = SMTP('mail.abcde.ru')
connect.sendmail(fromaddr, toaddr, message)
connect.quit()
Ответ:
 (1) не обрабатываются исключения 
 (2) в сообщении (message
) не заданы поля 
 (3) отсутствует указание порта SMTP (25) 
 (4) ошибок и существенных погрешностей нет 
Номер 3
Какие ошибки (и погрешности) допущены в следующем примере?
fromaddr = "tetja@abcde.ru"
toaddr = "ktoto@edcba.ru"
message = """Здравствуйте! Я ваша тетя.
"""
try:
connect = SMTP('mail.abcde.ru')
connect.sendmail(fromaddr, toaddr, message)
connect.quit()
except:
print "Не удалось отправить сообщение"
Ответ:
 (1) не обрабатываются исключения 
 (2) в сообщении (message
) не заданы поля 
 (3) отсутствует указание порта SMTP (25) 
 (4) ошибок и существенных погрешностей нет 
Номер 4
Какие ошибки (и погрешности) допущены в следующем примере?
fromaddr = "tetja@abcde.ru"
toaddr = "ktoto@edcba.ru"
message = """From: tetja@abcde.ru
To: ktoto@edcba.ru
Subject: Your aunt
Hello! I am your aunt.
"""
try:
connect = SMTP('mail.abcde.ru')
connect.sendmail(fromaddr, toaddr, message)
connect.quit()
except:
print "Не удалось отправить сообщение"
Ответ:
 (1) не обрабатываются исключения 
 (2) в сообщении (message
) не заданы поля 
 (3) отсутствует указание порта SMTP (25) 
 (4) ошибок и существенных погрешностей нет 
Номер 5
Какие ошибки (и погрешности) допущены в следующем примере?
fromaddr = "tetja@abcde.ru"
toaddr = "ktoto@edcba.ru"
message = """From: tetja@abcde.ru
To: ktoto@edcba.ru
Subject: Your aunt
Hello! I am your aunt.
"""
connect = SMTP('mail.abcde.ru')
connect.sendmail(message)
connect.quit()
Ответ:
 (1) не обрабатываются исключения 
 (2) в сообщении (message
) не заданы поля 
 (3) отсутствуют некоторые параметры при вызове connect.sendmail
 
 (4) ошибок и существенных погрешностей нет 
Упражнение 3:
Номер 1
Каким образом в модуле poplib
представлен сеанс работы с POP3-сервером?
Ответ:
 (1) набор функций 
 (2) экземпляр класса РОРЗ 
 (3) кортеж 
 (4) список кортежей 
Номер 2
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, email
p = poplib.POP3('pop3.SERVER')
p.getwelcome()
p.user('USERNAME')
p.pass_('USERPASSWORD')
response, lst, octets = p.list()
#
# обработка lst
#
p.quit()
Ответ:
 (1) метод list()
имеет другой формат результата: просто список. Ошибки (response
) в случае необходимости передаются возбуждением исключений 
 (2) учетные данные пользователя (логин и пароль) передаются сразу в методе user
, а не отдельным методом pass_()
 
 (3) делать quit()
необязательно, он выполнится сам 
 (4) ошибок нет 
Номер 3
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, email
p = poplib.POP3('pop3.SERVER')
p.getwelcome()
p.user('USERNAME')
p.pass_('USERPASSWORD')
lst = p.list()
#
# обработка lst
#
p.quit()
Ответ:
 (1) метод list()
имеет другой формат результата: ответ сервера, список строк и длина ответа. Правильно было бы написать: response, lst, octets = p.list()
 
 (2) учетные данные пользователя (логин и пароль) передаются сразу в методе user
, а не отдельным методом pass_()
 
 (3) делать quit()
необязательно, он выполнится сам 
 (4) ошибок нет 
Номер 4
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, email
p = poplib.POP3('pop3.SERVER')
p.getwelcome()
p.user('USERNAME')
p.pass_('USERPASSWORD')
response, lst, octets = p.list()
#
# обработка lst
# ...
(resp, lines, octets) = p.retr(1)
print "Длина первого сообщения:", len(lines), "символов"
# ...
#
p.quit()
Ответ:
 (1) с помощью len(lines)
можно вычислить длину сообщения в строках. Для вычисления длины сообщения в символах (точнее, в байтах) нужно просуммировать длину строк в списке lst
(или взять octets
) 
 (2) в списке может не быть первого сообщения: необходимо это проверять 
 (3) делать quit()
необязательно, он выполнится сам 
 (4) ошибок нет 
Номер 5
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, email
p = poplib.POP3('pop3.SERVER')
p.user('USERNAME', 'USERPASSWORD')
response, lst, octets = p.list()
#
# обработка lst
# ...
#
p.quit()
Ответ:
 (1) отсутствуют две команды протокола POP3
 
 (2) неправильный вызов метода user()
: пароль задается в отдельной команде 
 (3) делать quit()
необязательно, он выполнится сам 
 (4) ошибок нет 
Упражнение 4:
Номер 1
Следующая программа считает, сколько процентов HTML-кода web-страницы занимают встроенные сценарии.
import urllib, re
SITE = "http://mail.ru"
doc = urllib.open(SITE).read()
script_re = re.compile("(?i)(?m)(?s)(<script[^>]*>.+?</script>)")
prc = sum([len(frag) for frag in script_re.findall(doc)]) / float(len(doc)) * 100
print "%.0f%%" % prc
Какие ошибки допущены в этой программе?
Ответ:
 (1) в четвертой строке вместо script_re.findall(doc)
нужно использовать script_re.findall("\n".join(doc))
 
 (2) в третьей строке должно быть urllib.urlopen
, а не urllib.open
 
 (3) в третьей строке не нужно использовать read()
 
 (4) ошибок нет 
Номер 2
Какие утверждения о следующей программе (вычисляющей время загрузки сайтов из списка) верные?
import urllib, time
SITES = ["http://ya.ru", "http://yandex.ru", "http://www.google.ru"]
for site in SITES:
t1 = time.time()
u = urllib.urlopen(site)
doc = u.read()
total = time.time()-t1
clen = int(u.info()['Content-Length'])
print site, len(u), clen, total
Ответ:
 (1) u.info()
может не содержать Content-Length
: нужно предусмотреть try-except
 
 (2) в последней строке вместо len(u)
нужно использовать len(doc)
 
 (3) метод для открытия URL не urllib.urlopen()
, а urllib.open()
 
 (4) серьезных замечаний и ошибок нет 
Номер 3
Какие утверждения о следующей программе (вычисляющей время загрузки сайтов из списка) верные?
import urllib, time
SITES = ["http://ya.ru", "http://yandex.ru", "http://www.google.ru"]
for site in SITES:
t1 = time.time()
u = urllib.urlopen(site)
doc = u.read()
total = time.time()-t1
clen = int(u.info()['Content-Length'])
print site, len(doc), clen, total
Ответ:
 (1) u.info()
может не содержать Content-Length
: нужно предусмотреть try-except
 
 (2) метод для открытия URL не urllib.urlopen()
, а urllib.open()
 
 (3) в последней строке вместо len(doc)
нужно использовать len(u)
 
 (4) серьезных замечаний и ошибок нет 
Номер 4
Что может быть на месте QQQ
для корректного формирования запроса с множественными значениями?
import urllib
enc_data = urllib.urlencode(QQQ)
f = urllib.urlopen("http://searchengine.com/search" + "?" + enc_data)
Ответ:
 (1) [("n", "1"), ("n", "3"), ("n", "4"), ("button", "Hello"),] 
 (2) {"n": "1", "n": "3", "n": "4", "button": "Hello"} 
 (3) n="1", n="3", n="4", button="Hello" 
 (4) ["n", "1", "n", "3", "n", "4", "button", "Hello",] 
Номер 5
Что получится в результате вычисления следующего выражения:
urllib.quote("a = b + c")
Ответ:
 (1) 'a%20=%20b%20+%20c' 
 (2) 'a%20=%20b%20%2B%20c' 
 (3) 'a%20%3D%20b%20%2B%20c' 
 (4) 'a+%3D+b+%2B+c' 
Упражнение 5:
Номер 1
Как использовать XML-RPC сервер из Python-программы с помощью модуля xmlrpclib
?
Ответ:
 (1) создать объект-подключение вызовом ServerProxy
; вызывать метод call
этого объекта 
 (2) создать объект-подключение вызовом ServerProxy
; вызывать метод этого объекта, соответствующий названию зарегистрированной на удаленном сервере функции 
 (3) вызвать функцию xmlrpclib.make_call
, аргументами которой указать URL, имя вызываемой функции и аргументы 
Номер 2
Какой модуль стандартной библиотеки Python позволяет работать с WWW на более низком уровне?
Ответ:
 (1) htmllib
 
 (2) urlparse
 
 (3) httplib
 
 (4) urllib2
 
Номер 3
Какой модуль стандартной библиотеки Python обеспечивает большую, чем urllib
, дополнительную высокоуровневую функциональность при работе с WWW?
Ответ:
 (1) htmllib
 
 (2) urlparse
 
 (3) httplib
 
 (4) urllib2
 
Номер 4
Какова структура URL согласно RFC 2396
?
Ответ:
 (1) scheme://netloc/path?query#fragment 
 (2) scheme://netloc/path;parameters?query 
 (3) scheme://netloc/path;parameters?query#fragment 
 (4) scheme://netloc/path?query#fragment;parameters 
Номер 5
Чему будет равен результат выполнения urlparse.urlsplit("http://google.com/search?q=Python#1")?
Ответ:
 (1) ('http', 'google.com', '/search', 'q=Python', '1') 
 (2) ('http', 'google.com', '/search', '', 'q=Python', '1') 
 (3) ('http', 'google.com', 'search', 'q=Python', '1') 
 (4) ('http://', 'google.com/', 'search?', 'q=Python#', '1')