我在Python中遇到问题我无法绕过头脑,即使它很简单(我认为)。
我正在尝试制作“弦乐系列”。我真的不知道它叫什么,但它是这样的:
我想要一个能够使串联运行的字符串的函数,这样每次调用函数时它都会“计数”一次。
我有一个列表“a-z0-9 ._-”(a到z,0到9,点,下划线,短划线)。我应该从我的方法收到的第一个字符串是 aaaa ,下次我调用它时,它应该返回 aaab ,下次 aaac 等,直到 ----
此外,字符串的长度是固定的,但应该很容易更改。
(在你查看我的代码之前,如果我的代码不符合约定,我想道歉;我几天前开始编写Python代码,所以我还是一个菜鸟。)
我得到了什么:
生成可用字符列表
chars = []
for i in range(26):
chars.append(str(chr(i + 97)))
for i in range(10):
chars.append(str(i))
chars.append('.')
chars.append('_')
chars.append('-')
获取序列中的下一个字符串
iterationCount = 0
nameLen = 3
charCounter = 1
def getString():
global charCounter, iterationCount
name = ''
for i in range(nameLen):
name += chars[((charCounter + (iterationCount % (nameLen - i) )) % len(chars))]
charCounter += 1
iterationCount += 1
return name
这是需要修复的getString()
函数,特别是 name 的构建方式。
我有这种感觉,通过在索引中使用正确的“modulu hack”是可能的,但我无法按预期工作!
答案 0 :(得分:7)
使用生成器和itertools.product
:
import itertools
def getString(length=4, characters='abcdefghijklmnopqrstuvwxyz0123456789._-'):
for s in itertools.product(characters, repeat=length):
yield ''.join(s)
for s in getString():
print(s)
aaaa
aaab
aaac
aaad
aaae
aaaf
...