def find_second_max(array): # Проверяем входные данные if array and len(array) > 0: # Максимальное значение - первое значение my_max = array[0] # Второе по величине число пока не найдено my_second_max = None # Проходим все элементы массива for i in array: # Если текущий элемент массива больше максимального if i > my_max: # Бывшее до сих пор максимальное значение - становится вторым по величине my_second_max = my_max # Текущий элемент становится максимальным значением my_max = i # Если текущий элемент массива меньше максималььного elif i < my_max: # Если второе по величине значение еще не найдено if my_second_max is None: # Текущий элемент становится вторым по величине значением my_second_max = i # Если второе по величине значение уже определено else: # Если текущий элемент больше текущего второго по величине значения if i > my_second_max: # Текущий элемент становится вторым по величине значением my_second_max = i # Вариант когда текущий элемент равен минимальному значению, мы не рассматриваем, # т.к. он никак не влияет на найденные значения return my_second_max # Если массив пустой или вообще не имеет значения return None ################################################# def verifier(test_name, actual, expected): print(test_name) if actual != expected: print("=======> FAILED! <=======") print(f"Got value <{actual}>") print(f"Expected value is <{expected}>") else: print("PASSED") print() second_max_tests = [([1, 6, 3, 6, 54, 3, 6, 3, 1, 2, 8], 8), ([2, 2, 2, 2, 2, 2, 2, 2, 2], None), ([2, 2, 2, 2, 2, 2, 2, 2, 4], 2), ([], None), ([1, 0, -1], 0), ([4, -7, 6, 23, -5, 23, -4, 5, 7, 100], 23)] for i in range(len(second_max_tests)): verifier(f"Second max test {i+1}", find_second_max(second_max_tests[i][0]), second_max_tests[i][1])