Advertisement
MathQ_

Untitled

Apr 22nd, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.06 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.  
  11.     def test_invalid_value(self):
  12.         self.assertRaises(TypeError, calculate_distance, "haha")
  13.  
  14.  
  15. class GetNumberTestCase(unittest.TestCase):
  16.     def setUp(self) -> None:
  17.         self.original_in = sys.stdin
  18.         self.original_out = sys.stdout
  19.         sys.stdout = io.StringIO()
  20.  
  21.     def tearDown(self) -> None:
  22.         sys.stdin = self.original_in
  23.         sys.stdout = self.original_out
  24.  
  25.     def test_simple(self):
  26.         sys.stdin = io.StringIO('120\n')
  27.         main()
  28.         self.assertEqual('842809.716526\n', sys.stdout.getvalue())
  29.  
  30.     def test_invalid(self):
  31.         sys.stdin = io.StringIO('haha\n')
  32.         main()
  33.         self.assertEqual('Это не число\n', sys.stdout.getvalue())
  34.  
  35.     def test_wrong_number_minimal(self) -> None:
  36.         sys.stdin = io.StringIO('-1\n')
  37.         main()
  38.         self.assertEqual('Число должно быть в диапазоне [1; 120]', sys.stdout.getvalue())
  39.  
  40.     def test_wrong_number_maximal(self) -> None:
  41.         sys.stdin = io.StringIO('150\n')
  42.         main()
  43.         self.assertEqual('Число должно быть в диапазоне [1; 120]', sys.stdout.getvalue())
  44.  
  45.  
  46. class InvalidNumber(RuntimeError):
  47.     pass
  48.  
  49.  
  50. def get_number():
  51.     return int(input())
  52.  
  53.  
  54. def calculate_distance(number: int) -> float:
  55.     if number < 1 or number > 120:
  56.         raise InvalidNumber
  57.     distance = 10
  58.     for _ in range(number - 1):
  59.         distance += distance * 0.1
  60.     return distance
  61.  
  62.  
  63. def main() -> None:
  64.     try:
  65.         n = get_number()
  66.         dist = calculate_distance(n)
  67.         print(f'{dist:.6f}')
  68.     except ValueError:
  69.         print('Это не число')
  70.     except InvalidNumber:
  71.         print('Число должно быть в диапазоне [1; 120]')
  72.  
  73.  
  74. if __name__ == '__main__':
  75.     main()
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement