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
- Convert to int at the call site: juggler_sequence(int(number)).
- Validate integrality first if silently truncating is wrong: if number != int(number): raise.
- 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
- Convert numpy scalars and whole floats to int before number-theory calls
- Keep loop counters as native ints
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
- number must be integer and greater than zero
- Input value must be a positive integer. Input value: {number
- Input value of [number={number}] must be a positive integer
- mod inverse of {a!r} and {m!r} does not exist
- factorial() not defined for negative values
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/aa429a0e41f7cc08.
Report an issue: GitHub.