TeamQuest Blog

Popularne pytania rekrutacyjne z Pythona

Popularne pytania rekrutacyjne z Pythona

Marcin Sarna , 07.01.2021 r.

Obróbka danych i operacje na stringach. Zobaczmy na przykładach czego oczekują od kandydatów rekruterzy.

Przekształcenie adresu IP

Jednym z zadań jest przekształcenie prawidłowego adresu IPv4 i zwrócenie zapisu, w którym znak . jest zastąpiony przez [.]. Jeśli znasz ciągi znaków w Pythonie to pierwszą rzeczą, która przychodzi Ci do głowy, jest traktowanie kropki jako separatora i podzielenie ciągu. Następnie ponownie połączysz pusty ciąg stosując „[.]” jako separator.

def defang_IP(address):
new_address = ""
split_address = address.split(".")
separator = "[.]"
new_address = separator.join(split_address) # mind the order: it's separator join a list (split_address)
return new_address

Nie jest to jednak rozwiązanie optymalne. Bardziej pythonowym rozwiązaniem jest użycie metody replace() do bezpośredniej zmiany kropki na kropkę z nawiasami prostokątnymi:

def defang_IP(address):
return address.replace(".", "[.]")

Fizz buzz

Innym poleceniem jest napisanie programu, który wypisuje liczby od 1 do 50. Dla liczb stanowiących wielokrotność 2 program wypisze jednak zamiast danej liczby słowo „fuzz” a dla liczb stanowiących wielokrotność 3 program wypisze słowo „buzz”. No i wreszcie dla liczb stanowiących jednocześnie wielokrotność 2 i 3 program ma wypisać „fuzzbuzz”.

To pytanie można przepisać na wiele komend „if… then”. W szczególności możemy zrobić coś takiego: „jeśli warunek A zostanie spełniony, wyprowadź wynik A…”.

for i in range(1,51): 

if i%2==0 and i%3==0:
print('fizzbuzz')

elif i%2==0:
print('fizz')

elif i%3==0:
print('buzz')

else:
print(i)

Jest tylko jeden haczyk: są liczby, które są wielokrotnościami 2 i 3 o tym w pierwszej kolejności (przed innymi „ifami”). Twój rozmówca może poprosić Cię o użycie innych metod niż „ify”. Mając to na uwadze, tworzymy dwa warunki i mnożymy słowa kluczowe „fizz” i „buzz”, jeśli jeden lub oba warunki są spełnione:

 def fizz_buzz_func(num):

condition_1 = (num % 2 == 0)# fizz

condition_2 = (num % 3 == 0)# buzz

if (condition_1 or condition_2):
return (condition_1 * 'Fizz') + (condition_2 * 'Buzz')

return str(num)

print('\n'.join([fizz_buzz_func(i) for i in range(1,51)]))

Znajdź pierwszy niepowtarzający się znak

Inne wyzwanie: dostajesz łańcuch znaków i masz znaleźć pierwszy, niepowtarzający się znak oraz zwrócić jego index (pozycję). Jeżeli taki nie występuje powinieneś zwrócić -1.

W łańcuchach możemy obliczyć wystąpienia podciągów za pomocą metody count.

def first_unique_character(string):
for i in range(len(string)): # create a range item
c = string # create a new object for each element in string
if string.count(c)==1: # this is the tricky part: for each element within the string, if the count is 1.
return i # return i;
# we can also use the index method: return string.index(c)
return -1

string = "I am a data scientist."
first_unique_character(string)

Sprawdź oferty pracy na TeamQuest

Cel podróży

Otrzymujesz różnce tablice, gdzie tablica = [cityAi, cityBi] oznacza, że istnieje bezpośrednia ścieżka prowadząca z cityAi do cityBi. Na tej podstawie zwróć miasto docelowe, czyli miasto bez żadnej ścieżki prowadzącej do innego miasta. Masz przy tym gwarancję, że wykres ścieżek tworzy linię bez żadnej pętli, dlatego zawsze będzie dokładnie jedno miasto docelowe.

Kluczem jest zrozumienie definicji miasta docelowego: jest to miasto bez miasta wylotu. Innymi słowy, miasto docelowe powinno pojawić się tylko w drugiej kolumnie tablic, ale nigdy w pierwszej. Po zrozumieniu tego, reszta staje się oczywista:

def destination_city(paths):
return (set(path for path in paths)- set(path for path in paths)).pop()

# test case
paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
destination_city(paths)

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej