【发布时间】:2021-07-22 23:44:34
【问题描述】:
我想在 python 中创建一个函数。该函数将接受一个整数并返回一个字符串。 映射规则可以通过一些例子来解释,如下所示:-
示例 1 个映射到“a”,26 个映射到“z”,27 个映射到“aa”,50 个映射到“ax”,70 个映射到“br”
顺序是 - 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)
【问题讨论】:
-
规则不举例说明。如果您对规则的理解不够好,无法严格定义它,那么您就不可能提出解决方案。
-
你应该首先展示你尝试过的东西,而不是仅仅要求别人回答,不费吹灰之力
-
SO 不是为您做作业的服务 - 请在此处查看How to ask
-
@batman567,我知道 SO 不是为我的家庭作业提供解决方案的服务。我尝试解决问题,但无法提出优化的解决方案。你不应该假设任何事情。 Jakub Doka 也是如此
-
您确定
70映射到'be'?根据你的描述,不包括'be',映射的值应该是57,因为'be'是你描述的序列中'ax'之后的7个元素。
标签: python python-3.x function