In [ ]:
import typing

def addOne(x: int) -> int:
    return x + 1

def addOneButStrings(x: str) -> str:
    return x + "1"

def repeater(
    f: typing.Callable,
    x: typing.Any,
    n: int
) -> typing.Any:
    r = x
    while n > 0:
        r = f(r)
        n = n - 1
    return r

#print(repeater(addOne, -1, 7))

def repeaterBreaker(x: str) -> int:
    return len(x)

def repeaterDiv0(x: int) -> int:
    return 1//x

def repeaterAssert(x: int) -> int:
    assert x > 0
    return x - 1

#print(repeater(repeaterBreaker, "foo", 2))
#print(repeater(repeaterDiv0, 2, 2))
print(repeater(repeaterAssert, 1, 2))
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [7], in <cell line: 34>()
     30     return x - 1
     32 #print(repeater(repeaterBreaker, "foo", 2))
     33 #print(repeater(repeaterDiv0, 2, 2))
---> 34 print(repeater(repeaterAssert, 1, 2))

Input In [7], in repeater(f, x, n)
     14 r = x
     15 while n > 0:
---> 16     r = f(r)
     17     n = n - 1
     18 return r

Input In [7], in repeaterAssert(x)
     28 def repeaterAssert(x: int) -> int:
---> 29     assert x > 0
     30     return x - 1

AssertionError: