Python собеседования
1.94K subscribers
340 photos
453 links
Подготовка к собеседованиям на позицию Python-разработчик

Еще больше на сайте https://frontview-it.ru

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Python собеседования pinned «Подписывайся на наши новые каналы! 👩‍💻 Git 🖥 SQL 👩‍💻 QA»
🔥 Как использовать блок else в обработке исключений?

В языке Python блок else в конструкции try-except-else выполняется только если в блоке try не возникло исключений. Это помогает отделить код, который должен выполняться при успешном выполнении try, от кода обработки ошибок.


try:
# Попытка разделить два числа
result = numerator / denominator
except ZeroDivisionError:
# Обработка ошибки деления на ноль
print("Ошибка: Деление на ноль.")
else:
# Выполняется, если исключения не было
print("Результат:", result)


В этом примере, если переменная denominator не равна нулю, деление пройдет успешно, и блок else выведет результат. Если же произойдет исключение ZeroDivisionError, блок else будет пропущен.

Еще пример использования:


try:
# Чтение из файла
with open('data.txt', 'r') as file:
data = file.read()
except FileNotFoundError:
# Обработка ошибки отсутствия файла
print("Файл не найден.")
else:
# Выполняется, если файл успешно открыт
process_data(data) # Обработка данных из файла


Блок else подходит для кода, который должен выполняться только при отсутствии ошибок в блоке try, делая программу более читабельной и структурированной.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3
🔥 Как добавлять методы в класс?

В Python методы добавляются в класс путем определения функций внутри него. Методы экземпляра принимают первым аргументом self, ссылающимся на объект.


class MyClass:
def my_method(self):
# Метод экземпляра
print("Hello from instance method")


Создание объекта и вызов метода:


obj = MyClass() # Создаем объект класса
obj.my_method() # Вызываем метод экземпляра


Добавление метода с параметрами:


class MyClass:
def greet(self, name):
# Метод с параметром
print(f"Hello, {name}!")


Статические и класс-методы создаются с помощью декораторов @staticmethod и @classmethod:


class MyClass:
@staticmethod
def static_method():
# Статический метод без self
print("Это статический метод")

@classmethod
def class_method(cls):
# Класс-метод принимает cls вместо self
print(f"Это метод класса {cls}")


Вызов статического и класс-методов:


MyClass.static_method() # Вызов статического метода
MyClass.class_method() # Вызов класс-метода


Методы определяют поведение объектов и класса, позволяя взаимодействовать с данными и выполнять операции.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👀1
🔥 Как импортировать конкретные функции или классы из модуля?

В Python для импорта конкретных функций или классов из модуля используется конструкция from ... import ....

Например, импортируем функцию sqrt из модуля math:


from math import sqrt # Импортируем функцию sqrt из модуля math

result = sqrt(25) # Используем функцию sqrt для вычисления квадратного корня из 25
print(result) # Выведет: 5.0


Импорт нескольких функций одновременно:


from math import sin, cos, pi # Импортируем функции sin, cos и константу pi

print(sin(pi/2)) # Выведет: 1.0
print(cos(0)) # Выведет: 1.0


Импорт класса из модуля:


from collections import Counter # Импортируем класс Counter из модуля collections

data = ['a', 'b', 'a', 'c', 'b', 'a']
counter = Counter(data) # Создаем объект Counter для подсчета элементов в data
print(counter) # Выведет: Counter({'a': 3, 'b': 2, 'c': 1})


Переименование импортируемых элементов с помощью as:


from datetime import datetime as dt # Импортируем класс datetime как dt

now = dt.now() # Создаем объект текущего времени
print(now)


Этот способ импорта позволяет загружать только необходимые компоненты, что делает код более оптимизированным и понятным.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩2
👇 Другие направления для подготовки тут:

👩‍💻 Frontend
👩‍💻 Go
👩‍💻 Java
👩‍💻 C/C++
👩‍💻 C#
👩‍💻 PHP
👩‍💻 QA
🖥 SQL
👩‍💻 Git
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🔥 Как работать с регулярными выражениями с помощью модуля re?

В Python модуль re используется для работы с регулярными выражениями: поиска, сопоставления и замены в строках.

Импорт модуля:


import re # Импортируем модуль re


Поиск совпадения с re.search():


text = "Contact us at support@example.com"
match = re.search(r'\w+@\w+\.\w+', text) # Ищем email в тексте
if match:
print(match.group()) # Выведет: support@example.com


Получение всех совпадений с re.findall():


numbers = re.findall(r'\d+', "Prices: 100, 200, 300") # Ищем все числа
print(numbers) # Выведет: ['100', '200', '300']


Замена подстрок с re.sub():


text = "Red car, blue car, green car"
new_text = re.sub(r'car', 'bike', text) # Заменяем 'car' на 'bike'
print(new_text) # Выведет: "Red bike, blue bike, green bike"


Разделение строки с re.split():


items = re.split(r',\s*', "apple, banana, cherry") # Разделяем по запятой
print(items) # Выведет: ['apple', 'banana', 'cherry']


Модуль re обеспечивает гибкость при работе с текстом, позволяя применять сложные шаблоны для анализа и обработки данных.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍811
🔥 Что такое декораторы с аргументами?

В Python декораторы с аргументами — это функции, которые принимают аргументы и возвращают сам декоратор. Это позволяет передавать дополнительные параметры для настройки поведения декоратора.

Пример декоратора с аргументами для повторения выполнения функции:


def repeat(times):
# Декоратор, принимающий аргумент times
def decorator(func):
# Декоратор без аргументов
def wrapper(*args, **kwargs):
# Обертка функции
result = None
for _ in range(times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator


Использование декоратора с аргументами:


@repeat(3)
def greet(name):
# Функция, которую декорируем
print(f"Hello, {name}!")

greet("Alice")


В этом примере декоратор @repeat(3) вызывает функцию greet три раза подряд. Аргумент times позволяет задавать количество повторений при применении декоратора.

Декораторы с аргументами полезны для создания гибких и переиспользуемых решений, где поведение декоратора можно контролировать через параметры.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
🔥 Как использовать библиотеку sqlite3 для работы с базой данных?

В Python библиотека sqlite3 используется для работы с базой данных SQLite. С ее помощью можно создавать, изменять и читать базы данных, хранящиеся в файловой системе.

Создание подключения и курсора:


import sqlite3 # Импортируем модуль sqlite3

# Подключаемся к базе данных (файл example.db)
conn = sqlite3.connect('example.db')
cursor = conn.cursor() # Создаем курсор для выполнения операций


Создание таблицы:


# Создаем таблицу users с полями id и name
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)
''')
conn.commit() # Сохраняем изменения


Вставка данных:


# Вставляем новую запись в таблицу
cursor.execute('INSERT INTO users (name) VALUES (?)', ('Alice',))
conn.commit()


Получение данных:


# Извлекаем все записи из таблицы
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall() # Получаем результат запроса
for row in rows:
print(row) # Выводим каждую запись


Обновление данных:


# Обновляем имя пользователя с id = 1
cursor.execute('UPDATE users SET name = ? WHERE id = ?', ('Bob', 1))
conn.commit()


Удаление данных:


# Удаляем пользователя с id = 1
cursor.execute('DELETE FROM users WHERE id = ?', (1,))
conn.commit()


Закрытие подключения:


# Закрываем курсор и соединение
cursor.close()
conn.close()


Библиотека sqlite3 позволяет выполнять стандартные SQL-запросы, обеспечивая простой и эффективный способ взаимодействия с базами данных SQLite.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
🔥 Как работать с типом данных float?

В Python тип данных float представляет числа с плавающей точкой, то есть дробные числа.

Создание переменной типа float:


number = 3.14 # Создаем переменную number со значением 3.14


Арифметические операции с числами float:


addition = 1.5 + 2.5 # Сложение: addition будет 4.0
subtraction = 5.0 - 0.5 # Вычитание: subtraction будет 4.5
multiplication = 2.0 * 3.0 # Умножение: multiplication будет 6.0
division = 7.0 / 2.0 # Деление: division будет 3.5


Преобразование других типов данных в float с помощью функции float():


int_number = 10
float_number = float(int_number) # Преобразуем 10 в 10.0

string_number = "2.718"
float_from_string = float(string_number) # Преобразуем строку "2.718" в число 2.718


Форматирование вывода чисел float:


value = 1 / 3
print(f"{value:.2f}") # Выведет: 0.33 (до двух знаков после запятой)


Особенности работы с float из-за ограниченной точности:


sum = 0.1 + 0.2
print(sum) # Выведет: 0.30000000000000004

# Для точных вычислений используйте модуль decimal
from decimal import Decimal
sum_decimal = Decimal('0.1') + Decimal('0.2')
print(sum_decimal) # Выведет: 0.3


Проверка типа переменной:


print(type(number)) # Выведет: <class 'float'>


Числа float полезны для работы с дробными значениями, но следует быть внимательным к возможным погрешностям при вычислениях.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1032🤩1
🔥 Как устроен цикл for в Python?

В Python цикл for используется для итерации по итерируемым объектам, таким как списки, строки, кортежи, множества и словари.

Пример перебора списка:


fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit) # Выводим каждый фрукт из списка


Итерация по строке:


for char in 'Python':
print(char) # Выводим каждый символ строки


Использование функции range() для генерации последовательности чисел:


for i in range(5):
print(i) # Выводим числа от 0 до 4


С указанием начального значения и шага:


for i in range(1, 10, 2):
print(i) # Выводим числа 1, 3, 5, 7, 9


Перебор элементов словаря:


person = {'name': 'Alice', 'age': 30}
for key, value in person.items():
print(f"{key}: {value}") # Выводим ключ и значение


Вложенные циклы for:


for i in range(3):
for j in range(2):
print(f"i = {i}, j = {j}") # Комбинации i и j


Цикл for может содержать инструкции break и continue для управления потоком выполнения:


for i in range(10):
if i == 5:
break # Прерываем цикл при i равном 5
print(i)

for i in range(10):
if i % 2 == 0:
continue # Пропускаем четные числа
print(i)


Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
🔥 Как создавать собственные исключения в Python?

В Python можно создавать собственные исключения, наследуя от встроенных классов исключений, обычно от Exception:


class MyCustomError(Exception):
# Пользовательское исключение, наследующее от Exception
pass


Это создает простое исключение MyCustomError, которое можно вызвать с помощью raise:


def divide(a, b):
if b == 0:
raise MyCustomError("Деление на ноль недопустимо.")
return a / b

try:
result = divide(10, 0)
except MyCustomError as e:
print(e) # Выведет сообщение об ошибке


Можно добавить собственный конструктор для передачи дополнительных данных:


class ValidationError(Exception):
def __init__(self, message, field):
# Инициализируем базовый класс Exception
super().__init__(message)
self.field = field # Дополнительный атрибут

try:
raise ValidationError("Неверное значение.", "username")
except ValidationError as e:
print(f"{e.field}: {e}") # Выведет: username: Неверное значение.


Создание собственных исключений помогает делать код более понятным и предоставляет дополнительные возможности для обработки ошибок.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
🔥 Как читать содержимое файла построчно?

В Python для чтения файла построчно используются различные методы.

Использование цикла for по объекту файла:


with open('filename.txt', 'r') as file:
for line in file:
print(line.strip()) # Выводим строку без лишних пробелов и переносов


В этом примере файл открывается с помощью with open, что обеспечивает автоматическое закрытие файла после завершения блока. Цикл for перебирает каждую строку в файле.

Чтение строк с помощью readline():


with open('filename.txt', 'r') as file:
line = file.readline() # Читаем первую строку
while line:
print(line.strip()) # Обрабатываем строку
line = file.readline() # Читаем следующую строку


Метод readline() читает файл по одной строке за вызов. Цикл while продолжается до тех пор, пока не будет прочитан весь файл.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🔥 Что такое атрибуты класса и экземпляра?

В Python атрибуты класса являются общими для всех экземпляров, а атрибуты экземпляра уникальны для каждого объекта.

Атрибуты класса:


class MyClass:
class_attr = 0 # Атрибут класса

print(MyClass.class_attr) # Выведет: 0

obj1 = MyClass()
obj2 = MyClass()
print(obj1.class_attr) # Выведет: 0

MyClass.class_attr = 10 # Изменяем атрибут класса
print(obj1.class_attr) # Выведет: 10
print(obj2.class_attr) # Выведет: 10


Атрибуты экземпляра:


class MyClass:
def __init__(self, value):
self.instance_attr = value # Атрибут экземпляра

obj1 = MyClass(1)
obj2 = MyClass(2)
print(obj1.instance_attr) # Выведет: 1
print(obj2.instance_attr) # Выведет: 2

obj1.instance_attr = 3 # Изменяем атрибут экземпляра
print(obj1.instance_attr) # Выведет: 3
print(obj2.instance_attr) # Выведет: 2


Атрибуты класса подходят для данных, общих для всех объектов, а атрибуты экземпляра — для индивидуальных данных каждого объекта.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151
🔥 Как использовать генераторы для создания итераторов?

В Python генераторы — это простой и эффективный способ создавать итераторы с помощью функций и ключевого слова yield.

Пример генератора:


def my_generator(n):
# Генерируем числа от 0 до n-1
for i in range(n):
yield i


Использование генератора:


gen = my_generator(5)
for value in gen:
print(value) # Выведет числа от 0 до 4


При каждом вызове yield функция приостанавливается и сохраняет свое состояние. При следующей итерации выполнение продолжается с того же места.

Генераторы позволяют работать с большими объемами данных, так как значения вычисляются по мере необходимости, не загружая всю последовательность в память.

Также существуют генераторные выражения, аналогичные списковым включениям:


gen_exp = (x * x for x in range(5))
for value in gen_exp:
print(value) # Выведет квадраты чисел от 0 до 4


Генераторы упрощают создание итераторов для последовательного доступа к данным и повышают производительность программы за счет экономии ресурсов.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
🔥 Как работать с библиотекой asyncio?

В Python библиотека asyncio используется для написания асинхронного кода, позволяющего выполнять операции ввода-вывода без блокировки.

Создание корутины:


import asyncio # Импортируем модуль asyncio

async def main():
# Асинхронная функция
print('Hello')
await asyncio.sleep(1) # Асинхронная задержка на 1 секунду
print('World')

asyncio.run(main()) # Запускаем корутину


Выполнение нескольких задач одновременно:


async def say_after(delay, what):
await asyncio.sleep(delay) # Задержка
print(what)

async def main():
task1 = asyncio.create_task(say_after(1, 'Hello'))
task2 = asyncio.create_task(say_after(2, 'World'))

await task1 # Ждем завершения task1
await task2 # Ждем завершения task2

asyncio.run(main())


Использование asyncio.gather:


async def main():
await asyncio.gather(
say_after(1, 'Hello'),
say_after(2, 'World'),
)

asyncio.run(main())


asyncio облегчает написание высокопроизводительных сетевых и веб-приложений, позволяя эффективно управлять большим количеством соединений и задач.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🔥 Что такое строковые литералы и как их использовать?

Строковые литералы в Python используются для представления текста. Они могут быть заключены в одинарные ' ', двойные " " или тройные кавычки ''' '''/""" """. Тройные кавычки позволяют создавать многострочные строки.

Основные виды строковых литералов:

- Одинарные и двойные кавычки: позволяют использовать разные типы кавычек внутри строки без экранирования.


single_quote = 'Hello, World!'
double_quote = "Hello, World!"


- Тройные кавычки: удобны для многострочного текста и документации.


multi_line = """Hello,
World!"""


- Сырые строки: обозначаются префиксом r и игнорируют экранирование символов.


raw_string = r"C:\Users\Name"


Строковые литералы поддерживают различные методы для обработки текста, такие как upper(), lower(), format() и другие, что делает их гибким инструментом для работы с текстовыми данными.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123
🔥 Что такое цепочка исключений и как её использовать?

Цепочка исключений в Python позволяет сохранять контекст произошедших ошибок, что облегчает отладку и анализ проблем.

Основной способ создания цепочки исключений — использование ключевого слова from. Это связывает новое исключение с исходным, показывая их взаимосвязь.

Пример использования:


def read_file(file_path):
try:
with open(file_path, 'r') as file:
return file.read()
except FileNotFoundError as e:
raise FileNotFoundError(f"Файл по пути {file_path} не найден") from e

try:
content = read_file("non_existent_file.txt")
except FileNotFoundError as err:
print(err)
print("Исходная ошибка:", err.__cause__)


Вывод:

Файл по пути non_existent_file.txt не найден
Исходная ошибка: [Errno 2] No such file or directory: 'non_existent_file.txt'


В этом примере при отсутствии файла генерируется новое исключение с дополнительным сообщением, при этом сохраняется исходная ошибка. Это помогает лучше понять причину сбоя и упростить диагностику.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
🔥 Как добавить условия elif и else?

Условные операторы elif и else в Python расширяют возможности управления потоком выполнения программы, позволяя обрабатывать несколько условий.

Основная структура условий выглядит так:


if condition1:
# блок кода при условии1
elif condition2:
# блок кода при условии2
else:
# блок кода, если ни одно из условий не выполнено


Пример использования:


temperature = 25

if temperature > 30:
weather = "Hot"
elif temperature > 20:
weather = "Warm"
else:
weather = "Cool"

print(weather) # Output: Warm


В этом примере проверяется значение температуры. Если она больше 30, устанавливается статус "Hot". Если больше 20, но меньше или равна 30, статус будет "Warm". Во всех остальных случаях используется "Cool". Оператор elif позволяет добавить дополнительные условия между if и else, обеспечивая гибкость в логике программы.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🔥 Что такое наследование и как его использовать в Python?

Наследование в Python позволяет создавать новый класс на основе существующего, наследуя его атрибуты и методы. Это способствует повторному использованию кода и упрощает создание иерархий классов.

Основная синтаксис наследования:


class Parent:
def greet(self):
print("Hello from Parent")

class Child(Parent):
def greet(self):
print("Hello from Child")
super().greet()


Пример использования:


child_instance = Child()
child_instance.greet()


Вывод:

Hello from Child
Hello from Parent


В этом примере класс Child наследует от Parent, переопределяя метод greet. С помощью super() вызывается метод родительского класса, что позволяет расширять функциональность. Наследование облегчает управление кодом, позволяя создавать специализированные классы на основе общих.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🔥 Что такое псевдонимы при импорте и как их использовать?

Псевдонимы при импорте позволяют присваивать модулям или их частям более короткие и удобные имена, что улучшает читаемость кода и упрощает работу с длинными именами.

Использование псевдонимов осуществляется с помощью ключевого слова as.

Примеры:

1. Импорт модуля с псевдонимом:


import numpy as np

array = np.array([1, 2, 3])


2. Импорт функции с псевдонимом:


from datetime import datetime as dt

current_time = dt.now()


Псевдонимы полезны для сокращения длинных имен модулей, избежания конфликтов имен и повышения удобства использования библиотек в проекте.

Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12