Advertisement
MathQ_

Untitled

Apr 22nd, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. import unittest
  2. import sys
  3. import io
  4.  
  5.  
  6. class SimpleNumericTestCase(unittest.TestCase):
  7.     def test_simple_numbers(self):
  8.         self.assertAlmostEqual(calculate_distance(1), 10.000000)
  9.         self.assertAlmostEqual(calculate_distance(2), 11.000000)
  10.         self.assertAlmostEqual(calculate_distance(120), 842809.716526, places=6)
  11.  
  12.     def test_invalid_value(self):
  13.         self.assertRaises(TypeError, calculate_distance, "haha")
  14.  
  15.  
  16. class GetNumberTestCase(unittest.TestCase):
  17.     def setUp(self) -> None:
  18.         self.original_in = sys.stdin
  19.         self.original_out = sys.stdout
  20.         sys.stdout = io.StringIO()
  21.  
  22.     def tearDown(self) -> None:
  23.         sys.stdin = self.original_in
  24.         sys.stdout = self.original_out
  25.  
  26.     def test_simple(self):
  27.         sys.stdin = io.StringIO('120\n')
  28.         main()
  29.         self.assertEqual(842809.716526, get_number())
  30.  
  31.     def test_invalid(self):
  32.         sys.stdin = io.StringIO('haha\n')
  33.         main()
  34.         self.assertEqual(ValueError, get_number())
  35.  
  36.  
  37. def calculate_distance(number: int) -> float:
  38.     distance = 10
  39.     for _ in range(number - 1):
  40.         distance += distance * 0.1
  41.     return distance
  42.  
  43.  
  44. def get_number():
  45.     return int(input())
  46.  
  47.  
  48. def main() -> None:
  49.     try:
  50.         n = get_number()
  51.         dist = calculate_distance(n)
  52.         print(f'{dist:.6f}')
  53.     except ValueError:
  54.         print('Это не число')
  55.     except InvalidNumber:
  56.         print('Число должно быть в диапазоне [1; 120]')
  57.  
  58.  
  59. if __name__ == '__main__':
  60.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement