我试图编写一个程序,要求用户输入一个字符串和一个数字(在同一行),然后打印所有可能的字符串组合,直到数字的大小。输出格式应为:所有大写字母,每行的每个组合,组合长度(最短的第一个)和按字母顺序排列。
我的代码以正确的顺序输出正确的组合,但它在输出之前放置了一个空,我不知道为什么。
from itertools import combinations
allcombo = []
S = input().strip()
inputlist = S.split()
k = int(inputlist[1])
S = inputlist[0]
#
for L in range(0, k+1):
allcombo = []
for pos in combinations(S, L):
pos = sorted(pos)
pos = str(pos).translate({ord(c): None for c in "[]()', "})
allcombo.append(pos)
allcombo = sorted(allcombo)
print(*allcombo, sep = '\n')
输入:
HACK 2
输出:
(Empty Line)
A
C
H
K
AC
AH
AK
CH
CK
HK
此外我只编写了大约一周的时间,所以如果有人想告诉我如何正确地写这个,我会非常高兴。
答案 0 :(得分:0)
观察这一行:
for L in range(0, k+1) # Notice that L is starting at 0.
现在,请观察以下一行:
for pos in combinations(S, L)
因此,在内部for循环的第一次迭代中,我们将有以下内容:
for pos in combinations(S, 0) # This is an empty collection during your first loop.
基本上没有在你的循环中执行任何工作,因为没有什么可以迭代,你只是打印一个空字符串。
更改以下代码:
for L in range(0, k+1)
到此:
for L in range(1, k+1) # Skips the empty collection since L starts at 1.
这将解决您的问题。