我编写了一个程序来读取一个单词并打印所有子串,按长度排序。例如,如果用户提供输入“朗姆酒”,程序将打印出来
r
你们
m
茹
嗯
朗姆酒
以下代码是我所做的并设法打印:
r
你们
m
茹
嗯
m
我不明白的问题,如何让循环打印出从'm'到'rum'的最后一个单词的正确输出..我错过了什么?
如果有人能指出我的代码中纠正我的循环的方式,我真的很感激。非常感谢!
word = input("\nPlease enter a word : ")
length = 1
pos = 0
for i in range(length, len(word)):
for j in range(pos, len(word)):
print(word[j:i+j])
答案 0 :(得分:2)
我只是在每次处理for循环时都使用print()来查看j和i + j是什么。这是问题所在;
word = input("\nPlease enter a word : ")
length = 1
pos = 0
for i in range(length, len(word)):
for j in range(pos, len(word)):
print (j)
print (i+j)
print(word[j:i+j])
print ("------------")
输出:
>>>
Please enter a word : rum
0
1 #word[0:1]
r
------------
1
2 #word[1:2]
u
------------
2
3 #word[2:3]
m
------------
0
2 #word[0:2]
ru
------------
1
3 #word[1:3]
um
------------
2
4 #word[2:4] which is only m.
m
------------
>>>
您的代码尝试在word[2:4]
的最后一部分打印m
。这就是问题,这就是为什么它只打印m
而不是全文。
更好地使用combinations()
。
from itertools import combinations
word = "rum"
for x in range(len(word)+1):
for c in combinations(word,x):
print ("".join(c))
输出:
>>>
r
u
m
ru
rm
um
rum
>>>
答案 1 :(得分:1)
试试这个,
def grouper(l, n):
"""get a generator of n consecutive items from a given list
"""
# the last element is l[-n:]
for i in range(len(l)-n+1):
yield l[i:i+n]
word = 'abcde'
result = [s for i in range(1, len(word)+1) for s in grouper(word, n=i)]
print(result)
# Output
['a', 'b', 'c', 'd', 'e', 'ab', 'bc', 'cd', 'de', 'abc', 'bcd', 'cde', 'abcd', 'bcde', 'abcde']
这可能有助于理解Python的切片表示法。
+---+---+---+---+---+
| a | b | c | d | e |
+---+---+---+---+---+
0 1 2 3 4
-5 -4 -3 -2 -1
答案 2 :(得分:1)
您的代码中存在两个问题:
stop
,因此您首次range
使用(在外部循环中)应为range(length, len(word)+1)
stop
,这应该取决于外环的i
,我认为是当前长度这里是更正后的代码:
word = 'rum'
for length in range(1, len(word)+1):
for pos in range(0, len(word)-length+1):
print(word[pos:pos+length])
答案 3 :(得分:0)
在这里你走人,使用while循环将解决你的问题。
word = input("\nPlease enter a word : ")
j=1
result = []
while True:
for i in range(len(word)-j+1):
result.append(word[i:i+j])
if j==len(word):
break
j+=1
for substr in result:
print(substr)
# Output
r
u
m
ru
um
rum
此代码偏离过程可以更简洁,但它确实可以完成这项工作。它也是从字符串中获取不同子串的一种非常常见的方法。