Finding the first even number

Each version of find_first_even in Listing 1 receives a list of integers. The function should print the first even number and stop. If the list has no even number, it should print No even number found.

Listing 1: Alternative implementations of the find_first_even function. The function finds and prints the first even number in a finite list, or prints No even number found. if the list contains no even number (Question 1).
(a)
def find_first_even(numbers):
    for number in numbers[:4]:
        if number % 2 == 0:
            print(number)
            # Stop after printing a match.
            return

    print("No even number found.")
(b)
def find_first_even(numbers):
    for number in numbers:
        if number % 2 == 0:
            print(number)
            # Stop after printing a match.
            return

    print("No even number found.")
(c)
def find_first_even(numbers):
    for i in range(1, len(numbers)):
        if numbers[i] % 2 == 0:
            print(numbers[i])
            # Stop after printing a match.
            return

    print("No even number found.")
(d)
def find_first_even(numbers):
    for number in numbers:
        if number % 2 != 0:
            print(number)
            # Stop after printing a match.
            return

    print("No even number found.")

The list can have any length. Which implementation meets the rule?

  • len(items) returns the number of items, without changing the collection. len([8, 3]) is 2; len([]) is 0. For nested lists, it counts the outer items only.
  • range(start, stop, step) supplies integers from start toward, but excluding, stop.
    • step defaults to 1, and range(stop) starts at 0.
    • list(range(2, 7, 2)) is [2, 4, 6]; list(range(5, 1, -2)) is [5, 3].
    • A range is empty when the step cannot reach the stop; a zero step raises ValueError.
  • list collects the supplied values in a new list.