该项目特别要求将初始数字组划分为基数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'
答案 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,这是执行逆操作的功能。它不是对.index
和vowels
字符串进行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