= = 4
numString
= numString + 'forty'
elsif write
= = 5
numString
= numString + 'fifty'
elsif write
= = 6
numString
= numString + 'sixty'
elsif write
= = 7
numString
= numString + 'seventy'
elsif write
= = 8
numString
= numString + 'eighty'
elsif write
= = 9
numString
= numString + 'ninety'
end
if left > 0
numString
= numString + '–'
end
end
write = left
# Сколько единиц осталось вывести?
left = 0
# Вычтем эти единицы.
if write > 0
if write
= = 1
numString
= numString + 'one'
elsif write
= = 2
numString
= numString + 'two'
elsif write
= = 3
numString
= numString + 'three'
elsif write
= = 4
numString
= numString + 'four'
elsif write ==
5
numString = numString + 'five'
elsif write ==
6
numString = numString + 'six'
elsif write ==
7
numString = numString + 'seven'
elsif write ==
8
numString = numString + 'eight'
elsif write ==
9
numString = numString + 'nine'
end
end
if
numString == '
'
# Только в одном случае «numString» может быть пустой -
# если «number
” равно 0.
return 'zero'
end
#
Если мы дошли
досюда, то у нас имеется число где-то
#
между 0 и 100,
поэтому нам нужно вернуть «numString».
numString
end
puts
englishNumber(
0)
puts
englishNumber(
9)
puts
englishNumber(
10)
puts
englishNumber(
11)
puts
englishNumber(
17)
puts
englishNumber(
32)
puts
englishNumber(
88)
puts
englishNumber(
99)
puts
englishNumber(100)
zero
nine
ten
eleven
seventeen
thirty-two
eighty-eight
ninety-nine
one hundred
И всё-таки, определённо имеется несколько моментов в этой программе, которые мне не нравятся. Во-первых, в ней слишком много повторений. Во-вторых, она не обрабатывает числа больше 100. В-третьих, в ней слишком много особых случаев, слишком много возвратов по return. Давайте используем несколько массивов и попробуем её немного подчистить:
def englishNumber number
if number < 0 # Без отрицательных чисел.
return 'Пожалуйста, введите неотрицательное число.'
end
if number == 0
return 'zero'
end
# Больше нет особых случаев! Больше нет возвратов по return!
numString = '' # Эту строку мы будем возвращать.
# единицы
onesPlace =['one', 'two', 'three', 'four', '
five',
'six', 'seven', 'eight', 'nine']
# десятки
tensPlace =['ten', 'twenty', 'thirty', 'forty',
'fifty',
'sixty', 'seventy', 'eighty', 'ninety']
teenagers =['eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen',
# «left» – сколько от числа нам ещё осталось вывести.
# «write» – часть числа, которую мы выводим сейчас.
# write и left… поняли? :) left = number
write = left/ЮО # Сколько сотен осталось вывести?
left = left – write*100 # Вычтем эти сотни.
if write > О
# Вот здесь действительно хитрый фокус: hundreds = englishNumber write
numString = numString + hundreds + ' hundred'
# Это называется «рекурсия». Так что же я только что сделал?
# Я велел этому методу вызвать себя, но с параметром «write» вместо