Pythonist.ru - образование по питону
25.5K subscribers
91 photos
1 video
956 links
Pythonist.ru - помощь в подготовке к собеседованию на позицию Python Developer.
Реклама: @anothertechrock

Контент канала:
1. Разбор вопросов с собеседований
2. Книги
3. Задачи на логику
4. Проект Эйлера
5. Видео
6. Тесты по Python 3

@aldrson
Download Telegram
Ответ к предыдущей задаче для новичков

# Функция которая проверяет является ли число степенью 4
def isPowerOfFour(n):
if n <= 0:
return False

quaternary = format(n, 'b')
return quaternary.count('1') == 1 and quaternary.count('0') % 2 == 0

# Тесты для функции isPowerOfFour(n)
def test_isPowerOfFour():
assert isPowerOfFour(16) == True
assert isPowerOfFour(5) == False
assert isPowerOfFour(1) == True
assert isPowerOfFour(0) == False
assert isPowerOfFour(64) == True
assert isPowerOfFour(32) == False


#задача #coding
Задача с кодом. Нейтрализация

Напишите функцию, которая будет принимать две строки, состоящие из знаков «+» и «-», и возвращать строку — результат их взаимодействия.

Исходим из того, что строки, передаваемые в функцию, всегда будут равной длины. Переданные строки взаимодействуют следующим образом:

- плюс и плюс дают плюс
- минус и минус дают минус
- плюс и минус нейтрализуют друг друга и вместе дают 0.

Разбор примера

neutralise("+-+", "+--") ➞ "+-0"
# Сравниваем первые символы двух строк, потом следующие два символа и т.д.
# "+" и "+" возвращают "+".
# "-" и "-" возвращают "-".
# "+" и "-" возвращают "0".
# Возвращаем строку символов.

Другие примеры

№ 1
neutralise("--++--", "++--++") ➞ "000000"

№ 2
neutralise("-+-+-+", "-+-+-+") ➞ "-+-+-+"

№ 3
neutralise("-++-", "-+-+") ➞ "-+00" 

Решение на нашем сайте.

#задача #coding
Задача с кодом. Цензура

Создайте функцию, которая будет принимать строку и цензурировать (закрывать звездочками) слова длиннее четырех букв.

Примечания:

- не цензурируйте слова, состоящие ровно из четырех букв
- если в строке все слова короткие (четыре буквы и меньше), верните исходную строку
- количество звездочек, замещающих слово, должно быть равным количеству букв в этом слове.

Примеры:

censor("The code is fourty") 
➞ "The code is ******"

censor("Two plus three is five")
➞ "Two plus ***** is five"

censor("aaaa aaaaa 1234 12345")
➞ "aaaa ***** 1234 *****"

Решение на нашем сайте.

#задача #coding
Задача для новичков

Напишите функцию find_added_letter(s, t), которая приниает на вход две строки: s и t. Строка t генерируется путем случайной перетасовки строки s, а затем добавляется еще одна буква в случайную позицию. Верните букву, которая была добавлена к строке t.

Свои варианты пишите в комментариях! Решение - сегодня вечером.

#задача #coding
Ответ к предыдущей задаче для новичков

# Функция, которая находит добавленную букву
def find_added_letter(s, t):
count = {}

for char in t:
if char in count:
count[char] += 1
else:
count[char] = 1

for char in s:
count[char] -= 1
if count[char] == 0:
del count[char]

return list(count.keys())[0]

# Тесты для функции find_added_letter(s, t)
def test_find_added_letter():
assert find_added_letter("abcd", "abcde") == "e"
assert find_added_letter("", "y") == "y"
assert find_added_letter("hello", "heoll") == "l"
assert find_added_letter("abc", "acb") == "b"
assert find_added_letter("xy", "xyz") == "z"


#задача #coding
Задача с кодом. Число Перрена

В последовательности Перрена каждое число представляет собой сумму двух чисел, стоящих перед этим числом на второй и третьей позиции. Первые три числа последовательности — 3, 0, 2.

Выглядит последовательность так:

P(0) P(1) P(2) P(3) P(4) P(5) P(6) P(7) ... P(n)
3, 0, 2, 3, 2, 5, 5, 7, ...

Напишите функцию, которая будет принимать индекс числа в последовательности (n) и возвращать число Перрена под этим индексом — P(n).

Примеры:

perrin(1) ➞ 0
perrin(8) ➞ 10
perrin(26) ➞ 1497

Решение на нашем сайте.

#задача #coding
Задача с кодом. Сумма диапазона чисел

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

Примеры

sum_problem(-10, 1) ➞ -54
sum_problem(-20, 5) ➞ -195
sum_problem(90, 45) ➞ 3105

Решение на нашем сайте.

#задача #coding
Задача для новичков

Напишите функцию is_palindrome(), которая принимает на вход число и проверяет, является ли оно палиндромом. Палиндромом называется число, которое одинаково читается слева направо и справа налево.

Напишите также тесты с использованием pytest, чтобы проверить правильность работы функции на разных входных данных.

Свои варианты пишите в комментариях! Решение - сегодня вечером.

#задача #coding
Ответ к предыдущей задаче для новичков

# is_palindrome.py
def is_palindrome(number):
number_str = str(number)
return number_str == number_str[::-1]

# test_is_palindrome.py
import pytest

from palindrome import is_palindrome

def test_positive_palindrome():
assert is_palindrome(121) == True
assert is_palindrome(1221) == True

def test_negative_palindrome():
assert is_palindrome(123) == False
assert is_palindrome(12321) == False

def test_single_digit():
assert is_palindrome(9) == True

def test_negative_number():
assert is_palindrome(-121) == False

def test_large_palindrome():
assert is_palindrome(12345678987654321) == True

def test_empty_input():
with pytest.raises(ValueError):
is_palindrome('')

def test_string_input():
with pytest.raises(ValueError):
is_palindrome('hello')

def test_float_input():
with pytest.raises(ValueError):
is_palindrome(12.21)

В этом примере функция is_palindrom() принимает число, преобразует его в строку и далее сравнивает эту строку с этой же строкой, но записанной в обратном порядке. Если они равны, возвращается True, в противном случае False. Тесты проверяют правильность работы функции для различных входных данных.

#задача #coding
Задача с кодом. ABACABADABACABA

Напишите функцию, которая будет принимать буквы английского алфавита и возвращать строки, придерживаясь шаблона «ABACABADABACABA».

Суть шаблона в следующем. Все начинается с первой буквы (А). Каждая следующая буква добавляется в центр, а предыдущий паттерн располагается по бокам от нее. Например:

A ➞ **A**
B ➞ A**B**A
C ➞ ABA**C**ABA
D ➞ ABACABA**D**ABACABA
E ➞ ABACABADABACABA**E**ABACABADABACABA
F ➞ ABACABADABACABAEABACABADABACABA**F**ABACABADABACABAEABACABADABACABA
И так далее

Примеры

ABA("A") ➞ "A"
ABA("B") ➞ "ABA"
ABA("E") ➞ "ABACABADABACABAEABACABADABACABA"

Решение на нашем сайте.

#задача #coding
Задача с кодом. Цифровое расстояние

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

digit_distance(234, 489) ➞ 12
# |2 - 4| + |3 - 8| + |4 - 9| = 2 + 5 + 5 = 12

Примечания:

- Оба числа всегда будут одинаковой длины.
- Число на позиции num2 будет больше или равно числу на позиции num1.

Примеры

digit_distance(121, 599) ➞ 19
digit_distance(12, 12) ➞ 0
digit_distance(10, 20) ➞ 1

Решение на нашем сайте.

#задача #coding
Задача для новичков

Напишите функцию calculate_even_sum(), которая принимает на вход список чисел и возвращает сумму всех четных чисел в этом списке.

Напишите также тесты с использованием pytest, чтобы проверить правильность работы функции на разных входных данных.

Свои варианты пишите в комментариях! Решение - сегодня вечером.

#задача #coding
Ответ к предыдущей задаче для новичков

# calculate_even_sum.py
def calculate_even_sum(numbers):
return sum(num for num in numbers if num % 2 == 0)

# test_calculate_even_sum.py
import pytest
from calculate_even_sum import calculate_even_sum

def test_positive_numbers():
assert calculate_even_sum([1, 2, 3, 4, 5]) == 6
assert calculate_even_sum([10, 20, 30, 40, 50]) == 150

def test_negative_numbers():
assert calculate_even_sum([-1, -2, -3, -4, -5]) == -6
assert calculate_even_sum([-10, -20, -30, -40, -50]) == -150

def test_mixed_numbers():
assert calculate_even_sum([-5, 10, -3, 8, 2]) == 20
assert calculate_even_sum([0, 0, 0, 0, 0]) == 0

def test_empty_list():
assert calculate_even_sum([]) == 0

def test_no_even_numbers():
assert calculate_even_sum([1, 3, 5, 7, 9]) == 0

В этом примере функция calculate_even_sum() принимает список целых чисел и возвращает сумму только четных чисел, проверяя для этого элементы списка на четность.Тесты проверяют правильность работы функции для различных входных данных.

#задача #coding
Задача с кодом. Самое длинное слово

Напишите функцию, которая будет находить самое длинное слово в предложении.

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

Небуквенные символы (апостроф, точка, запятая и т. п.) считаются частью слова, к которому прилегают.

Примеры

longest_word("Margaret's toy is a pretty doll.") 
➞ "Margaret's"

longest_word("A thing of beauty is a joy forever.")
➞ "forever."

longest_word("Forgetfulness is by all means powerless!")
➞ "Forgetfulness"

Решение на нашем сайте.

#задача #coding
Задача с кодом. Сложное упорядочивание

Упорядочивание слов в ступенчатом лексикографическом порядке происходит так:

1. Сперва слова упорядочиваются по длине
2. Затем слова одного размера упорядочиваются в словарном порядке (по алфавиту).

Например:

- «tray» < «trapped», потому что «tray» имеет длину 4, а «trapped» - 7
- «trap» < «tray», потому что у обоих слов длина 4, но «trap» идет перед «tray» в словаре.

Задание:

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

Примеры:

make_grlex(["small", "big"]) 
➞ ["big", "small"]

make_grlex(["cat", "ran", "for", "the", "rat"])
➞ ["cat", "for", "ran", "rat", "the"]

make_grlex(["this", "is", "a", "small", "test"])
➞ ["a", "is", "test", "this", "small"]

Решение на нашем сайте.

#задача #coding
Задача с кодом. Переворот

Число 6090609 имеет особенность: если его перевернуть вверх ногами (т. е. развернуть на 180 градусов), вы получите то же самое число — 6090609

Напишите функцию, которая будет принимать строку из цифр 0, 6, 9 и определять, будет ли образованное ими число после переворота тем же самым числом.

Примеры:

same_upsidedown("6090609") ➞ True

same_upsidedown("9669") ➞ False
# При перевороте превращается в 6996

same_upsidedown("69069069") ➞ True

Решение на нашем сайте.

#задача #coding
Задача с кодом. Расстояние между точками

Напишите функцию, которая будет принимать координаты двух точек (в двумерной декартовой системе координат) и возвращать расстояние между этими точками.

Координаты будут передаваться в функцию в виде строки из четырех чисел через запятую:

"x1,y1,x2,y2", где x1,y1 — координаты первой точки, а x2,y2 — координаты второй.

Примечание: если расстояние окажется числом с плавающей запятой, его нужно округлить до сотых (например, 2.34).

Примеры:
shortestDistance("1,1,2,1") ➞ 1
shortestDistance("1,1,3,1") ➞ 2
shortestDistance("-5,1,3,1") ➞ 8
shortestDistance("-5,2,3,1") ➞ 8.06

Решение на нашем сайте.

#задача #coding
Задача с кодом. Возраст отца и сына

Создайте функцию, которая будет принимать два аргумента: возраст отца f_age и возраст сына s_age. Функция должна высчитывать, сколько лет назад отец был или через сколько лет он будет в два раза старше сына.

Примеры:

age_difference(36, 7) ➞ 22
# Через 22 года отцу будет 58 лет, а сыну 29

age_difference(55, 30) ➞ 5
# 5 лет назад отцу было 50, а сыну 25

age_difference(42, 21) ➞ 0

Решение на нашем сайте.

#задача #coding
Задача с кодом. Сколько нулей?

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

Формула факториала: n! = 1 * 2 * 3 * ... * n

Подсказка: не нужно вычислять факториал. Постарайтесь найти другой способ определения количества нулей.

Примеры:

trailing_zeros(0) ➞ 0
# 0! = 1
# Нулей нет

trailing_zeros(6) ➞ 1
# 6! = 120
# 1 нуль в конце

trailing_zeros(1000) ➞ 249
# 1000! имеет 249 нулей в конце

Решение на нашем сайте.

#задача #coding
Задача с кодом. Список сумм чисел в списке

Нужно написать функцию. Она будет принимать список положительных целых чисел. Возвращаться будет список чисел, имеющий такую же длину, что и исходный. Формироваться он должен по следующему принципу.

Под индексом 0 в итоговом списке должна быть сумма чисел исходного списка без числа под индексом 0 в исходном. Под индексом 1 в итоговом списке должна быть сумма чисел исходного списка без числа под индексом 1 в исходном. И так далее.

Пример для списка [1, 2, 3, 4]
Итоговый список, по индексам:
0 ➞ 2+3+4 = 9
1 ➞ 1+3+4 = 8
2 ➞ 1+2+4 = 7
3 ➞ 1+2+3 = 6
Итоговый список — [9, 8, 7, 6]

Другие примеры:

lst_ele_sum([1, 2, 3, 2, 1]) ➞ [8, 7, 6, 7, 8]

lst_ele_sum([1, 2]) ➞ [2, 1]

lst_ele_sum([1, 2, 3]) ➞ [5, 4, 3]

lst_ele_sum([1, 2, 3, 4, 5]) ➞ [14, 13, 12, 11, 10]

lst_ele_sum([10, 20, 30, 40, 50, 60]) ➞ [200, 190, 180, 170, 160, 150]

Решение на нашем сайте.

#задача #coding