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

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

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

# 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
Задача с кодом. Подсчитываем одинокие единицы

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

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

Примеры:

count_lone_ones(101) ➞ 2
count_lone_ones(1191) ➞ 1
count_lone_ones(1111) ➞ 0
count_lone_ones(462) ➞ 0

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

#задача #coding