from typing import Tuple, List def n31(a: int) -> Tuple[List[int], int]: """ Returns the Collatz sequence and its length of any postiver integer. >>> n31(4) ([4, 2, 1], 3) """ if not isinstance(a, int): raise TypeError("Must be int, not {0}".format(type(a).__name__)) if a < 1: raise ValueError("Given integer must be greater than 1, not {0}".format(a)) path = [a] while a != 1: if a % 2 == 0: a = a // 2 else: a = 3 * a + 1 path += [a] return path, len(path) def main(): num = 4 path, length = n31(num) print( "The Collatz sequence of {0} took {1} steps. \nPath: {2}".format( num, length, path ) ) if __name__ == "__main__": main()