In [2]:
def checkWithin(result: float, expected: float, tolerance: float, name: str) -> None:
    assert abs(result - expected) < tolerance, name
    
checkWithin(0.3 - 0.2, 0.1, 0.001, "Floating-point math")
checkWithin(0.3 - 0.2, 0.1, 0, "Too intolerant!")
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [2], in <cell line: 5>()
      2     assert abs(result - expected) < tolerance, name
      4 checkWithin(0.3 - 0.2, 0.1, 0.001, "Floating-point math")
----> 5 checkWithin(0.3 - 0.2, 0.1, 0, "Too intolerant!")

Input In [2], in checkWithin(result, expected, tolerance, name)
      1 def checkWithin(result: float, expected: float, tolerance: float, name: str) -> None:
----> 2     assert abs(result - expected) < tolerance, name

AssertionError: Too intolerant!
In [4]:
from math import sqrt

def hypotenuse(a: float, b: float) -> float:
    return sqrt(a**2 + b**2)

print(hypotenuse(4, 5) > 7)
False
In [ ]:
def pos(x: float) -> float:
    """
    If x is not zero, return the absolute value of x.
    Otherwise, return 1.
    """
    if x < 0:
        return -x
    elif x == 0:
        return 1
    else: # x > 0
        return x
In [10]:
def clamp(x: float, minVal: float, maxVal: float) -> float:
    """
    If x is between minVal and maxVal, return x. Otherwise return minVal if x
    is below minVal, or maxVal if it's above maxVal.
    """
    assert minVal <= maxVal, "minVal cannot be greater than maxVal"
    print("Before x < minVal")
    if x < minVal:
        print("In x < minVal")
        return minVal
    print("Between x < minVal and x > maxVal")
    if x > maxVal:
        print("In x > maxVal")
        return maxVal
    print("After x > maxVal")
    return x
    print("After return")

clamp(42, 0, 1)
Before x < minVal
Between x < minVal and x > maxVal
In x > maxVal
Out[10]:
1
In [11]:
def clamp(x: float, minVal: float, maxVal: float) -> float:
    """
    If x is between minVal and maxVal, return x. Otherwise return minVal if x
    is below minVal, or maxVal if it's above maxVal.
    """
    assert minVal <= maxVal, "minVal cannot be greater than maxVal"
    print("Before x < minVal")
    if x < minVal:
        print("In x < minVal")
        x = minVal
    print("Between x < minVal and x > maxVal")
    if x > maxVal:
        print("In x > maxVal")
        x = maxVal
    print("After x > maxVal")
    return x
    print("After return")

clamp(42, 0, 1)
Before x < minVal
Between x < minVal and x > maxVal
In x > maxVal
After x > maxVal
Out[11]:
1
In [14]:
x = hypotenuse(4, 5) > 7
print(x)
False
In [16]:
def clamp(x: float, minVal: float, maxVal: float) -> float:
    """
    If x is between minVal and maxVal, return x. Otherwise return minVal if x
    is below minVal, or maxVal if it's above maxVal.
    """
    assert minVal <= maxVal, "minVal cannot be greater than maxVal"
    print("A")
    if x >= minVal:
        print("B")
        if x <= maxVal:
            print("C")
            # x >= minVal and x <= maxVal
            return x
        else:
            print("D")
            return maxVal
        print("E")
    else:
        print("F")
        return minVal

clamp(42, 0, 1)
A
B
D
Out[16]:
1