在python中创建一个函数,给定一个整数,该函数将返回一个字符串.例如:-1映射到a,26映射到z,27映射到aa,5



我想在python中创建一个函数。函数将接受一个整数并返回一个字符串。映射规则可以通过以下示例来解释:-

示例1个映射到"a",26个映射到‘z’,27个映射到'a',50个映射到'ax',70个映射到'ar'

序列是-a、b、c、d到z、aa、ab、ca到zz、aaa、aab、aac到zzz。

我能够创建这个功能:-

from string import ascii_lowercase
import itertools
def func(n):
c = 0
l = []
for size in itertools.count(1):
for s in itertools.product(ascii_lowercase, repeat=size):
l.append(s)
c+=1
if c == n:
return l

编辑:解决方案

非常感谢大家的帮助。我想出了一个解决问题的办法:

d = { n-96:chr(n) for n in range(97,123) }
def div(n):
if ((n%26) == 0 and n>26):
return func(n//26 - 1)
elif (n//26) <= 0:
return ''
elif n == 26:
return 'z'
elif (n//26) in d:
return d[n//26]
else:
return func(n//26)
def mod(n):
if n<=0:
return ''
elif ((n%26) == 0 and n>26):
return 'z'
elif (n%26)<=0:
return ''
else:
return d[n%26]
def func(n):
res_div = div(n)
res_mod = mod(n)
return (res_div + res_mod)

尝试实现这样的东西。假设我们有28个。我们做28/26,得到2。然后我们做28/26,得到第一个数字1。因此,我们将其映射为一个类似12的数字(26表示十个位置(。然后我们把数字分开,任何带1的都被a代替,任何带2的都被b表示,以此类推。

重要的是要理解这个问题从根本上是将一个数字转换为不同的基数。不需要计数到n的值,它可以被计算。这是用与将碱2转化为碱10相同的工艺对碱26至碱10实现的。

考虑将二进制数1010转换为十进制,假设最左边的数字是最有效的。从最右边的数字开始,将每个数字乘以2的乘方得到的值相加。0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 0 + 2 + 0 + 8 = 10。这可以验证:

int("1010", 2)

因此,解决您的问题的步骤是:

  1. 映射a,b。。。,z到intS1、2、。。。,26
  2. 反向n
  3. 执行计算
def convert_abc_to_dec(abc):
import string
a_to_i_map = {c: i+1 for i, c in enumerate(string.ascii_lowercase)}
return sum(a_to_i_map[x]*(26**i) for i, x in enumerate(n[::-1]))

非常感谢大家的帮助。我想出了一个解决问题的办法:

d = { n-96:chr(n) for n in range(97,123) }
def div(n):
if ((n%26) == 0 and n>26):
return func(n//26 - 1)
elif (n//26) <= 0:
return ''
elif n == 26:
return 'z'
elif (n//26) in d:
return d[n//26]
else:
return func(n//26)
def mod(n):
if n<=0:
return ''
elif ((n%26) == 0 and n>26):
return 'z'
elif (n%26)<=0:
return ''
else:
return d[n%26]
def func(n):
res_div = div(n)
res_mod = mod(n)
return (res_div + res_mod)

最新更新