Advertisement
funcelot

int_to_russian.py

Feb 12th, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.14 KB | None | 0 0
  1. def to_russian_string(value: int) -> str:
  2.     def get_digits0(s1: int) -> str:
  3.         digits = ("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
  4.         return digits[s1]
  5.  
  6.     def get_digits11(s1: int) -> str:
  7.         digits = ("", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
  8.         return digits[s1]
  9.  
  10.     def get_digits20(s2: int, s1: int) -> str:
  11.         digits = ("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
  12.         if s2 == 0:
  13.             return get_digits0(s1)
  14.         if s1 == 0:
  15.             return digits[s2]
  16.         if s2 == 1:
  17.             return get_digits11(s1)
  18.         return digits[s2] + " " + get_digits0(s1)
  19.  
  20.     def get_digits100(s3: int, s2: int, s1: int) -> str:
  21.         digits = ("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
  22.         if s3 == 0:
  23.             if s2 == 0 and s1 == 0:
  24.                 return "ноль"
  25.             return get_digits20(s2, s1)
  26.         if s2 == 0 and s1 == 0:
  27.             return digits[s3]
  28.         return digits[s3] + " " + get_digits20(s2, s1)
  29.  
  30.     s3 = value
  31.  
  32.     if 0 <= s3 <= 999:  # 925
  33.         s2 = s3 % 100  # 25
  34.         s1 = s2 % 10  # 5
  35.         return get_digits100((s3 - s2) // 100, (s2 - s1) // 10, s1)
  36.  
  37.     raise ValueError("value must be in range 0 - 999")
  38.  
  39.  
  40. values1 = (0, 1, 9, 10, 11, 19, 20, 21, 29, 90, 91, 100, 101, 111, 120, 121, 925, 1000, -1)
  41.  
  42.  
  43. def test_to_russian_string_0():
  44.     str = to_russian_string(values1[0])
  45.     assert len(str) > 0
  46.     assert str.count(" ") == 0
  47.     assert str == "ноль"
  48.  
  49.  
  50. def test_to_russian_string_1():
  51.     str = to_russian_string(values1[1])
  52.     assert len(str) > 0
  53.     assert str.count(" ") == 0
  54.     assert str == "один"
  55.  
  56.  
  57. def test_to_russian_string_2():
  58.     str = to_russian_string(values1[2])
  59.     assert len(str) > 0
  60.     assert str.count(" ") == 0
  61.     assert str == "девять"
  62.  
  63.  
  64. def test_to_russian_string_3():
  65.     str = to_russian_string(values1[3])
  66.     assert len(str) > 0
  67.     assert str.count(" ") == 0
  68.     assert str == "десять"
  69.  
  70.  
  71. def test_to_russian_string_4():
  72.     str = to_russian_string(values1[4])
  73.     assert len(str) > 0
  74.     assert str.count(" ") == 0
  75.     assert str == "одиннадцать"
  76.  
  77.  
  78. def test_to_russian_string_5():
  79.     str = to_russian_string(values1[5])
  80.     assert len(str) > 0
  81.     assert str.count(" ") == 0
  82.     assert str == "девятнадцать"
  83.  
  84.  
  85. def test_to_russian_string_6():
  86.     str = to_russian_string(values1[6])
  87.     assert len(str) > 0
  88.     assert str.count(" ") == 0
  89.     assert str == "двадцать"
  90.  
  91.  
  92. def test_to_russian_string_7():
  93.     str = to_russian_string(values1[7])
  94.     assert len(str) > 0
  95.     assert str.count(" ") == 1
  96.     assert str == "двадцать один"
  97.  
  98.  
  99. def test_to_russian_string_8():
  100.     str = to_russian_string(values1[8])
  101.     assert len(str) > 0
  102.     assert str.count(" ") == 1
  103.     assert str == "двадцать девять"
  104.  
  105.  
  106. def test_to_russian_string_9():
  107.     str = to_russian_string(values1[9])
  108.     assert len(str) > 0
  109.     assert str.count(" ") == 0
  110.     assert str == "девяносто"
  111.  
  112.  
  113. def test_to_russian_string_10():
  114.     str = to_russian_string(values1[10])
  115.     assert len(str) > 0
  116.     assert str.count(" ") == 1
  117.     assert str == "девяносто один"
  118.  
  119.  
  120. def test_to_russian_string_11():
  121.     str = to_russian_string(values1[11])
  122.     assert len(str) > 0
  123.     assert str.count(" ") == 0
  124.     assert str == "сто"
  125.  
  126.  
  127. def test_to_russian_string_12():
  128.     str = to_russian_string(values1[12])
  129.     assert len(str) > 0
  130.     assert str.count(" ") == 1
  131.     assert str == "сто один"
  132.  
  133.  
  134. def test_to_russian_string_13():
  135.     str = to_russian_string(values1[13])
  136.     assert len(str) > 0
  137.     assert str.count(" ") == 1
  138.     assert str == "сто одиннадцать"
  139.  
  140.  
  141. def test_to_russian_string_14():
  142.     str = to_russian_string(values1[14])
  143.     assert len(str) > 0
  144.     assert str.count(" ") == 1
  145.     assert str == "сто двадцать"
  146.  
  147.  
  148. def test_to_russian_string_15():
  149.     str = to_russian_string(values1[15])
  150.     assert len(str) > 0
  151.     assert str.count(" ") == 2
  152.     assert str == "сто двадцать один"
  153.  
  154.  
  155. def test_to_russian_string_16():
  156.     str = to_russian_string(values1[16])
  157.     assert len(str) > 0
  158.     assert str.count(" ") == 2
  159.     assert str == "девятьсот двадцать пять"
  160.  
  161.  
  162. def test_to_russian_string_17():
  163.     fail = False
  164.     try:
  165.         str = to_russian_string(values1[17])
  166.     except ValueError:
  167.         fail = True
  168.     assert fail
  169.  
  170.  
  171. def test_to_russian_string_18():
  172.     fail = False
  173.     try:
  174.         str = to_russian_string(values1[18])
  175.     except ValueError:
  176.         fail = True
  177.     assert fail
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement