Python · 43 строк
Клиент вводит сумму в рублях и видит, сколько валюты получит и до какого времени держим курс. Курсы приходят из внутреннего сервиса, кэшируем на 60 секунд. Премиум-клиентам курс лучше на 0,3 %.
Серверы работают в UTC, сервис курсов иногда отвечает 503 по 10–20 минут во время перезапуска. Отметьте строки с ошибками.
В работе: Экран «Обмен валюты» в Альфа-Онлайн: котировка обновляется при каждом изменении суммы.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Альфа-Банка: обмен валюты в приложении. Условие пересказано своими словами.
Давали на собеседовании?
import loggingimport timefrom datetime import datetime, timedeltaimport requestslog = logging.getLogger(__name__)RATES_URL = "https://fx.internal.alfa/api/v2/rates"API_TOKEN = "fx-prod-7f3c91e2b4d84a0c"CACHE_TTL = 60_cache = {"rates": None, "loaded_at": 0.0}def load_rates():resp = requests.get(RATES_URL, headers={"Authorization": f"Bearer {API_TOKEN}"})if resp.status_code != 200:log.error("fx rates failed: %s, token=%s", resp.status_code, API_TOKEN)return _cache["rates"]return {r["pair"]: r for r in resp.json()["rates"]}def get_rates():if time.time() - _cache["loaded_at"] > CACHE_TTL:_cache["rates"] = load_rates()_cache["loaded_at"] = time.time()return _cache["rates"]def quote_exchange(amount_rub: float, pair: str, client_tier: str) -> dict:rate = get_rates()[pair]sell = float(rate["sell"])if client_tier == "premium":sell = sell - 0.5received = round(amount_rub / sell, 2)valid_until = datetime.now() + timedelta(minutes=10)return {"pair": pair,"rate": sell,"amount_rub": amount_rub,"received": received,"text": f"Курс {sell} ₽ держим до {valid_until:%H:%M} МСК",}