{"record":{"id":"9a993eed59e714a1","repo":"TheAlgorithms/Python","slug":"input-value-of-number-number-must-be-a-positiv","errorCode":null,"errorMessage":"Input value of [number={number}] must be a positive integer","messagePattern":"Input value of \\[number=(.+?)\\] must be a positive integer","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"maths/juggler_sequence.py","lineNumber":47,"sourceCode":"    >>> juggler_sequence(10)\n    [10, 3, 5, 11, 36, 6, 2, 1]\n    >>> juggler_sequence(25)\n    [25, 125, 1397, 52214, 228, 15, 58, 7, 18, 4, 2, 1]\n    >>> juggler_sequence(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    >>> juggler_sequence(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=-1] must be a positive integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 1:\n        msg = f\"Input value of [number={number}] must be a positive integer\"\n        raise ValueError(msg)\n    sequence = [number]\n    while number != 1:\n        if number % 2 == 0:\n            number = math.floor(math.sqrt(number))\n        else:\n            number = math.floor(\n                math.sqrt(number) * math.sqrt(number) * math.sqrt(number)\n            )\n        sequence.append(number)\n    return sequence\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n","sourceCodeStart":29,"sourceCodeEnd":64,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/maths/juggler_sequence.py#L29-L64","documentation":"Raised by juggler_sequence in maths/juggler_sequence.py when number is an int but less than 1. The sequence terminates when number reaches 1; starting at 0 or a negative value would never reach 1 (floor(sqrt(n)) for n <= 0 stays <= 0 or errors), causing an infinite loop. The ValueError guard sits after the type check and before sequence construction.","triggerScenarios":"Calling juggler_sequence(0) or juggler_sequence(-1). The 'if number < 1' branch raises immediately; 1 itself is valid and returns [1].","commonSituations":"Looping over ranges that start at 0; offsets/subtractions producing 0 or negatives; user-supplied indices not bounded to >= 1.","solutions":["Start iteration ranges at 1: for n in range(1, limit + 1).","Bound user input: reject or clamp values < 1 before calling.","If 0 must be handled, decide a policy (skip or raise your own error) rather than passing it through."],"exampleFix":"// before\nseq = juggler_sequence(start - 1)  # start=1 -> juggler_sequence(0)\n\n// after\nstart = max(1, start)\nseq = juggler_sequence(start)","handlingStrategy":"validation","validationCode":"if number < 1:\n    raise ValueError(f\"juggler_sequence needs number >= 1, got {number}\")\nseq = juggler_sequence(number)","typeGuard":"def is_positive_int(v) -> bool:\n    return isinstance(v, int) and not isinstance(v, bool) and v >= 1","tryCatchPattern":"try:\n    seq = juggler_sequence(n)\nexcept ValueError:\n    n = max(1, n)\n    seq = juggler_sequence(n)","preventionTips":["Start enumeration ranges at 1","Bound user indices to >= 1 before calling"],"tags":["math","sequences","juggler","valueerror","infinite-loop-prevention"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}