将数字转换为辅音 - 元音对

时间:2016-01-27 11:19:01

标签: python

该项目特别要求将初始数字组划分为基数10,因此通过使用%100和// 100运算符将6 | 30 | 45 | 10分开,然后将最后2位数转换为0-之间的商通过使用%5和// 5,剩余在0到4之间。目前我有,任何帮助表示感谢,谢谢!

integer = pin
number_string = str(integer)
number_string2 = str(integer)
number_string % 100
number_string2 // 100

vowels = ["a", "e", "i", "o", "u"]

consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
          "n", "p", "q", "r", "s", "t", "v", "w", "y", "z"]

` 代码应该在最后生成这个

>>> pintoword(3463470)
'bomejusa'
>>> pintoword(3464140)
'bomelela'

1 个答案:

答案 0 :(得分:1)

你的代码有点奇怪。例如,您将名为integer的变量转换为字符串,然后尝试对其执行算术运算。然后你不能把结果保存在任何地方!

无论如何,这里有一些代码可以满足您的需求。它使用内置的divmod函数在一个函数调用中生成商和余数。

vowels = "aeiou"
consonants = "bcdfghjklmnpqrstvwyz"

def pintoword(n):
    a = []
    while n:
        n, r = divmod(n, 100)
        c, v = divmod(r, 5)
        a.append(vowels[v])
        a.append(consonants[c])
    return ''.join(reversed(a))

for n in (3463470, 3464140):
    print n, pintoword(n)

<强>输出

3463470 bomejusa
3464140 bomelela

我们将字母对保存在列表中,并在最后将它们连接在一起。除以100运算会以相反的顺序生成字母对,因此我们需要在加入之前反转列表。

FWIW,这是执行逆操作的功能。它不是对.indexvowels字符串进行consonants次调用,而是使用一对字典来查找索引,因为它更快。

def invert_string(s):
    return dict((v, i) for i, v in enumerate(s))

dvowels = invert_string(vowels)
dconsonants = invert_string(consonants)

def wordtopin(s):
    ''' Convert string s of alternating consonants and vowels into an integer '''
    num = 0
    for c, v in zip(*[iter(s)]*2):
        num = 100 * num + 5 * dconsonants[c] + dvowels[v]
    return num