Python

Как решить задачу без написания 999 элементов списка?

Напишите пожалуйста код
def number_in_english(n):
    dig = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    dec = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninty']
    teen = ['', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']

    x = ''
    if (n > 99):
        x += dig[n // 100] + ' hundred'
        if (n % 100): x += ' and '

    if (10 < n % 100 < 20):
        x += teen[n % 10]
    else:
        d = dec[n % 100 // 10]
        x += d + (d and ' ' or '') + dig[n % 10]

    return x

Другой вариант - разобрать на цифры из str(n)

Можно и одним выражением, но оно получится слишком уродливым из-за "хорошей читаемости" питона)
Михаил Гамеров
Михаил Гамеров
62 360
Лучший ответ
def number_in_english(n):
~~one = [['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'],
~~~~['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']]
~~ten = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
~~if n == 0: return 'zero'
~~res = [one[0][n // 100], ten[n // 10 % 10], one[n // 10 % 10 == 1][n % 10]]
~~if res[0]: res[0] += ' hundred'
~~res[1] = ' '.join([s for s in res[1:] if s])
~~return ' and '.join([s for s in res[:2] if s])
Ну так и оптимизируй список.
Принимаешь значение, разбиваешь по единицам, десяткам, сотням и генерируешь ответ
Пример:
a={'1':'один','2':'два','3':'три'}
b={'2':'двадцать','3':'тридцать','4':'сорок'}
Magzhan _ Kuanysh
Magzhan _ Kuanysh
2 997
Владимир Артюхин не очень понятно, приведите как разбить по единицам хотя бы чисел до 100
ну и от работников общепита для разнообразности код

def get_number_in_english(n):
  dig = ['zero', 'one', 'two', 'tree', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve','thirteen']
  tens = ['twenty', 'thirty', 'forty', 'fifty']
  res = ''
  if n >= 100 and n < 1000:
    res = dig[n//100] + " hundred "
    n %= 100
  if n >= 60 and n < 100:
    res += dig[n//10]+'ty'
  if n >= 20 and n < 60:
    res += tens[n//10-2]
  if n % 10 != 0:
    res += " " + dig[n % 10]
  if n > 13 and n < 20:
    res = dig[n % 10]+'teen'
  if n <= 13:
    res = dig[n]
  return res

print(get_number_in_english(int(input())))
Юрий Баринов т. к. я безграмотный, то естественно упустил, что после слова 'hundred' надо написать еще и 'and' итого строка должна быть

res = dig[n//100] + " hundred and "
Михаил Гамеров print(get_number_in_english(80)) # eightty

tt лишнее)
Юрий Баринов еще больше строк :D

if n >= 60 and n < 100:
 if n // 10 == 8:
  res += dig[n//10]+'y'
 else:
  res += dig[n//10]+'ty'
Владимир Артюхин помогите пожалуйста с задачкой https://otvet.mail.ru/question/223558989