Precondition and Postcondition Examples in python

1. Argument-related Issue (Precondition Violation): This occurs when the function is called with incorrect arguments, violating its preconditions.
Precondition: Conditions that must be true before the function executes.
Postcondition: Once the function executes, certain guarantees (postconditions) should hold true.
2. Function Logic Issue (Postcondition Violation):
This happens when the function executes but does not produce the expected results, violating its postconditions.
Precondition: The function executes without error, but the result may not be as expected.
Postcondition: The expected guarantees after the function execution are not met.
3. Return Value or Usage Issue:
This occurs when the function returns incorrect values or when the returned values are not used properly.
Precondition: The function executes without error, and the return value is generated.
Postcondition: The return value should be correct, and it should be used appropriately in the rest of the program.


Example Code:


# Argument-related Issue (Precondition Violation)
def calculate_area(length, width):
    return length * width

# Calling the function with incorrect arguments
# Expected: Length and width must be numeric values
area = calculate_area("5", 3)
print("Area:", area)

Output (Argument-Related Issue Explaination):


TypeError: can't multiply sequence by non-int of type 'str'


Explanation: The function 'calculate_are'a expects numeric values for 'length' and 'width', but it's called with a string argument for 'length', violating the precondition.

# Function Logic Issue (Postcondition Violation)
def calculate_area(length, width):
    # Incorrect calculation
    return length + width

length = 5
width = 3
area = calculate_area(length, width)
print("Area:", area)

Output (Function Logic Issue Explanation):


Area: 8

Explanation: The function 'calculate_area' is intended to calculate the area of a rectangle, but it adds 'length'and 'width' instead of multiplying them, violating the postcondition.

# Return Value or Usage Issue
def calculate_area(length, width):
    return length * width

length = 5
width = 3
area = calculate_area(length, width)
# Incorrect usage of the return value
# Expected: Printing the area
print("Area calculated:", area[0])

Output (Return Value or Usage Issue Explanation):

TypeError: 'int' object is not subscriptable

Explanation: The return value from 'calculate_area' is an integer, but the code tries to access it as if it were a list or tuple, leading to a TypeError.



 See example of making a precondition explicit to help debugging:

def countdown(n):
    # precondition: n must be non-negative
    assert n >= 0, 'Invalid input; n must be non-negative'
    if n == 0:
        print('Blastoff!')
    else:
        print(n)
        countdown(n-1)

countdown(-4)

The above code uses Python's assert statement to implement a precondition about the input parameter n.

The assert statement is mentioned in our textbook in a later chapter (16.5), but it is not required for this course.

Stephen Olubanji Akinpelu

Previous Post Next Post