Как конвертировать это ('113678) в это (один 1 три 6 семь 8) на python - PullRequest
1 голос
/ 28 февраля 2020

Я хочу создать программу, которая может преобразовывать заданное число c в слово

Я уже построил это

l = ['', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine']
n =['0','1','2','3','4

def fun(str): 



word1 = l[int(str[0])]
word2 = l[int(str[2])]

num1 = n[int(str[1])]
num2 = n[int(str[3])]
s =   word1 + " "+ num1 + " " + word2 + " " +  num2
return s


print(fun("1136"))







output:One 1 Three 6

'' '

но, к сожалению, это не работает, поскольку я хочу, чтобы это было

Что я хочу

пример:

вход ('1136') выход: один 1 три 6

input ("113678") один 1 три 6 семь 8

, поэтому не имеет значения, что это за ввод

Я мог бы написать word1 ... wordn num1 ... numn

Но я думаю, что должен быть лучший способ

Я думаю, что я должен написать для l oop, и если индекс int (str) нечетный, получить элемент from (первый список) и когда это даже получить его из другого списка

или, может быть, что-то в этом роде

def fun(s): 

for i in range(len(s)):

    if (i %2 ==0):

        word1 = l[int(s[i])]


    elif(i %2 !=0):
        num1 = n[int(s[i])]

s =   word1 + " "+ num1
return s

  input: print(fun("113678"))
  output:seven 8 

что насчет одного 1 три 6

Спасибо

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать словарь: чтобы получить значение быстрее Yield =, чтобы избежать создания 2 дополнительных списков и последующего их объединения

d= {0: 'Zero', 1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six', 7: 'Seven', 8: 'Eight', 9: 'Nine'}

def get_word(value):
    l= 1
    while l <len(value)+1:
        rem = l % 2
        if not rem:
           yield d[int(value[l-1])]
        else:
            yield value[l-1]

        l +=1

for item in get_word('113678'):
    print(item, end=" ")

Объяснение: функция get_word является генератором, а yield возвращает значение в ближайшее время как значение будет доступно, а затем перейдите к следующему.

ИЛИ

d= {0: 'Zero', 1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six', 7: 'Seven', 8: 'Eight', 9: 'Nine'}

def get_word(value):
    end = len(value)+1
    for even in range(1,end,2): # it will return [1,3,5]
        odd = even-1

        yield d[int(value[odd])]
        yield value[even]


for item in get_word('113678'):
    print(item, end="")
...