Задача. Напишите функцию, которая принимает на вход индекс числа в ряде Фибоначчи (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, мы получим сообщение о том, что код работает так, как мы ожидали. В данном случае мы по невнимательности допустили ошибку в тесте. На практике ошибки будут в коде, а тесты будут требовать, чтобы тестируемый участок кода работал так, как от него требуется.

Комментариев нет:
Отправить комментарий