Извлечение целого числа из произвольной строки

Сначала проверьте JSON с целочисленным value, затем ищите первое целое число в обычном тексте. Явно определите приоритет форматов и поведение при нескольких числах.

Короткий ответ

Что ответить на собеседовании

Сначала проверьте JSON с целочисленным value, затем ищите первое целое число в обычном тексте. Явно определите приоритет форматов и поведение при нескольких числах.

Подробный разбор

Ответ с пояснениями

Условие

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

  1. Прямое текстовое представление (например, "42" – символы "4" и "2").
  2. JSON‑объект, где есть поле "value", содержащее число (например, "{"value": 42}"). Строка может также включать произвольный «мусор» – любые другие символы. Если извлечь число не удалось, функция должна вернуть None. Бонус: оформить решение в объектно‑ориентированном стиле, используя полиморфизм для разных форматов входных данных.

Ответ

Сначала проверьте JSON с целочисленным value, затем ищите первое целое число в обычном тексте. Явно определите приоритет форматов и поведение при нескольких числах.

Ниже корректный JSON считается самостоятельным форматом: посторонние поля не используются как запасной источник числа.

import json
import re

def extract_integer(text):
    try:
        parsed = json.loads(text)
    except (json.JSONDecodeError, ValueError):
        match = re.search(r'[+-]?[0-9]+', text)
        if not match:
            return None
        try:
            return int(match.group())
        except ValueError:
            return None
    if type(parsed) is int:
        return parsed
    if isinstance(parsed, dict) and type(parsed.get('value')) is int:
        return parsed['value']
    return None

Булевы значения не принимаются за числа. Для бонуса выделите JsonParser и TextIntegerParser с общим методом parse, различая «формат не подходит» и «формат распознан, числа нет». JSON, встроенный в мусорный текст, требует отдельного правила выделения границ.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее