Задача. Напишите функцию, которая принимает на вход индекс числа в ряде Фибоначчи (0, 1, 1, 2, 3, 5, 8, 13, 21, ... - последующее число равно сумме двух предыдущих), а выводит список чисел этого ряда с 0 до указанного индекса включительно.
Пример:
get_fibonacci_list(0) вернет [0]
get_fibonacci_list(1) вернет [0, 1]
get_fibonacci_list(3) вернет [0, 1, 1, 2]
Решение:
Создадим файл fib.py:
Здесь функция get_fibobacci() выводит число ряда Фибоначчи по указанному индексу. Обратите внимание, что здесь используется рекурсивный вызов - т.е. функция вызывает саму себя.
Теперь нам нужно проверить работу кода. Для этого используем встроенный в python модуль unittest. Создадим файл test_fib.py:
В тесте 1 мы умышленно допустили ошибку, и вот, что получили при запуске теста в консоли:
Исправив тест 1, мы получим сообщение о том, что код работает так, как мы ожидали. В данном случае мы по невнимательности допустили ошибку в тесте. На практике ошибки будут в коде, а тесты будут требовать, чтобы тестируемый участок кода работал так, как от него требуется.
Пример:
get_fibonacci_list(0) вернет [0]
get_fibonacci_list(1) вернет [0, 1]
get_fibonacci_list(3) вернет [0, 1, 1, 2]
Решение:
Создадим файл fib.py:
# -*- coding:utf-8 -*- def get_fibonacci(index): if index == 0: return 0 if index == 1: return 1 return get_fibonacci(index-1) + get_fibonacci(index-2) def get_fibonacci_list(last_index): if last_index < 0: return False list = [] for index in xrange(last_index+1): list.append(get_fibonacci(index)) return list
Здесь функция get_fibobacci() выводит число ряда Фибоначчи по указанному индексу. Обратите внимание, что здесь используется рекурсивный вызов - т.е. функция вызывает саму себя.
Теперь нам нужно проверить работу кода. Для этого используем встроенный в python модуль unittest. Создадим файл test_fib.py:
# -*- coding:utf-8 -*- import unittest # Импортируем наш файл, где расположена тестируемая функция import fib class Test(unittest.TestCase): # Удобное для вас название Теста 1 def test_get_fibbonaci(self): self.assertEqual(fib.get_fibonacci_list(0), [0]) self.assertEqual(fib.get_fibonacci_list(1), [0, 1]) self.assertEqual(fib.get_fibonacci_list(2), [0, 1, 1]) self.assertEqual(fib.get_fibonacci_list(3), [0, 1, 1, 2]) self.assertEqual(fib.get_fibonacci_list(4), [0, 1, 1, 2, 5]) # Тест 2, в котором мы пробуем передать отрицательные значения def test_get_fibbonaci_negative_vals(self): self.assertEqual(fib.get_fibonacci_list(-5), False) self.assertEqual(fib.get_fibonacci_list(-10), True) if __name__ == "__main__": unittest.main()
В тесте 1 мы умышленно допустили ошибку, и вот, что получили при запуске теста в консоли:
Исправив тест 1, мы получим сообщение о том, что код работает так, как мы ожидали. В данном случае мы по невнимательности допустили ошибку в тесте. На практике ошибки будут в коде, а тесты будут требовать, чтобы тестируемый участок кода работал так, как от него требуется.
Комментариев нет:
Отправить комментарий