TheAlgorithms/Python · error · TypeError

Input value of [number={number}] must be an integer

Error message

Input value of [number={number}] must be an integer

What it means

Raised by juggler_sequence in maths/juggler_sequence.py when number is not an int. The juggler sequence iterates n -> floor(sqrt(n)) for even n and floor(n^(3/2)) for odd n until reaching 1, and the parity branch (number % 2) plus the exact-integer invariant only make sense for ints; a TypeError with the offending value in the message is raised before the loop. Note the check is isinstance-only, so 6.0 fails even though it equals an integer.

Source

Thrown at maths/juggler_sequence.py:44

    [3, 5, 11, 36, 6, 2, 1]
    >>> juggler_sequence(5)
    [5, 11, 36, 6, 2, 1]
    >>> juggler_sequence(10)
    [10, 3, 5, 11, 36, 6, 2, 1]
    >>> juggler_sequence(25)
    [25, 125, 1397, 52214, 228, 15, 58, 7, 18, 4, 2, 1]
    >>> juggler_sequence(6.0)
    Traceback (most recent call last):
        ...
    TypeError: Input value of [number=6.0] must be an integer
    >>> juggler_sequence(-1)
    Traceback (most recent call last):
        ...
    ValueError: Input value of [number=-1] must be a positive integer
    """
    if not isinstance(number, int):
        msg = f"Input value of [number={number}] must be an integer"
        raise TypeError(msg)
    if number < 1:
        msg = f"Input value of [number={number}] must be a positive integer"
        raise ValueError(msg)
    sequence = [number]
    while number != 1:
        if number % 2 == 0:
            number = math.floor(math.sqrt(number))
        else:
            number = math.floor(
                math.sqrt(number) * math.sqrt(number) * math.sqrt(number)
            )
        sequence.append(number)
    return sequence


if __name__ == "__main__":
    import doctest

View on GitHub (pinned to f5988cc097)

Solutions

  1. Convert to int at the call site: juggler_sequence(int(number)).
  2. Validate integrality first if silently truncating is wrong: if number != int(number): raise.
  3. Convert numpy scalars with int(number) since np.int64 may fail the isinstance check.

Example fix

// before
seq = juggler_sequence(n)  # n is 6.0 from float math

// after
seq = juggler_sequence(int(n))
Defensive patterns

Strategy: type-guard

Validate before calling

if not isinstance(number, int):
    if isinstance(number, float) and number.is_integer():
        number = int(number)
    else:
        raise TypeError(f"need integer, got {number!r}")
seq = juggler_sequence(number)

Type guard

def is_int_value(v) -> bool:
    return isinstance(v, int) or (isinstance(v, float) and v.is_integer())

Try / catch

try:
    seq = juggler_sequence(n)
except TypeError:
    seq = juggler_sequence(int(n))

Prevention

When it happens

Trigger: Calling juggler_sequence(6.0), juggler_sequence('9'), or juggler_sequence(3+0j). Any non-int triggers the raise; True/False pass (bool subclasses int) and True yields [1].

Common situations: Numeric results from float math or numpy scalars flowing in unconverted; JSON-parsed numbers; generators producing floats after division.

Related errors


AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14). Data as JSON: /api/errors/aa429a0e41f7cc08. Report an issue: GitHub.