
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)
Можно и одним выражением, но оно получится слишком уродливым из-за "хорошей читаемости" питона)
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)
Можно и одним выражением, но оно получится слишком уродливым из-за "хорошей читаемости" питона)
Женя Сомиков
а где zero?
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])
~~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':'сорок'}
Принимаешь значение, разбиваешь по единицам, десяткам, сотням и генерируешь ответ
Пример:
a={'1':'один','2':'два','3':'три'}
b={'2':'двадцать','3':'тридцать','4':'сорок'}
Владимир Артюхин
не очень понятно, приведите как разбить по единицам хотя бы чисел до 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())))
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 "
res = dig[n//100] + " hundred and "
Юрий Баринов
еще больше строк :D
if n >= 60 and n < 100:
if n // 10 == 8:
res += dig[n//10]+'y'
else:
res += dig[n//10]+'ty'
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
Похожие вопросы
- Первый элемент списка — 1 буква 'а', последний — 33 буквы 'я'. Используй метод append().
- Сумма индексов элементов списка
- Помогите, пожалуйста, решить задачу Python
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Нужно решить задачу на Python
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Помогите решить задачу на питоне. пожалуйста.
- Не получается решить задачу по Python, как решить?
- Помогите мне пожалуйста решить задачу на питоне!
- Проект Эйлера / Правильно ли решил задачу? Python