我正在尝试编写一个 Python 程序,该程序输出使用字符形成的所有可能的字符串,c, a, t, d, o并且g仅使用递归一次。
到目前为止,我有这个:
i = ['c', 'a', 't', 'd', 'o', 'g']
counter = 0
def func(i):
global counter
i[counter], i[counter+1] = i[counter+1], i[counter]
print(i)
if counter != 5:
counter += 1
return func(i)
func(i)
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉“不礼貌”,但我只是复制粘贴了书中的练习。这只是书中的纯文字。
不知道你在尝试什么或如何解决这个问题,抱歉。但这是一种方法。
def words(letters, word=''):
letters or print(word)
for letter in letters:
words(letters - {letter}, word + letter)
words(set('catdog'))
Run Code Online (Sandbox Code Playgroud)
这letters or print(word)只是 的捷径if not letters: print(word)。Pythonor评估左边的部分,如果那是“真实的”,它返回那个,否则返回右边的部分。所以在这里,如果letters是真的,即还有剩余的字母可以使用,那么就是这样。否则,打印。
这可能有点棘手,但我觉得这很自然。你可能听说过“停下来,否则我开枪!”,对吧?如果这个人停下来,那就是了。否则,他们会被枪杀。在 Python 中也差不多。