Python для преобразования чисел в слова, используя рекурсивный


Моя функция рекурсивно вызывает сама себя, пока он не декодирует каждый число. rec_ntw

face_value_count -> (добавочная переменная) означает единицы, десятки, сотни и тысячи face_value -> (словарь) обозначает словарь, содержащий соответствующие значения слова для чисел.

результат -> (строка) содержит конечный результат, чтобы вернуться.

подросток -> (целое число) для декодирования подросткового чисел от одиннадцати до ninteen

количество % 10 , чтобы получить последний элемент

количество // 10 для удаления последнего элемента и передать его в рекурсивную функцию.

def rec_ntw(number, face_value_count=0):
        result = ""
        teen = 0
        if number <= 0:
                if face_value_count == 0:
                        result = "Zero"
                print (result)
                #return result
        else:
                if face_value_count == 0:
                        result = (singleton[int(number % 10)])
                        teen = number % 10
                elif face_value_count == 1:
                        if number % 10 == 1:
                                result = (face_value[1][1][int(teen)]) + " "
                        else:
                                result = (face_value[int(face_value_count)][int(number % 10)]) + " " + result
                                teen = 0
                elif face_value_count == 2:
                        if number % 10 != 0:
                                result = (singleton[int(number % 10)] + " " + str(face_value[int(face_value_count)]) + " ") + result
                else:
                        result = (singleton[int(number % 10)] + " " + str(face_value[int(face_value_count)]) + " ") + result
                face_value_count += 1
                rec_ntw(number // 10, face_value_count)

Пожалуйста, проверьте мой код и дайте мне знать, как эффективно писать.



450
2
задан 16 марта 2018 в 03:03 Источник Поделиться
Комментарии
1 ответ

Каков ваш желаемый результат? Ваша функция не возвращает никакого заявления (другая закомментировать) и распечатать только заявление в number <= 0 блок. Вы запустите эту функцию? Если я что-то отсутствует, эффекта не будет, если вы введете 0. И если не принимать во внимание последнюю цифру, вы на самом деле не хранить его в любом месте, поэтому он просто ушел.

Вы, кажется, делают двойные вкладки для вашего отступы, что делает его трудно прочесть вам несколько уровней в глубину. Кроме того, вы можете сохранить себе отступом после number <= 0 блока; поскольку у вас ничего нет, но else блок после этого вы можете поставить возврат в конце if блок. Тогда вы никогда не добраться до else блок, если if условие ложно, делает else излишним. Так что вы можете избавиться от этого и перевести все на уровень отступа.

Вам не показывают, что face_value, поэтому трудно оценить ваш код, когда дело доходит до этой части.

Кроме того, если я недоразумение, if number <= 0 блок должен быть что-то вроде этого:

if face_value_count == 0:
result = "Zero"
print (result)
return(result)
return('negative '+rec_ntw(-number, face_value_count))

Вы могли бы заменить if else блоки после number <= 0 блок с случае заявление.

Использование рекурсии в данном случае является довольно странным. Базовая структура функции является:

def f(x):
#do action 1
#do action 2
#do action 3

Но вы реализуете его как:

def f(x,instruction_address):
if instruction_address == 1:
# do action 1
if instruction_address == 2:
# do action 2
if instruction_address == 3:
# do action 3
f(x, instruction_address+1)

Это просто ... странно.

Рассмотрим следующий код:

def numbers_to_words(number):
numbers = ['zero','one','two','three','four','five','six','seven','eight','nine',
'ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen',
'seventeen','eighteen','nineteen']
tens_places = ['twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety']
if number <20:
return(numbers[number])
#print(number)
if number%10 == 0:
return(tens_places[number//10-2])
return(tens_places[int(str(number)[0])-2]+'-'+numbers[int(str(number)[1])])

Это превращает любое число от 0 до 99 до слова, никакой рекурсии. Он легко может быть расширен до -999 до 999, и побольше работали бы сделать это, скажем, -10^33 до 10^33.

3
ответ дан 16 марта 2018 в 06:03 Источник Поделиться