Отдел закадров часто устраивает лайвкодинг на собеседованиях. Это один из самых сложных этапов при приёме на работу: учитывая и без того немаленький стресс соискателя, необходимо быстро написать функцию, цикл или придумать имя переменной. Сейчас мы рассмотрим, какие задачи ставят компании перед кандидатом для лайвкодинга.
Нужно понимать, что задачи будут зависеть от того на какую позицию и на какой стек вы устраиваетесь. Это к тому, что нельзя заранее предугадать, что тебя попросят сделать в той или иной компании. Поэтому самый лучший способ подготовиться — хорошо выучить матчасть.
Для новичков, кто смотрит в сторону онлайн-обучения, рекомендуем сначала изучить тотальный обзор курсов разработчиков для Python — https://kursy-online.ru/luchshie-kursy-programmirovaniya-python/. Подберите комфортную дату начала обучения в группе, а также проверьте, чтобы в интервалах между уроками вы успевали делать не только домашнее задание, но и повседневные дела. Предстоит долгий и трудный путь.
Попроще
Начнем с самых простых истин. Эти задачки вы должны отскакивать от вас, как мяч от защитников Манчестер Юнайтед в недавнем матче с Ливерпулем. Начнем с избитой задачки на написание программы для отображения календаря:
#Python program to display calendar import calendar # Get the month and year from the users year = int(input("Enter the year: ")) month = int(input("Enter the month: ")) # Displaying the calendar for the given year and month print(calendar.month(year,month))
Также вас могут попросить наглядно продемонстрировать работу интерпретатора с арифметическими операциями:
# Read the input numbers from users num1 = input('Enter the first number: ') num2 = input('Enter the second number: ') # Converting and adding two numbers using int() & float() functions sum = int(num1) + int(num2) # Subtracting the two numbers sub = int(num1) - int(num2) # Multiplying two numbers mul = float(num1) * float(num2) #Dividing two numbers div = float(num1) / float(num2) # Displaying the results of arithmetic operations print('The sum of {0} and {1} is {2}'.format(num1, num2, sum)) print('The subtration of {0} and {1} is {2}'.format(num1, num2, sub)) print('The multiplication of {0} and {1} is {2}'.format(num1, num2, mul)) print('The division of {0} and {1} is {2}'.format(num1, num2, div))
Дальше пройдемся по числам. Пишем скрипт для проверки, является ли число нечетным или четным:
#Python program to check if a number is odd or even #To get the input from user num1 = input("Enter a number: ") #Checking whether the entered number is odd or even if (int(num1) % 2) == 0: print("{0} is Even number".format(num1)) else: print("{0} is Odd number".format(num1))
А здесь мы ищем максимум двух чисел:
#To read the input value from the user num1 = input('Enter the first number: ') num2 = input('Enter the second number: ') #Finding the maximum value using Python max() funtion maximum = max(int(num1), int(num2)) #Displaying the maximum number print("The maximum number is: ",maximum)
И последнее про числа. Банальная задача на проверку простых чисел (натуральные числа, которые делятся только на 1 и на самого себя без остатка):
# Function to check prime number def PrimeChecking(num): # Condition to check given number is more than 1 if num > 1: # For look to iterate over the given number for i in range(2, int(num/2) + 1): # Condition to check if the given number is divisible if (num % i) == 0: #If divisible by any number it's not a prime number print("The number ",num, "is not a prime number") break # Else print it as a prime number else: print("The number ",num, "is a prime number") # If the given number is 1 else: print("The number ",num, "is not a prime number") # Input function to take the number from user num = int(input("Enter a number to check prime or not: ")) # To print the result, whether a given number is prime or not PrimeChecking(num)
Как можно найти факториал числа без использования конструкции if-else? Это можно сделать через встроенную функцию math.factorial(), которая возвращает факториал заданного числа:
# Python program to find factorial of a given number #importing the math function import math #Defining the factorial() function to find factorial def factorial(num): return(math.factorial(num)) # Input function to get the number from user num = int(input('Please enter a number to find the factorial: ')) #Printing the factorial of the given number print("The factorial of the given number", num, "is", factorial(num))
После чисел перейдем к тексту. Тоже довольно тривиальная и часто встречающаяся задачка. Нужно найти все гласные в конкретной строке:
#Python Program to Find Vowels From a String #defining a function def get_vowels(String): return [each for each in String if each in "aeiou"] get_string1 = "hello" # ['e', 'o'] get_string2 = "python is fun" # ['o', 'i', 'u'] get_string3 = "coding compiler" # ['o', 'i', 'o', 'i', 'e'] get_string4 = "12345xyz" # [] #Let's print vowels from the given strigns #Vowels from first string print("The Vowels Are: ",get_vowels(get_string1)) #Vowels from second string print("The Vowels Are: ",get_vowels(get_string2)) #Vowels from third string print("The Vowels Are: ",get_vowels(get_string3)) #Vowels from fourth string print("The Vowels Are: ",get_vowels(get_string4))
А теперь пройдемся по геометрии. Как вычислить площадь треугольника. Наглядно:
# Python Program to find the area of a triangle # Get the 3 sides of a triangle from the user s1 = float(input('Enter first side value: ')) s2 = float(input('Enter second side value:')) s3 = float(input('Enter third-side value:')) #Calculating the semi-perimeter of a triangle sp = (s1 + s2 + s3) / 2 #Calculating the area of a triangle area = (sp*(sp-s1)*(sp-2)*(sp-s3)) ** 0.5 #Printing the area of the triangle print('The area of the triangle is: ', area)
Также могут попросить написать программу для отображения таблицы умножения с помощью цикла for. Это тоже несложно:
#Python program to display multiplication table #Get the number from the user for multipication table tab_number = int(input ("Enter the number of your choice to print the multiplication table: ")) #For loop to iterate the multiplication 10 times and print the table print ("The Multiplication Table of: ", tab_number) for count in range(1, 11): print (tab_number, 'x', count, '=', tab_number * count)
Программа Python для демонстрации неявного преобразования типов:
#Implicit type casting example get_num1 = 199 #int get_num2 = 1.25 #float get_num3 = get_num1 + get_num2 #int+float=? print("Datatype of get_num1:",type(get_num1)) print("Datatype of get_num2:",type(get_num2)) print("The value of get_num3 is:",get_num3) print("Datatype of get_num3:",type(get_num3)) #Implicit conversion - Python always converts smaller data types to larger data types to avoid the loss of data.
Посложнее
Пакет пространства имён — собой совокупность различных частей, где каждая часть вносит подпакет в родительский пакет. Это полезно, когда вы хотите выпустить связанные библиотеки в виде отдельных загрузок. Знаете как его создать?
Package-1/namespace/__init__.py Package-1/namespace/module1/__init__.py Package-2/namespace/__init__.py Package-2/namespace/module2/__init__.py the end-user can import namespace.module1 and import namespace.module2.
Создайте статические переменные или методы класса в Python. Важно помнить, что переменные, объявленные внутри определения класса, но не внутри метода, являются классовыми или статическими переменными:
>>> class MyClass: ... i = 3 ... >>> MyClass.i 3 #This creates a class-level i variable, but this is distinct from any instance-level i variable, so you could have >>> m = MyClass() >>> m.i = 4 >>> MyClass.i, m.i >>> (3, 4)
Добавим немного ООП и функций
Как вызвать суперконструктор в Python? Существует несколько способов вызова методов суперкласса (включая конструктор). Вот один из самых простых:
class A(object): def __init__(self): print("world") class B(A): def __init__(self): print("hello") super().__init__()
Зачем нужен __slots__ в Python? Это специальный атрибут, который позволяет явно указать, какие атрибуты экземпляра ожидаются от экземпляров вашего объекта, с ожидаемыми результатами:
class Base: __slots__ = 'foo', 'bar' class Right(Base): __slots__ = 'baz', class Wrong(Base): __slots__ = 'foo', 'bar', 'baz' # redundant foo and bar
Скорее всего вас попросят продемонстрировать умение работать с лямбда-функциями. Python поддерживает стиль программирования, называемый функциональным программированием, когда вы можете передавать функции другим функциям, чтобы они выполняли определенные действия. Пример:
def filterfunc(x): return x % 3 == 0 mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])
Как определить имя функции внутри функции без использования трассировки? Предположим у нас есть функция foo. При выполнении foo.bar() есть ли способ узнать имя бара? Или еще лучше, имя foo.bar?
#foo.py def bar(): print "my name is", __myname__ # <== how do I calculate this at runtime?
Способ есть:
import inspect def foo(): print(inspect.stack()[0][3]) print(inspect.stack()[1][3]) # will give the caller of foos name, if something called foo foo() #output: foo <module_caller_of_foo>
Списки
Как пройти список в обратном порядке в Python? Поскольку enumerate() возвращает генератор, а генераторы нельзя обратить вспять, вам нужно сначала преобразовать его в список.
#Use the built-in reversed() function: >>> a = ["foo", "bar", "baz"] >>> for i in reversed(a): ... print(i) ... baz bar foo #To also access the original index, use enumerate() on your list before passing it to reversed(): >>> for i, e in reversed(list(enumerate(a))): ... print(i, e) ... 2 baz 1 bar 0 foo
Попробуйте случайным образом выбрать элемент из списка foo = [‘а’, ‘б’, ‘с’, ‘г’, ‘е’]
Use random.choice(): import random foo = ['a', 'b', 'c', 'd', 'e'] print(random.choice(foo))
Как удалить элемент из списка по индексу в Python?
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> del a[-1] >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8] #Also supports slices: >>> del a[2:4] >>> a [0, 1, 4, 5, 6, 7, 8, 9]
Это лишь малая часть того, что просят написать на собеседованиях. Будем считать это небольшой шпаргалкой.