- Абстрактний клас — це назва будь-якого класу, з якого можна створити об'єкт.
- Абстрактні класи повинні бути перевизначені кожного разу, коли з них створюється об'єкт.
- Абстрактні класи повинні успадковуватися від конкретних класів.
- Абстрактний клас існує лише для того, щоб інші "конкретні" класи могли успадковуватися від абстрактного класу.
- Функція
any()
випадково поверне будь-який елемент зі списку. - Функція
any()
повертає True, якщо будь-який елемент у списку оцінюється як True. Інакше вона повертає False. - Функція
any()
приймає як аргументи список для перевірки та елемент для перевірки. Якщо "будь-який" з елементів у списку відповідає елементу для перевірки, функція повертає True. - Функція
any()
повертає булеве значення, яке відповідає на питання "Чи є в цьому списку елементи?"
if any([True, False, False, False]) == True:
print('Yes, there is True')
>>> 'Yes, there is True'
- зв'язаний список
- черга
- множина
- OrderedDict
- Статичні методи називаються статичними, тому що вони завжди повертають
None
. - Статичні методи можуть бути прив'язані як до класу, так і до екземпляра класу.
- Статичні методи здебільшого служать як утилітарні або допоміжні методи, оскільки вони не можуть отримати доступ або змінити стан класу.
- Статичні методи можуть отримати доступ і змінити стан класу або екземпляра класу.
- Атрибути — це розширені версії оператора
if/else
, які використовуються для перевірки рівності між об'єктами. - Атрибути — це спосіб зберігати дані або описувати стан для класу або екземпляра класу.
- Атрибути — це рядки, які описують характеристики класу.
- Аргументи функцій називаються "атрибутами" в контексті методів класу та методів екземпляра.
Пояснення: Атрибути визначаються під класом, а аргументи — під функціями. Аргументи зазвичай стосуються параметрів, тоді як атрибути є конструкторами класу або екземпляра класу.
count, fruit, price = (2, 'apple', 3.5)
- Присвоєння кортежу.
- Розпакування кортежу.
- Відповідність кортежу.
- Дублювання кортежу.
-
.delete()
-
pop(my_list)
-
del(my_list)
-
.pop()
my_list = [1,2,3]
my_list.pop(0)
my_list
>>>[2,3]
- Захоплення аргументів командного рядка, переданих під час виконання файлу.
- Підключення різних систем, таких як веб-фронтенд, API-сервіс, база даних і мобільний застосунок.
- Створення знімка всіх пакетів і бібліотек у віртуальному середовищі.
- Сканування стану екосистеми Python під час роботи у віртуальному середовищі.
- O(n), також називається лінійним часом.
- O(log n), також називається логарифмічним часом.
- O(n^2), також називається квадратичним часом.
- O(1), також називається постійним часом.
Q10. Який правильний синтаксис для визначення класу під назвою Game, якщо він успадковується від батьківського класу під назвою LogicGame?
-
class Game(LogicGame): pass
-
def Game(LogicGame): pass
-
def Game.LogicGame(): pass
-
class Game.LogicGame(): pass
Пояснення: Батьківський клас, який успадковується, передається як аргумент дочірньому класу. Тому тут правильна відповідь — перший варіант.
- A
def sum(a, b):
"""
sum(4, 3)
7
sum(-4, 5)
1
"""
return a + b
- B
def sum(a, b):
"""
>>> sum(4, 3)
7
>>> sum(-4, 5)
1
"""
return a + b
- C
def sum(a, b):
"""
# >>> sum(4, 3)
# 7
# >>> sum(-4, 5)
# 1
"""
return a + b
- D
def sum(a, b):
###
>>> sum(4, 3)
7
>>> sum(-4, 5)
1
###
return a + b
Пояснення: Використовуйте '''
для початку документації та додайте результат після >>>
.
-
set
-
list
-
None
-
dictionary
- Можливо створити стек лише з нуля.
college_years = ['Freshman', 'Sophomore', 'Junior', 'Senior']
return list(enumerate(college_years, 2019))
-
[('Freshman', 2019), ('Sophomore', 2020), ('Junior', 2021), ('Senior', 2022)]
-
[(2019, 2020, 2021, 2022), ('Freshman', 'Sophomore', 'Junior', 'Senior')]
-
[('Freshman', 'Sophomore', 'Junior', 'Senior'), (2019, 2020, 2021, 2022)]
-
[(2019, 'Freshman'), (2020, 'Sophomore'), (2021, 'Junior'), (2022, 'Senior')]
-
self
означає, що не потрібно передавати інші аргументи в метод. - Ключове слово
self
не має реальної мети; це просто історичний термін у комп'ютерних науках, який Python зберігає для узгодженості з іншими мовами програмування. -
self
відноситься до екземпляра, метод якого був викликаний. -
self
відноситься до класу, від якого успадковується об'єкт за допомогоюself
.
Простий приклад
class my_secrets:
def __init__(self, password):
self.password = password
pass
instance = my_secrets('1234')
instance.password
>>>'1234'
- Ви можете призначити ім'я кожному члену
namedtuple
і звертатися до них так само, як до ключів уdictionary
. - Кожен член об'єкта namedtuple можна індексувати безпосередньо, як у звичайному
tuple
. -
namedtuples
такі ж ефективні за пам'яттю, як і звичайніtuples
. - Не потрібно імпортувати
namedtuples
, оскільки вони доступні в стандартній бібліотеці.
Необхідно імпортувати за допомогою: from collections import namedtuple
- Методи екземпляра можуть змінювати стан екземпляра або стан його батьківського класу.
- Методи екземпляра зберігають дані, пов'язані з екземпляром.
- Метод екземпляра — це будь-який метод класу, який не приймає жодних аргументів.
- Метод екземпляра — це звичайна функція, яка належить класу, але вона повинна повертати
None
.
- Захищає дані від зовнішнього втручання.
- Батьківський клас інкапсульований, і жодні дані з батьківського класу не передаються дочірньому класу.
- Зберігає дані та методи, які можуть маніпулювати цими даними, в одному місці.
- Дозволяє змінювати дані лише за допомогою методів.
- Вказує комп'ютеру, який блок коду виконати, якщо інструкції, які ви закодували, є неправильними.
- Виконує один блок коду, якщо всі імпорти були успішними, і інший блок коду, якщо імпорти не були успішними.
- Виконує один блок коду, якщо умова є істинною, але інший блок коду, якщо умова є хибною.
- Вказує комп'ютеру, який блок коду виконати, якщо є достатньо пам'яті для його обробки, і який блок коду виконати, якщо пам'яті недостатньо.
- словник (dictionary)
- множина (set)
- Немає. Чергу можна створити лише з нуля.
- список (list)
-
my_game = class.Game()
-
my_game = class(Game)
-
my_game = Game()
-
my_game = Game.create()
- Створює шлях від кількох значень в ітерованому об'єкті до одного значення.
- Застосовує функцію до кожного елемента в ітерованому об'єкті та повертає значення цієї функції.
- Перетворює складний тип значення на простіші типи.
- Створює відповідність між двома різними елементами різних ітерованих об'єктів.
Пояснення: - Синтаксис функції map()
такий: list(map(function,iterable))
. Простий приклад знаходження площі за допомогою map виглядатиме так:
import math
radius = [1,2,3]
area = list(map(lambda x: round(math.pi*(x**2), 2), radius))
area
>>> [3.14, 12.57, 28.27]
- Функція поверне RuntimeError, якщо ви не повернете значення.
- Якщо ключове слово return відсутнє, функція поверне
None
. - Якщо ключове слово return відсутнє, функція поверне
True
. - Функція увійде в нескінченний цикл, оскільки не знатиме, коли припинити виконання свого коду.
Довідка. Коли оператор return є None
, або немає значення, або відсутній оператор return, функція повертає None
.
- Використовується для пропуску оператора
yield
генератора та повернення значення None. - Це нульова операція, яка використовується переважно як заповнювач у функціях, класах тощо.
- Використовується для передачі керування з одного блоку інструкцій до іншого.
- Використовується для пропуску решти циклу
while
абоfor
і повернення на початок циклу.
Оператор pass використовується як заповнювач для майбутнього коду. Коли виконується оператор pass, нічого не відбувається, але ви уникаєте помилки, коли порожній код не дозволений. Довідка
- аргументи
- парадигми
- атрибути
- декоратори
-
слот
(slot) -
словник
(dictionary) -
черга
(queue) -
відсортований список
(sorted list)
- коли він зустрічає нескінченний цикл
- коли він зустрічає оператор if/else, що містить ключове слово break
- коли він перевірив кожен елемент в ітерованому об'єкті, з яким працює, або зустрів ключове слово break
- коли час виконання циклу перевищує O(n^2)
Q27. Припустимо, що вузол знаходиться в однозв'язному списку. Яка складність пошуку конкретного вузла в однозв'язному списку?
- Час виконання O(n), оскільки в найгіршому випадку вузол, який ви шукаєте, є останнім, і кожен вузол у зв'язаному списку повинен бути відвіданий.
- Час виконання O(nk), де n представляє кількість вузлів, а k - час, необхідний для доступу до кожного вузла в пам'яті.
- Час виконання не можна визначити, якщо не знати, скільки вузлів у однозв'язному списку.
- Час виконання O(1), оскільки ви можете безпосередньо індексувати вузол в однозв'язному списку.
Q28. Маючи наступні три списки, як створити новий список, який відповідає бажаному результату, надрукованому нижче?
fruits = ['Яблука', 'Апельсини', 'Банани']
quantities = [5, 3, 4]
prices = [1.50, 2.25, 0.89]
#Бажаний вивід
[('Яблука', 5, 1.50),
('Апельсини', 3, 2.25),
('Банани', 4, 0.89)]
- A
output = []
fruit_tuple_0 = (first[0], quantities[0], price[0])
output.append(fruit_tuple)
fruit_tuple_1 = (first[1], quantities[1], price[1])
output.append(fruit_tuple)
fruit_tuple_2 = (first[2], quantities[2], price[2])
output.append(fruit_tuple)
return output
- B
i = 0
output = []
for fruit in fruits:
temp_qty = quantities[i]
temp_price = prices[i]
output.append((fruit, temp_qty, temp_price))
i += 1
return output
- C
groceries = zip(fruits, quantities, prices)
return groceries
>>> [
('Яблука', 5, 1.50),
('Апельсини', 3, 2.25),
('Банани', 4, 0.89)
]
- D
i = 0
output = []
for fruit in fruits:
for qty in quantities:
for price in prices:
output.append((fruit, qty, price))
i += 1
return output
- Функція
all()
повертає булеве значення, яке відповідає на питання "Чи всі елементи в цьому списку однакові?" - Функція
all()
повертає True, якщо всі елементи списку можна перетворити на рядки. Інакше вона повертає False. - Функція
all()
поверне всі значення у списку. - Функція
all()
повертає True, якщо всі елементи списку оцінюються як True. Інакше вона повертає False.
Пояснення: all()
повертає True
, якщо всі елементи у списку є True
. Дивіться приклад нижче:
test = [True, False, False, False]
if all(test) is True:
print('Yeah, all of them are true.')
else:
print('There is an imposter.')
>>> 'There is an imposter'
(Формат відповіді може відрізнятися. Game і roll (або dice_roll) повинні бути викликані без параметрів.)
- A
>>> dice = Game()
>>> dice.roll()
- B
>>> dice = Game(self)
>>> dice.roll(self)
- C
>>> dice = Game()
>>> dice.roll(self)
- D
>>> dice = Game(self)
>>> dice.roll()
- Повернення назад
- Динамічне програмування
- Зменшення та завоювання
- Розділяй і володарюй
І сортування злиттям, і швидке сортування використовують загальну алгоритмічну парадигму, засновану на рекурсії. Ця парадигма, розділяй і володарюй, розбиває проблему на підпроблеми, подібні до вихідної проблеми, рекурсивно вирішує підпроблеми та, нарешті, об'єднує рішення підпроблем для вирішення вихідної проблеми. Довідка
- O(1), також називається постійним часом.
- O(log n), також називається логарифмічним часом.
- O(n^2), також називається квадратичним часом.
- O(n), також називається лінійним часом.
Ця функція має постійну складність часу, тобто O(1), оскільки списки мають випадковий доступ, тому останній елемент можна досягти за час O(1), тому час, необхідний для додавання нового елемента в кінець списку, дорівнює O(1).
-
set
— це впорядкована колекція унікальних елементів.list
— це невпорядкована колекція неунікальних елементів. - Елементи можна отримати з
list
, але їх не можна отримати зset
. -
set
— це впорядкована колекція неунікальних елементів.list
— це невпорядкована колекція унікальних елементів. -
set
— це невпорядкована колекція унікальних елементів.list
— це впорядкована колекція неунікальних елементів.
- Абстракція означає, що можна використовувати інший стиль коду, оскільки багато деталей вже відомі програмі за лаштунками.
- Абстракція означає, що реалізація прихована від користувача, і показуються лише відповідні дані або інформація.
- Абстракція означає, що дані та функціональність класу об'єднані в одну сутність.
- Абстракція означає, що клас може успадковуватися від кількох батьківських класів.
Абстракція в Python визначається як процес обробки складності шляхом приховування непотрібної інформації від користувача. Довідка
def print_alpha_nums(abc_list, num_list):
for char in abc_list:
for num in num_list:
print(char, num)
return
print_alpha_nums(['a', 'b', 'c'], [1, 2, 3])
- A
a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3
- B
['a', 'b', 'c'], [1, 2, 3]
- C
aaa
bbb
ccc
111
222
333
- D
a 1 2 3
b 1 2 3
c 1 2 3
- A
def sum(a, b):
# a = 1
# b = 2
# sum(a, b) = 3
return a + b
- B
def sum(a, b):
"""
a = 1
b = 2
sum(a, b) = 3
"""
return a + b
- C
def sum(a, b):
"""
>>> a = 1
>>> b = 2
>>> sum(a, b)
3
"""
return a + b
- D
def sum(a, b):
'''
a = 1
b = 2
sum(a, b) = 3
'''
return a + b
Пояснення: Використовуйте """
для початку та завершення рядка документації та використовуйте >>>
для представлення результату. Якщо ви правильно це напишете, ви також можете запустити doctest за допомогою вбудованого модуля doctest.
Q37. Припустимо, клас Game успадковується від двох батьківських класів: BoardGame і LogicGame. Яке твердження є правильним щодо методів об'єкта, створеного з класу Game?
- Під час створення об'єкта, об'єкт не успадковує жодного з методів батьківського класу.
- Під час створення об'єкта, об'єкт успадковує методи того батьківського класу, у якого більше методів.
- Під час створення об'єкта, програміст повинен вказати, з якого батьківського класу успадковувати методи.
- Екземпляр класу Game успадкує всі методи, які мають класи BoardGame і LogicGame.
- загальний клас об'єкта з ітерованими полями параметрів
- загальний клас об'єкта з неітерованими іменованими полями
- підклас кортежу з неітерованими полями параметрів
- підклас кортежу з іменованими ітерованими полями
# функція namedtuple приймає наступні аргументи для створення класу
from collections import namedtuple
>>> Point = namedtuple('Point',['x','y'])
>>> point = Point(100, 200)
>>> point
Point(x=100, y=200)
# Що дозволяє використовувати як розпакування, так і ітерацію для доступу
>>> x, y = point
>>> print(f'({x}, {y})')
(100, 200)
>>> for coordinate in point:
print(coordinate)
100
200
-
&&
-
=
-
==
-
||
fruit_info = {
'fruit': 'apple',
'count': 2,
'price': 3.5
}
-
fruit_info ['price'] = 1.5
-
my_list [3.5] = 1.5
-
1.5 = fruit_info ['price]
-
my_list['price'] == 1.5
5 != 6
-
yes
-
False
-
True
-
None
Пояснення: У Python !=
еквівалентно не дорівнює.
- Він робить класи взаємопов'язаними, якщо більше одного класу визначено в одному файлі коду.
- Він включений для збереження зворотної сумісності з Python 2, але більше не потрібен у Python 3.
- Це метод, який діє як конструктор і викликається автоматично щоразу, коли створюється новий об'єкт з класу. Він встановлює початковий стан нового об'єкта.
- Він ініціалізує будь-які імпорти, які можуть бути включені на початку файлу.
Приклад:
class test:
def __init__(self):
print('Я прийшов сюди без вашого дозволу, ха -ха')
pass
t1 = test()
>>> 'Я прийшов сюди без вашого дозволу, ха -ха'
-
Скільки мікропроцесорів знадобиться для виконання вашого коду менш ніж за одну секунду
-
Скільки рядків коду у вашому файлі
-
Кількість пам'яті, яку займає програма, як функція від розміру вхідних даних
-
Скільки копій файлу коду може поміститися в 1 ГБ пам'яті
-
fruit_info = {'fruit': 'apple', 'count': 2, 'price': 3.5}
-
fruit_info =('fruit': 'apple', 'count': 2,'price': 3.5 ).dict()
-
fruit_info = ['fruit': 'apple', 'count': 2,'price': 3.5 ].dict()
-
fruit_info = to_dict('fruit': 'apple', 'count': 2, 'price': 3.5)
fruits = {'Apples': 5, 'Oranges': 3, 'Bananas': 4}
-
fruit_names = [x in fruits.keys() for x]
-
fruit_names = for x in fruits.keys() *
-
fruit_names = [x for x in fruits.keys()]
-
fruit_names = x for x in fruits.keys()
-
self
відноситься до класу, від якого успадковано об'єкт за допомогоюself
. - Немає реальної мети для методу
self
. Це просто застарілий термін, який Python зберігає для узгодженості з іншими мовами програмування. -
self
означає, що не потрібно передавати інші аргументи в метод. -
self
відноситься до екземпляра, метод якого було викликано.
Пояснення: - Спробуйте запустити приклад з Q42 без передачі аргументу self
всередині __init__
, і ви зрозумієте причину. Ви отримаєте помилку на кшталт __init__() takes 0 positional arguments but 1 was given
, що означає, що щось передається всередину, навіть якщо це не було явно вказано, а саме екземпляр.
- Метод класу — це звичайна функція, яка належить класу, але вона повинна повертати None.
- Метод класу може змінювати стан класу, але не може безпосередньо змінювати стан екземпляра, який успадковує цей клас.
- Метод класу схожий на звичайну функцію, але метод класу не приймає жодних аргументів.
- Метод класу містить усі дані для певного класу.
Довідка Методи класу — це методи, які викликаються на самому класі, а не на конкретному екземплярі об'єкта. Тому вони належать до рівня класу, і всі екземпляри класу поділяють метод класу.
- Не використовується багато складних концепцій програмування у коді.
- Рівень складності коду не дуже високий.
- Програмі знадобиться менше ніж півсекунди для виконання.
- Час, необхідний для завершення функції, зростає лінійно зі збільшенням розміру вхідних даних.
-
def getMaxNum(list_of_nums): # тіло функції тут
-
func get_max_num(list_of_nums): # тіло функції тут
-
func getMaxNum(list_of_nums): # тіло функції тут
-
def get_max_num(list_of_nums): # тіло функції тут
Використання підкреслень як роздільників слів бере свій початок з кінця 1960-х років. Це особливо асоціюється з мовою C, зустрічається в книзі "The C Programming Language" (1978) і контрастує з Pascal case (тип camel case). Однак традиційно цей стиль не мав конкретної назви: стильовий гід мови Python називає його просто "lower_case_with_underscores".[2] У Usenet термін snake_case вперше з'явився в спільноті Ruby у 2004 році,[3] використаний Гевіном Кістнером, який писав: BTW... як ви називаєте цей стиль іменування? snake_case? Так я його називатиму, поки хтось мене не виправить.
Q50. Відповідно до настанов PEP 8 щодо стилю кодування, як слід називати константні значення в Python?
- у camel case без використання підкреслень для розділення слів — наприклад,
maxValue = 255
- у нижньому регістрі з підкресленнями для розділення слів — наприклад,
max_value = 255
- у всіх великих літерах з підкресленнями для розділення слів — наприклад,
MAX_VALUE = 255
- у змішаному регістрі без використання підкреслень для розділення слів — наприклад,
MaxValue = 255
Використовуйте одну велику літеру, слово або слова. Розділяйте слова підкресленнями для покращення читабельності. Довідка
- Deque додає елементи з одного боку та видаляє з іншого.
- Deque додає елементи з одного або обох боків, але видаляє лише з верхівки.
- Deque додає елементи на обидва кінці та видаляє елементи з обох кінців.
- Deque додає елементи лише на верхівку, але видаляє їх з обох боків.
Deque або двостороння черга — це узагальнена версія структури даних черги, яка дозволяє вставляти та видаляти елементи з обох кінців. Довідка
-
my_set = {0, 'apple', 3.5}
-
my_set = to_set(0, 'apple', 3.5)
-
my_set = (0, 'apple', 3.5).to_set()
-
my_set = (0, 'apple', 3.5).set()
- :
class __init__(self):
pass
- :
def __init__():
pass
- :
class __init__():
pass
- :
def __init__(self):
pass
Q54. Яке з наступних тверджень є ПРАВДИВИМ щодо того, як числові дані будуть організовані в дереві бінарного пошуку?
- Для будь-якого вузла в дереві бінарного пошуку значення вузла більше за всі значення в лівому піддереві вузла і менше за значення в правому піддереві.
- Дерево бінарного пошуку не можна використовувати для організації та пошуку числових даних через ускладнення, що виникають з дуже глибокими деревами.
- Верхній вузол дерева бінарного пошуку буде довільним числом. Усі вузли ліворуч від верхнього вузла повинні бути меншими за число верхнього вузла, але не обов'язково впорядкованими.
- Найменше числове значення буде у верхньому вузлі. Наступне більше число буде в його лівому дочірньому вузлі, а наступне більше число після цього буде в його правому дочірньому вузлі. Ця схема продовжуватиметься, доки всі числові значення не будуть у своїх вузлах.
У комп'ютерних науках дерево бінарного пошуку (BST), також відоме як впорядковане або відсортоване бінарне дерево, є структурою даних бінарного дерева з коренем, де ключ кожного внутрішнього вузла більший за всі ключі у відповідному лівому піддереві вузла і менший за ключі в правому піддереві. Довідка
- Декоратор схожий на клас і повинен використовуватися, якщо ви займаєтеся функціональним програмуванням замість об'єктно-орієнтованого.
- Декоратор є візуальним індикатором для того, хто читає ваш код, що частина коду є критичною і не повинна змінюватися.
- Декоратор використовується для зміни функціональності функції без необхідності змінювати код функції.
- Перед оператором імпорту стоїть декоратор, Python знає, що потрібно імпортувати найновішу версію будь-якого пакета або бібліотеки, що імпортується.
Декоратори дозволяють обгорнути іншу функцію, щоб розширити її поведінку, не змінюючи її назавжди. Довідка
- Тільки в деяких ситуаціях, оскільки цикли використовуються лише для певних типів програмування.
- Коли потрібно перевірити кожен елемент в ітерованому об'єкті відомої довжини.
- Коли потрібно мінімізувати використання рядків у коді.
- Коли потрібно запустити код в одному файлі для функції в іншому файлі.
Q57. Який найбільш самодокументований спосіб визначити функцію, що обчислює податок з продажу на покупку?
- A:
def tax(my_float):
''' Обчислює податок з продажу на покупку. Приймає float, що представляє підсумок, як аргумент і повертає float, що представляє податок з продажу.'''
pass
- B:
def tx(amt):
''' Отримує податок на суму.'''
- C:
def sales_tax(amount):
''' Обчислює податок з продажу на покупку. Приймає float, що представляє підсумок, як аргумент і повертає float, що представляє податок з продажу.'''
- D:
def calculate_sales_tax(subtotal):
pass
- Не обов'язково змінювати стан елемента, на якому працює алгоритм рекурсії.
- Ви врешті-решт отримаєте KeyError, коли рекурсивна частина коду вичерпає елементи для рекурсії.
- Ви отримаєте RuntimeError: максимальна глибина рекурсії перевищена.
- Функція, що використовує рекурсію, поверне None.
- Час виконання пошуку в дереві бінарного пошуку — O(1), оскільки кожен вузол діє як ключ, подібно до словника.
- Час виконання пошуку в дереві бінарного пошуку — O(n!), оскільки кожен вузол повинен порівнюватися з кожним іншим вузлом.
- Час виконання пошуку в дереві бінарного пошуку зазвичай O(h), де h — це висота дерева.
- Час виконання пошуку в дереві бінарного пошуку — O(n), оскільки кожен вузол у дереві повинен бути відвіданий.
- Щоб змусити функцію прийняти аргумент під час виконання, навіть якщо аргумент не був включений у визначення функції.
- Щоб дозволити декоратору приймати іменовані аргументи.
- Щоб переконатися, що атрибути та методи класу не заважають глобальним змінним і функціям.
- Якщо багато класів потребують однакової функціональності, використовуйте
mixin
, щоб визначити цю функціональність.
Є дві основні ситуації, коли використовуються mixins: Потрібно надати багато необов'язкових функцій для класу. Потрібно використовувати одну конкретну функцію в багатьох різних класах. Довідка пояснення
- Додавання елементів до стеку за O(1) часу, а видалення елементів зі стеку за O(n) часу.
- Додавання елементів до стеку за O(1) часу, а видалення елементів зі стеку за O(1) часу.
- Додавання елементів до стеку за O(n) часу, а видалення елементів зі стеку за O(1) часу.
- Додавання елементів до стеку за O(n) часу, а видалення елементів зі стеку за O(n) часу.
- стек додає елементи з одного боку та видаляє з іншого.
- стек додає елементи на верхівку та видаляє з верхівки.
- стек додає елементи на верхівку та видаляє з будь-якого місця в стеку.
- стек додає елементи на обидва кінці та видаляє з обох кінців.
Пояснення: Стек використовує підхід останній прийшов — перший пішов.
- Базовий випадок — це умова, яка дозволяє алгоритму припинити рекурсію. Зазвичай це проблема, яку можна вирішити безпосередньо.
- Базовий випадок — це підсумок загальної проблеми, яку потрібно вирішити.
- Базовий випадок передається як аргумент функції, тіло якої використовує рекурсію.
- Базовий випадок схожий на базовий клас, оскільки його може успадкувати інший об'єкт.
Q64. Чому вважається гарною практикою відкривати файл у Python-скрипті за допомогою ключового слова with
?
- Ключове слово
with
дозволяє вибрати, в якому застосунку відкрити файл. - Ключове слово
with
діє як циклfor
і дозволяє отримати доступ до кожного рядка у файлі по черзі. - Немає жодної переваги у використанні ключового слова
with
для відкриття файлу в Python. - Коли файл відкривається за допомогою ключового слова
with
, Python гарантує, що файл буде закрито, навіть якщо виникне виняток або помилка.
Це гарна практика використовувати ключове слово 'with' при роботі з файловими об'єктами. Перевага полягає в тому, що файл правильно закривається після завершення його блоку, навіть якщо на якомусь етапі виникає виняток. Використання with також набагато коротше, ніж написання еквівалентних блоків try-finally:
>>> f = open('workfile', 'w', encoding="utf-8")
>>> with open('workfile', encoding="utf-8") as f:
read_data = f.read()
# Ми можемо перевірити, чи файл був автоматично закритий.
>>> f.closed
True
- Віртуальні середовища створюють "бульбашку" навколо проєкту, щоб будь-які бібліотеки або пакети, які встановлюються в ньому, не впливали на всю машину.
- Команди з віддаленими співробітниками використовують віртуальні середовища, щоб ділитися кодом, робити огляди коду та співпрацювати віддалено.
- Віртуальні середовища були поширені в Python 2, оскільки вони доповнювали відсутні функції в мові. Віртуальні середовища не потрібні в Python 3 через вдосконалення мови.
- Віртуальні середовища прив'язані до облікового запису GitHub або Bitbucket, що дозволяє отримати доступ до будь-якого з репозиторіїв віртуально з будь-якої машини.
-
python3 -m doctest <_filename_>
-
python3 <_filename_>
-
python3 <_filename_> rundoctests
-
python3 doctest
Існує також ярлик командного рядка для запуску testmod(). Ви можете вказати інтерпретатору Python запустити модуль doctest безпосередньо з бібліотеки стандартів і передати ім'я модуля(ів) у командному рядку:
python -m doctest -v example.py
Це імпортує example.py як окремий модуль і запустить testmod() на ньому. Зверніть увагу, що це може не працювати правильно, якщо файл є частиною пакета та імпортує інші підмодулі з цього пакета.
Довідка
навчальне відео
- будь-яка функція, яка використовує наукові або математичні константи, часто представлені грецькими літерами в академічних текстах
- функція, яка виконується при використанні декораторів
- будь-яка функція, визначення якої міститься в п'яти рядках коду або менше
- невелика, анонімна функція, яка може приймати будь-яку кількість аргументів, але має лише один вираз для обчислення
Пояснення:
Лямбда-нотація — це анонімна функція, яка може приймати будь-яку кількість аргументів, але має лише один вираз (тобто не може бути перевантажена). Вона була введена в інших мовах програмування, таких як C++ та Java. Лямбда-нотація дозволяє програмістам "обійти" оголошення функції.
- Можна отримати доступ до конкретного елемента у списку за індексом його позиції, але не можна отримати доступ до конкретного елемента в кортежі, якщо не ітеруєте через кортеж
- Списки є змінними, тобто можна змінювати дані всередині них у будь-який час. Кортежі є незмінними, тобто не можна змінювати дані всередині них після створення кортежу.
- Списки є незмінними, тобто не можна змінювати дані всередині них після створення списку. Кортежі є змінними, тобто можна змінювати дані всередині них у будь-який час.
- Списки можуть містити кілька типів даних одночасно, але кортежі можуть містити лише один тип даних, якщо присутні кілька елементів.
- None
- Ітерований об'єкт
- Структуру даних зв'язаного списку з непорожнього списку
- Усі ключі даного словника
- Атрибути екземпляра можна змінювати, але атрибути класу не можна змінювати
- Атрибути класу спільні для всіх екземплярів класу. Атрибути екземпляра можуть бути унікальними для конкретного екземпляра
- Немає різниці між атрибутами класу та атрибутами екземпляра
- Атрибути класу належать лише класу, а не екземпляру цього класу. Атрибути екземпляра спільні для всіх екземплярів класу
- :
def get_next_card():
# тіло методу тут
- :
def get_next_card(self):
# тіло методу тут
- :
def self.get_next_card():
# тіло методу тут
- :
def self.get_next_card(self):
# тіло методу тут
-
get_max_num([57, 99, 31, 18])
-
call.(get_max_num)
-
def get_max_num([57, 99, 31, 18])
-
call.get_max_num([57, 99, 31, 18])
-
-- Це коментар
-
# Це коментар
-
/* Це коментар */
-
// Це коментар
my_list = ['kiwi', 'apple', 'banana']
-
orange = my_list[1]
-
my_list[1] = 'orange'
-
my_list['orange'] = 1
-
my_list[1] == orange
Q75. Що станеться, якщо використовувати цикл while і забути включити логіку, яка врешті-решт зупинить цикл?
- Нічого не станеться; комп'ютер знає, коли зупинити виконання коду в циклі while.
- Ви отримаєте KeyError.
- Ваш код застрягне в нескінченному циклі.
- Ви отримаєте WhileLoopError.
- Черга додає елементи на будь-який кінець і видаляє елементи з будь-якого кінця.
- Черга додає елементи на верх і видаляє елементи з верху.
- Черга додає елементи на верх і видаляє елементи з будь-якого місця в списку.
- Черга додає елементи на верх і видаляє елементи з будь-якого місця в черзі.
- A:
num_people = 5
if num_people > 10:
print("У басейні багато людей.")
elif num_people > 4:
print("У басейні є деякі люди.")
else:
print("У басейні нікого немає.")
- B:
num_people = 5
if num_people > 10:
print("У басейні багато людей.")
if num_people > 4:
print("У басейні є деякі люди.")
else:
print("У басейні нікого немає.")
- C:
num_people = 5
if num_people > 10;
print("У басейні багато людей.")
elif num_people > 4;
print("У басейні є деякі люди.")
else;
print("У басейні нікого немає.")
- D:
if num_people > 10;
print("У басейні багато людей.")
if num_people > 4;
print("У басейні є деякі люди.")
else;
print("У басейні нікого немає.")
-
defaultdict
автоматично створить для вас словник, у якому ключами будуть цілі числа від 0 до 10. -
defaultdict
змушує словник приймати лише ключі тих типів, які були вказані під час створенняdefaultdict
(наприклад, рядки або цілі числа). - Якщо спробувати прочитати з
defaultdict
неіснуючий ключ, буде створено нову пару ключ-значення за замовчуванням замість того, щоб викликатиKeyError
. -
defaultdict
зберігає копію словника в пам'яті, до якої можна повернутися, якщо оригінал буде ненавмисно змінено.
defaultdict
— це контейнер, подібний до словника, який присутній у модулі collections. Функціональність словників і defaultdict
майже однакова, за винятком того, що defaultdict
ніколи не викликає KeyError
. Він надає значення за замовчуванням для ключа, який не існує.
# Function to return a default
# values for keys that are not
# present
def def_value():
return "Not Present"
# Defining the dict
d = defaultdict(def_value)
Q79. Який правильний синтаксис для додавання ключа variety
до словника fruit_info
, що має значення Red Delicious
?
-
fruit_info['variety'] == 'Red Delicious'
-
fruit_info['variety'] = 'Red Delicious'
-
red_delicious = fruit_info['variety']
-
red_delicious == fruit_info['variety']
- Коли потрібно мінімізувати використання рядків у коді.
- Коли потрібно виконувати код в одному файлі, поки код в іншому файлі також виконується.
- Коли потрібно, щоб код продовжував виконуватись, поки деяка умова є істинною.
- Коли потрібно виконати два або більше фрагментів коду одночасно в одному файлі.
i = 1
while i<6:
print('Countdown:',i)
i = i + 1
Q81. Який правильний синтаксис для визначення методу __init__()
, який встановлює атрибути, специфічні для екземпляра, під час створення нового екземпляра класу?
- :
def __init__(self, attr1, attr2):
attr1 = attr1
attr2 = attr2
- :
def __init__(attr1, attr2):
attr1 = attr1
attr2 = attr2
- :
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
- :
def __init__(attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
Пояснення:: Під час створення нового об'єкта з даного класу метод __init__()
приймає як attr1
, так і attr2
, і встановлює їх значення для відповідного атрибута об'єкта, тому потрібно використовувати self.attr1 = attr1
замість attr1 = attr1
.
def count_recursive(n=1):
if n > 3:
return
print(n)
count_recursive(n + 1)
- :
1
1
2
2
3
3
- :
3
2
1
- :
3
3
2
2
1
1
- :
1
2
3
Q83. У Python, при використанні множин, використовується _ для обчислення перетину між двома множинами і _ для обчислення об'єднання
-
Intersect
;union
-
|
;&
-
&
;|
-
&&
;||
import numpy as np
np.ones([1,2,3,4,5])
- Повертає матрицю 5x5; кожен рядок матиме значення 1,2,3,4,5.
- Повертає масив зі значеннями 1,2,3,4,5.
- Повертає п'ять різних квадратних матриць, заповнених одиницями. Перша — 1x1, друга — 2x2 і так далі до 5x5.
- Повертає 5-вимірний масив розміру 1x2x3x4x5, заповнений одиницями.
Q85. Ви стикаєтеся з FileNotFoundException під час використання лише імені файлу у функції open
. Яке може бути найпростіше рішення?
- Переконатися, що файл знаходиться в системному
PATH
. - Створити символічне посилання для кращого доступу до файлу.
- Скопіювати файл у ту саму директорію, з якої виконується скрипт.
- Додати шлях до файлу в змінну середовища
PYTHONPATH
.
{x for x in range(100) if x%3 == 0}
- Множину всіх кратних 3, менших за 100.
- Множину всіх чисел від 0 до 100, помножених на 3.
- Список усіх кратних 3, менших за 100.
- Множину всіх кратних 3, менших за 100, за винятком 0.
Довідка Це Set Comprehension
, оскільки в '{}', фігурних дужках, тому поверне Set
!
- Виконувати цілочисельний поділ.
- Виконувати операції з експонентами.
- Знаходити залишок від операції ділення.
- Виконувати поділ з плаваючою точкою.
-
datetime
-
dateday
-
daytime
-
timedate
-
def Game(): pass
-
def Game: pass
-
class Game: pass
-
class Game(): pass
-
my_game = Game(self) self.my_game.roll_dice()
-
my_game = Game() self.my_game.roll_dice()
-
my_game = Game() my_game.roll_dice()
-
my_game = Game(self) my_game.roll_dice(self)
a = np.array([1,2,3,4])
print(a[[False, True, False, False]])
-
{0,2}
-
[2]
-
{2}
-
[0,2,0,0]
Q92. Припустимо, що у вас є рядкова змінна, визначена як y="stuff;thing;junk;". Який буде результат цього коду?
z = y.split(';')
len(z)
- 17
- 4
- 0
- 3
Пояснення::
y="stuff;thing;junk"
len(z) ==> 3
y="stuff;thing;junk;"
len(z) ==> 4
num_list = [1,2,3,4,5]
num_list.remove(2)
print(num_list)
-
[1,2,4,5]
-
[1,3,4,5]
-
[3,4,5]
-
[1,2,3]
Пояснення:: .remove()
базується на значенні елемента, а не на індексі; тут видаляється елемент, що відповідає "2". Якщо потрібно видалити елемент за індексом, слід використовувати .pop()
.
num_list = [1,2,3,4,5]
num_list.pop(2)
>>> [1,2,4,5]
num_list.remove(2)
>>> [1,3,4,5]
[10,9,8,7,6,5,4,3,2,1]
-
reversed(list(range(1,11)))
-
list(reversed(range(1,10)))
-
list(range(10,1,-1))
-
list(reversed(range(1,11)))
import math
print(math.pow(2,10)) # виводить 2, піднесене до 10-го ступеня
- :
print(2^10)
- :
print(2**10)
- :
y = [x*2 для x у діапазоні(1,10)]
print(y)
- :
y = 1
for i in range(1,10):
y = y * 2
print(y)
- множини; списки або словники; кортежі
- списки; множини; кортежі
- кортежі; множини або списки; словники
- списки; словники або множини; кортежі
table = np.array([
[1,3],
[2,4]])
print(table.max(axis=1))
-
[2, 4]
-
[3, 4]
-
[4]
-
[1,2]
number = 3
print (f"Це число {number}")
-
Це число 3
-
Це число 3
-
ЦЕ ЧИСЛО 3
- Викине
TypeError
, оскільки ціле число потрібно привести до рядка.
-
my_tuple tup(2, 'apple', 3.5) %D
-
my_tuple [2, 'apple', 3.5].tuple() %D
-
my_tuple = (2, 'apple', 3.5)
-
my_tuple = [2, 'apple', 3.5]
-
write('w')
-
scan('s')
-
append('a')
-
read('r')
- Векторизації.
- Атрибуцій.
- Прискорення.
- Функціонального програмування.
-
set
-
list
-
tuple
-
dictionary
-
sys.exc_info()
-
os.system()
-
os.getcwd()
-
sys.executable
Q104. Припустимо, у вас є наступний фрагмент коду, і ви хочете отримати список лише з літерами. Який фрагмент коду не досягне цієї мети?
my_dictionary = {
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}
-
<br>
letters = []
for letter in my_dictionary.values():
letters.append(letter)
-
letters = my_dictionary.keys()
-
letters = [letter for (letter, number) in my_dictionary.items()]
-
letters4 = list(my_dictionary)
Пояснення: Перший варіант (правильний) повертає список значень (чисел). Решта варіантів повертають список ключів.
Q105. Коли масив великий, NumPy не виводить весь масив при використанні вбудованої функції print
. Яку функцію можна використовувати в NumPy, щоб змусити його вивести весь масив?
-
set_printparams
-
set_printoptions
-
set_fullprint
-
setp_printwhole
- Блоки
try/except
використовуються, коли потрібно виконати код, але необхідний спосіб виконати інший код, якщо виникає виняток. - Блоки
try/except
використовуються всередині модульних тестів, щоб модульні тести завжди проходили. - Блоки
try/except
використовуються, щоб продемонструвати рецензентам коду, що ви спробували новий підхід, але якщо новий підхід не відповідає їхнім очікуванням, вони можуть закоментувати все що під ключовим словомexcept
. - Блоки
try/except
використовуються, щоб жодна з функцій або методів не поверталаNone
.
- через рівень відступу після циклу for
- через ключове слово end в кінці циклу for
- через те, що блок оточений фігурними дужками ({})
- через пробіл у кінці тіла циклу for
Q108. Який механізм Python найкраще підходить для повідомлення користувача про використання нерекомендованої функції?
-
sys.stdout
- Traceback
- Warnings
- Exceptions
x = {1,2,3,4,5}
x.add(5)
x.add(6)
-
{1, 2, 3, 4, 5, 5, 6}
-
{5, 6, 1, 2, 3, 4, 5, 6}
-
{6, 1, 2, 3, 4, 5}
-
{1, 2, 3, 4, 5, 6}
Пояснення: Метод .add()
додає елемент до множини лише якщо він не існує.
fruit_info = {
'fruit': 'apple',
'count': 2,
'price': 3.5
}
-
my_keys = fruit_info.to_keys()
-
my_keys = fruit_info.all_keys()
-
my_keys = fruit_info.keys
-
my_keys = fruit_info.keys()
def be_friendly(greet = "How are you!", name):
pass
-
name
є зарезервованим словом. - Підкреслення не дозволені в іменах функцій.
- Неусталений аргумент слідує за усталеним.
- У цьому визначенні функції немає нічого неправильного.
- :
a = np.zeros([3,4])
b = a.copy()
np.array_equal(a,b)
- :
a = np.empty([3,4])
b = np.empty([3,4])
np.array_equal(a,b)
- :
a = np.zeros([3,4])
b = np.zeros([4,3])
np.array_equal(a,b)
- :
a = np.array([1, np.nan])
np.array_equal(a,a)
-
// Це коментар
-
# Це коментар
-
-- Це коментар
-
/* Це коментар *\
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = a*b
d = np.dot(a,b)
- A
c = [ a[1] * b[1], a[2] * b[2], a[3] * b[3] ]
d = sum(c)
- B
c = a[0] * b[0], a[1] * b[1], a[2] * b[2]
d = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]
- C
c = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]
d = sum(a) + sum(b)
- D
c = [ a[0] * b[0], a[1] * b[1], a[2] * b[2] ]
d = sum(c)
Q115. Які дві функції з бібліотеки NumPy можна використовувати для розв'язання системи лінійних рівнянь?
-
linalg.eig() і .matmul()
-
linalg.inv() і .dot()
-
linalg.det() і .dot()
-
linalg.inv() і .eye()
Пояснення: Для розв'язання деяких систем рівнянь можна використовувати метод діагоналізації, який включає знаходження власних векторів і власних значень матриці системи та множення пов'язаних матриць.
-
my_list = (2, 'apple', 3.5)
-
my_list = [2, 'apple', 3.5]
-
my_list = [2, 'apple', 3.5].to_list()
-
my_list = to_list(2, 'apple', 3.5)
num_list = [21, 13, 19, 3, 11, 5, 18]
num_list.sort()
num_list[len(num_list) // 2]
- мода
- середнє
- середнє арифметичне
- медіана
Пояснення: //
— це оператор цілочисельного ділення, який виконує звичайну операцію ділення, що повертає найбільше можливе ціле число, менше або рівне результату звичайного ділення. Тут він використовується для знаходження медіани, яка є значенням, що розділяє більшу від меншої половини вибірки даних, шляхом знаходження індексу елемента списку в середині списку. (Це достатньо для списку з непарною кількістю елементів; якби список мав парну кількість елементів, ви б усереднили значення двох середніх елементів, щоб знайти медіанне значення.)
- Arrays і DataFrames
- Series і Matrix
- Matrix і DataFrames
- Series і DataFrames
Q119. Припустимо, у вас є змінна vector
типу np.array з 10 000 елементів. Як можна перетворити vector
на змінну matrix
з розмірами 100x100?
-
matrix = (vector.shape = (100,100))
-
matrix = vector.to_matrix(100,100)
-
matrix = matrix(vector,100,100)
-
matrix = vector.reshape(100, 100)
- Словник (Dictionary)
- Список (List)
- Множина (Set)
- Рядок (String)
def myFunction(country = "France"):
print("Привіт, я із", country)
myFunction("Іспанії")
myFunction("")
myFunction()
- :
Привіт, я із Іспанії
Привіт, я із
Привіт, я із
- :
Привіт, я із Франції
Привіт, я із Франції
Привіт, я із Франції
- :
Привіт, я із Іспанії
Привіт, я із
Привіт, я із Франції
- :
Привіт, я із Іспанії
Привіт, я із Франції
Привіт, я із Франції
- Анонімний клас
- Батьківський клас
- Вкладений клас
- Абстрактний клас
Q123. Використовуючи Pandas, ми завантажуємо набір даних з Kaggle, як показано на зображенні нижче. Яка команда поверне загальну кількість тих, хто вижив?
-
sum(titanic['Survived'])
-
[x for x in titanic['Survived'] if x == 1]
-
len(titanic["Survived"])
-
sum(titanic['Survived']==0)
Пояснення: titanic['Survived']
повертає об'єкт pandas.Series
, який містить стовпець Survived
з DataFrame
. Додавання значень цього стовпця (тобто sum(titanic['Survived'])
) повертає загальну кількість тих, хто вижив, оскільки виживання позначається 1, а втрата — 0.
characters = ["Iron Man", "Spider Man", "Captain America"]
actors = ["Downey", "Holland", "Evans"]
# example output : [("IronMan", "Downey"), ("Spider Man", "Holland"), ("Captain America", "Evans")]
-
[(x,y)] for x in characters for y in actors]
-
zip(characters, actors)
-
d = {} for x in range(1, len(characters)): d[x] = actors[x]
-
{x:y for x in characters for y in actors}
{x : x*x for x in range(1,100)}
- Словник, де
x
є ключем, аx
в квадраті — значенням; від 1 до 100. - Словник, де
x
є ключем, аx
в квадраті — значенням; від 1 до 99. - Набір кортежів, що складаються з (
x
,x
в квадраті); від 1 до 99. - Список з усіма числами в квадраті від 1 до 99.
Q126. Яка формула Jaccard Similarity, що визначає схожість двох множин? Вона визначається як відношення кількості елементів перетину до кількості елементів об'єднання. Який варіант є точною реалізацією на Python?
-
def jaccard(a, b): return len (a | b) / len (a & b)
-
def jaccard(a, b): return len (a & b) / len (a | b)
-
def jaccard(a, b): return len (a && b) / len (a || b)
-
def jaccard(a, b): return a.intersection(b) / a.union(b)
- Long
- Int
- Float
- Double
[1,2,3] * 3
-
[3,2,3]
-
[1, 2, 3, 1, 2, 3, 1, 2, 3]
- Ви отримаєте помилку типу.
-
[3,6,9]
- 1
- 3
- 2
- Викидається виняток IndexError.
- Рядки можуть бути укладені в подвійні (") або одинарні лапки (').
- Рядки можуть бути укладені лише в одинарні лапки (').
- Односимвольні рядки повинні бути укладені в одинарні лапки ('), а решта — в подвійні (").
- Рядки можуть бути укладені лише в подвійні лапки (").
-
def*init*(self): pass
-
class*init*(self): pass
-
class*init*(): pass
-
def*init*(): pass
()
- порожній параметр.
self
- посилається на всі екземпляри в класі.
_init_
- зарезервований метод, також відомий як конструктор.
_init_()
- завжди виконується під час ініціалізації класу.
Q132. Припустимо, потрібно використовувати функцію sin
з бібліотеки math
. Який правильний синтаксис для імпорту лише цієї функції?
-
using math.sin
-
import math.sin
-
from math import sin
-
import sin from math
Пояснення: Оператор from..import
дозволяє імпортувати конкретні функції/змінні з модуля замість імпорту всього.
-
0
- кількість усіх значень True
- помилку типу
- None
print ("foo" if (256).bit_length() > 8 else "bar")
-
True
-
foo
- Повідомлення про помилку, оскільки константні цілі значення не є класами.
-
bar
- Якщо відсутнє ключове слово return, функція поверне
True
. - Функція увійде в нескінченний цикл, оскільки не знатиме, коли зупинити виконання свого коду.
- Функція поверне
RuntimeError
, якщо не повернути значення. - Якщо відсутнє ключове слово return, функція поверне
None
.
-
рядкових; числових
-
неструктурованих; структурованих
-
числових; табличних
-
табличних; числових
-
Пояснення: Бібліотека Pandas зазвичай використовується для роботи з табличними даними, такими як дані у вигляді таблиць або електронних таблиць. Вона надає структури даних і функції для маніпуляції та аналізу даних. З іншого боку, NumPy — це потужна бібліотека для числових обчислень у Python, і її часто використовують для виконання математичних операцій над числовими даними, такими як масиви та матриці.
- Використовувати компілятор C, як-от
gcc
абоclang
. - Використовувати менеджер пакетів, як-от
pip
абоconda
. - Використовувати IDE, як-от Notepad++ або Idle.
- Використовувати менеджер пакетів, як-от NPM або NuGet.
Q138. Зображення нижче було створено за допомогою Matplotlib. Це графік розподілу списку цілих чисел, заповненого числами за допомогою функції _ і побудованого за допомогою _
-
random.uniform(0,50);plt.hist
-
random.gauss(50,20);plt.hist
-
random();plt.scatter
-
random.triangular(0,50);plt.bar
import numpy as np
a = np.arange(100)
b = a[50:60:2]
-
a
: усі цілі числа від 0 до 99 (включно);b
: усі парні цілі числа від 50 до 58 (включно). -
a
: усі цілі числа від 0 до 100 (включно);b
: усі парні цілі числа від 50 до 60 (включно). -
a
: усі цілі числа від 0 до 99 (включно);b
: усі парні цілі числа від 50 до 60 (включно). -
a
: усі цілі числа від 0 до 99 (включно);b
: усі непарні цілі числа від 49 до 59 (включно).
Q140. Використовуючи NumPy у Python, як перевірити розмірність (кількість і довжину вимірів) об'єкта під назвою my_object
?
-
my_object.get_shape()
-
my_object.shape
-
my_object.dim()
-
len(my_object)
Q141. Припустимо, у вас є непорожній список під назвою mylist
, і ви хочете знайти певне значення. Мінімальна кількість порівнянь буде ** і максимальна кількість порівнянь буде **?
-
len(mylist); len(mylist)
-
1; len(mylist)
-
2; len(mylist)
-
0; len(mylist)
Пояснення: Можна використовувати оператор break, і значення, яке шукається, може бути першим елементом списку, враховуючи, що він непорожній.
-
0
-
True
-
None
-
False
Q143. Припустимо, ви хочете перевірити, чи можна перемножити дві матриці, використовуючи NumPy для зневадження. Як би ви завершили цей фрагмент коду, заповнивши пропуски відповідними змінними?
import numpy as np
def can_matrices_be_multiplied (matrix1, matrix2):
rowsMat1, columnsMat1 = matrix1.shape
rowsMat2, columnsMat2 = matrix2.shape
if _____ == ______ :
print('Матриці можна помножити!')
return True
else:
return False
- columnsMat1; rowsMat1;
- columnsMat1; rowsMat2;
- columnsMat1; columnsMat2;
- columnsMat2; rowsMat1;
довідка. Матрицю можна множити на будь-яку іншу матрицю, яка має таку саму кількість рядків, як і перші стовпці. Тобто матрицю з 2 стовпцями можна множити на будь-яку матрицю з 2 рядками.
[(x, x+1) for x in range(1,5)]
- [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
- [1,2,3,4,5]
- [(1, 2), (2, 3), (3, 4)]
- [(1, 2), (2, 3), (3, 4), (4, 5)]
Q145. У Python метод класу повинен мати __ як декоратор функції, а перший параметр методу буде посиланням на __
- @classmethod; клас
- inline; клас
- static; self
- @static; self
- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.fathername = super.name
self.name = name
def introduce(self):
print("My name is", self.name, "son of", self.fathername)
king = Person("Joffrey")
king.introduce()
- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.fathername = self.name
self.name = name
def introduce(self):
print("My name is", self.name, "son of", self.fathername)
king = Person("Joffrey")
king.introduce()
- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.name = name
def introduce(self):
print("My name is", self.name, "son of", super.name)
king = Person("Joffrey")
king.introduce()
- :
class Father():
name = 'Robert'
class Person(Father):
def __init__(self, name):
self.name = name
def introduce(self):
print("My name is", self.name, "son of", base.name)
king = Person("Joffrey")
king.introduce()
Пояснення: У першому варіанті super не має .name
(має бути self.name
). У третьому варіанті пропущено Robert, а в четвертому base
не визначено.
animals = {
'a': ['ant', 'antelope', 'armadillo'],
'b': ['beetle', 'bear', 'bat'],
'c': ['cat', 'cougar', 'camel']
}
animals = defaultdict(list, animals)
print(animals['b'])
print(animals['d'])
- A
['beetle', 'bear', 'bat']
[]
- B
['beetle', 'bear', 'bat']
# буде викинуто виняток
- C
['beetle', 'bear', 'bat']
None
- D
['bat', 'bear', 'beetle']
[]
Пояснення: Зазвичай словники викликають виняток при використанні синтаксису квадратних дужок. Defaultdict тут повертає значення за замовчуванням, визначене першим параметром, тому замість викидання винятку вони повертають типове значення. Зверніть увагу, що це потрібно імпортувати так: from collections import defaultdict
Q148. Що поверне цей рядок коду? (Припустимо, що n
вже визначено як будь-яке додатне ціле значення.)
[x*2 for x in range(1,n)]
- Список з усіма парними числами, меншими за 2*n.
- Словник з усіма парними числами, меншими за 2*n.
- Список з усіма непарними числами, меншими за 2*n.
- Список з усіма парними числами, меншими або рівними 2*n.
x = 18
if x > 10:
if x > 15:
print('A')
else:
print('B')
else:
print('C')
- C
- A B
- B
- A
- 32
- 16
- 128
- Фіксована довжина не вказана.
довідка Фіксована довжина не вказана, але Pep-8 вказує під "Максимальна довжина рядка" "Обмежити всі рядки до максимуму 79 символів".
for i in range(5): pass
- 5
- Змінна стане недоступною.
- 6
- 4
- Форматовані вирази рядків.
- Функціональні рядки.
- Рядки з форматуванням за модулем.
- Форматовані літерали рядків.
- Один.
- Усі доступні процесори.
- Два.
- Три.
Пояснення:: Потоки Python обмежені одним процесором одночасно. Бібліотека multiprocessing дозволить запускати код на різних процесорах.
x = 5
y = 1 + (20 if x < 5 else 30)
-
False
-
21
-
2
-
31
Пояснення: Якщо є лише одна інструкція для виконання, одна для if
і одна для else
, її можна розмістити на одному рядку.
x = 5
# Це те саме твердження, що розширюється до декількох рядків
y = 1
if (x < 5):
y += 20
else:
y += 30
- Перетворення ієрархії об'єктів Python у байтовий потік.
- Перетворення таблиці даних у список.
- Перетворення байтового потоку в ієрархію об'єктів Python.
- Перетворення списку в таблицю даних.
“Pickling” — це процес, під час якого ієрархія об'єктів Python перетворюється на байтовий потік, а “unpickling” — це зворотна операція, під час якої байтовий потік (з бінарного файлу або об'єкта, схожого на байти) перетворюється назад в ієрархію об'єктів.
print("codescracker".endswith("er"))
-
True
-
1
-
2
-
False
- Так
- Ні
print("programming".center())
-
cr
-
programming
- Помилка:
TypeError: center expected at least 1 argument, got 0
. - Нічого з вищезазначеного.
довідка. Метод center()
вирівнює рядок по центру, використовуючи вказаний символ (пробіл за замовчуванням) як заповнювач.
Синтаксис: string.center(length, character)
, де length
є обов'язковим!
- Тім Бернерс-Лі
- Ада Лавлейс
- Гвідо ван Россум
- Алан Тюрінг
- Множина (Set)
- Кортеж (Tuple)
- Словник (Dictionary)
- Список (List)
x = 1j
print(x**2 == -1)
- Помилка виконання, яка повідомляє, що змінна
j
не ініціалізована. -
True
-
1j
-
False
Пояснення: Літера j
в Python позначає уявну одиницю, тому x**2
означає j**2
, що дорівнює -1
. Вираз x**2 == -1
оцінюється як True
.
print(0xA + 0xB + 0xC)
-
33
-
63
-
0xA + 0xB + 0xC
- Нічого
Пояснення: A
, B
і C
— це шістнадцяткові числа зі значеннями 10
, 11
і 12
відповідно, тому сума A
, B
і C
дорівнює 33
.
for i in range(5):
print(i)
else:
print("Готово!")
-
1 2 3 4 5 Готово!
-
0 1 2 3 4 5 Готово!
-
0 1 2 3 4 Готово!
- Ви отримаєте синтаксичну помилку.
- Використовуйте списки замість кортежів, коли у вас є колекція пов'язаних, але різнорідних об'єктів.
- Використовуйте кортежі замість списків, коли у вас є загальна колекція схожих об'єктів.
- Використовуйте кортежі замість списків для функцій, які повинні повертати кілька значень.
- Використовуйте списки замість кортежів, коли важлива позиція елементів.
Q165. Розгляньте наступний код, який використовує декоратори для обчислення часу виконання функції execution_fn
import functools
import time
def timer(MISSING_ARG_1):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
rval = func(*args, **kwargs)
end_time = time.perf_counter()
duration = end_time - start_time
print(f"Executed in {duration:.4f} seconds")
return MISSING_ARG_2
return MISSING_ARG_3
@timer
def execution_fn():
for i in range(3):
time.sleep(1)
execution_fn()
Які з наступних варіантів є відсутніми аргументами?
- :
MISSING_ARG_1 = wrapper
MISSING_ARG_2 = rval
MISSING_ARG_3 = func
- :
MISSING_ARG_1 = func
MISSING_ARG_2 = rval
MISSING_ARG_3 = wrapper
- :
MISSING_ARG_1 is empty
MISSING_ARG_2 = rval
MISSING_ARG_3 = wrapper
- :
MISSING_ARG_1 is empty
MISSING_ARG_2 = rval
MISSING_ARG_3 = func
-
class Dog:
-
Dog class:
-
Dog:
-
class Dog
-
preprocessing
-
pipeline
-
filters
-
pipe_filter
довідка Правильний синтаксис: from sklearn.pipeline import Pipeline
Q168. Яке значення потрібно передати для аргументу _ в методі Pandas apply
, щоб застосувати функцію до кожного рядка?
- рядок
- стовпець
- 1
- 0
- ... вказівники.
- ... точки.
- ... маркери.
- ... нічого з вищезазначеного.
a = np.array([[1, 2], [3, 4], [5, 6]])
c = a[(a > 3) & (a < 11)]
print(c)
-
[[3, 4], [5, 6]]
-
[False, False, False, True, True, True]
-
[[0,0], [3, 4], [5, 6]]
-
[4 5 6]
Q171. Припустимо, що m
, n
і p
— це додатні цілі числа. Скільки разів буде викликана функція randint
у наступному виразі?
[ [ [ randint(1,100) for i in range(m) ] for j in range(n) ] for k in range(p) ]
-
m * n * p
- Найбільше значення з
(m,n,p)
. - 1 мільйон.
-
m + n + p
Q172. Припустимо, у вас є клас під назвою MyClass
, який має множинне успадкування та методи з однаковими іменами в його предках. Який метод класу можна викликати, щоб побачити, який метод матиме пріоритет при виклику?
-
MyClass.__mro__
-
MyClass.hierarchy()
-
callable(MyClass)
-
dir(MyClass)
Пояснення: MRO означає порядок вирішення методів. Він повертає список типів, від яких походить клас, у порядку, в якому вони шукаються для методів.
Q173. Припустимо, у вас є список співробітників, описаний нижче. Ви хочете призначити Алісі таку ж зарплату, як у Чарлі. Який варіант це зробить?
employees = {
'alice':{
'position':'Lead Developer',
'salary':1000
},
'bob':{
'position': 'Lead Artist',
'salary':2000
},
'charlie':{
'position':'cfo',
'salary':3000
}
}
-
employess['alice']['salary'] = employees['charlie']['salary']
-
employees.alice.salary = employees.charlie.salary
-
employees['alice'][1] = employees['charlie'][1]
-
employees['alice'].salary = employees['charlie'].salary
Пояснення: Це доступ до ключа в словнику, вкладеному в інший словник. Команда employees['alice']['salary'] = employees['charlie']['salary']
призначає значення ключа salary
в словнику співробітника charlie
значенню ключа salary
в словнику співробітника alice
.
Q174. Вам дано цей фрагмент коду. Припустимо, що m
і n
вже визначені як деякі додатні цілі значення. Скільки кортежів міститиме мій список після завершення?
mylist = []
for i in range(m):
for j in range(n):
mylist.append((i,j))
-
m
-
m + n
-
n
-
m * n
Пояснення: Цей код виконуватиметься m
x n
разів. Якщо запустити цей код, він створить m
x n
кортежів.
Перший цикл виконується m
разів, а внутрішній цикл - n
разів. Одна ітерація першого циклу завершиться лише тоді, коли всі n
ітерацій внутрішнього циклу будуть завершені. Це той самий процес для 2-го, 3-го, ... m
-го ітерацій зовнішнього циклу. Загалом обидва цикли виконуватимуться m
x n
разів.
{x : [y for y in range (1, x) if x % y == 0] for x in range (2, 100)}
- Словник, ключами якого є числа від 2 до 99 (включно), а їхніми відповідними значеннями є їхні дільники.
- Словник, ключами якого є числа від 2 до 99 (включно), а їхніми відповідними значеннями є список від 1 до самого ключа (включно).
- Словник, ключами якого є числа від 2 до 99 (включно), а їхніми відповідними значеннями є парні числа від 1 до самого ключа (включно).
- Словник, ключами якого є числа від 2 до 99 (включно), а їхніми відповідними значеннями є непарні числа від 1 до самого ключа (включно).
- для створення знімка всіх пакетів і бібліотек у віртуальному середовищі
- для підключення різних систем, як-от підключення веб-фронтенду, API-сервісу, бази даних і мобільного застосунку
- для захоплення аргументів командного рядка, переданих під час виконання файлу
- для сканування стану екосистеми Python у віртуальному середовищі
- 17
- 15
- 2
- 16
characters = ["Iron Man", "Spider Man", "Captain America"]
actors = ["Downey", "Holland", "Evans"]
# Приклад: [("Iron Man", "Downey), ("Spider Man", "Holland"), ("Captain America", "Evans")]
- zip (characters, actors)
- {x:y for x in characters for y in actors}
- [(x,y) for x in characters for y in actors]
-
d = {}
for x in range(1, len(characters)):
d[x] = actors [x]
for i in range(5):
print (i)
else:
print("Done!")
- :
1
2
3
4
Done!
- Cинтаксичну помилку.
- :
0
1
3
4
5
Done!
- :
1
3
4
5
Done!
- Завжди, оскільки він є обов'язковим у кожному Python-скрипті.
- Лише коли скрипт виконується безпосередньо з командного рядка або як основна програма.
- Лише коли скрипт містить синтаксичні помилки.
- Лише коли скрипт імпортується як модуль в інший скрипт.
Блок if __name__ == "__main__":
виконується, коли скрипт запускається безпосередньо, але не коли він імпортується як модуль в інший скрипт.
довідка
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
result = list(squared_numbers)
print(result)
-
[1, 4, 9, 16, 25]
-
[1, 2, 3, 4, 5]
-
[1, 8, 27, 64, 125]
-
[2, 4, 6, 8, 10]
Код визначає функцію square
для обчислення квадрата числа. Потім використовується функція map
, щоб застосувати цю функцію до кожного елемента списку numbers
, що призводить до створення нового ітератора. Нарешті, конструктор list
використовується для перетворення цього ітератора в список. Результатом буде список квадратів чисел.
довідка
- int
- string
- boolean
- array
- int
- char
- float
- str
- input()
- read_line()
- console_input()
- getline()
print("Hello {name1} and {name2}".format(name1='foo', name2='bin'))
- Hello foo and bin
- Hello {name1} and {name2}
- Помилка
- Hello and