🧠 Python-хитрая задача + решение
🖍️ Условие:
У тебя есть список логов (user, login/logout).
Найди тех, кто зашел, но не вышел.
📜 Пример:
________
💻 Решение:
🛠Ответ:"carol"
#Python #Challenge #DevPuzzle
@python_job_interview
🖍️ Условие:
У тебя есть список логов (user, login/logout).
Найди тех, кто зашел, но не вышел.
📜 Пример:
logs = [
("alice", "login"),
("bob", "login"),
("alice", "logout"),
("dave", "login"),
("bob", "logout"),
("carol", "login"),
("dave", "logout")
]
________
💻 Решение:
from collections import defaultdict
def find_stuck_users(logs):
counter = defaultdict(int)
for user, action in logs:
if action == "login":
counter[user] += 1
elif action == "logout":
counter[user] -= 1
return sorted([user for user, count in counter.items() if count > 0])
🛠Ответ:
#Python #Challenge #DevPuzzle
@python_job_interview
Forwarded from Python/ django
Python-баг, который выглядит безобидно… но ломает логику 👇
Ожидание: оба orange удалятся.
Реальность: один orange остаётся.
Почему так происходит?
Ты изменяешь список во время итерации.
После удаления элементы сдвигаются, и цикл пропускает следующий элемент.
Это классический сценарий продакшн-багов:
• код выглядит правильно
• тесты могут пройти
• но данные обрабатываются неправильно
Правильный вариант:
Мораль:
Изменяешь коллекцию во время обхода -Deploy first. Pray later.
#junior #python
@pythonl
fruits = ["apple", "lime", "orange",
"pineapple", "orange"]
for f in fruits:
if f == "orange":
fruits.remove(f)
print(fruits)
Ожидание: оба orange удалятся.
Реальность: один orange остаётся.
Почему так происходит?
Ты изменяешь список во время итерации.
После удаления элементы сдвигаются, и цикл пропускает следующий элемент.
Это классический сценарий продакшн-багов:
• код выглядит правильно
• тесты могут пройти
• но данные обрабатываются неправильно
Правильный вариант:
fruits = [f for f in fruits if f != "orange"]
Мораль:
Изменяешь коллекцию во время обхода -Deploy first. Pray later.
#junior #python
@pythonl