这是代码:
a = input("Write a word: ")
substrings = []
for begin in range(len(a)):
for end in range(begin + 1, len(a) + 1):
substrings.append(a[begin:end])
substrings.sort(key=len)
for member in substrings:
print(member)
我不明白这句话:
for end in range(begin + 1, len(a) + 1):
为什么要加一到
len(a)
range()
的结果不包含最终数字,因此如果您在第二个范围内使用len(a)
,则最后的值将为len(a)-1
。
同样,切片不包含最后一个索引的元素。因此,所有子字符串都不会包含输入字符串的最后一个字符。
因此,您要么必须在范围中使用
len(a)+1
,要么在切片中使用 end+1
。如果您选择后者,则需要将范围更改为 range(begin, len(a))
,这样您就不会跳过范围中的第一个字符。
您需要在此处将
1
添加到 len(a)
:
for end in range(begin + 1, len(a) + 1):
因为您需要包含
a
的最后一个字符。
同样的道理,这个:
print(list(range(2)))
打印:
[0, 1]
,而不是 `[0, 1, 2]。