调试(使用ipython):
In [2]: s = 'asdfasdf asdf asdf asd sdfa'
In [4]: def count_words(sentence):
...: count = 0
...: last_position = 0
...:
...: while sentence.find(" ", last_position) != -1:
...: count += 1
...: print(f'count: {count}, position: {last_position}')
...: last_position = sentence.find(" ", last_position)
...: print(f'new position: {last_position}')
...: if count > 4:
...: break
...: return count
...:
In [5]: count_words(s)
count: 1, position: 0
new position: 8
count: 2, position: 8
new position: 8
count: 3, position: 8
new position: 8
count: 4, position: 8
new position: 8
count: 5, position: 8
new position: 8
Out[5]: 5
看看原因:
In [6]: s.find?
Docstring:
S.find(sub[, start[, end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
Type: builtin_function_or_method
定影:
In [7]: def count_words(sentence):
...: count = 0
...: last_position = 0
...:
...: while sentence.find(" ", last_position) != -1:
...: count += 1
...: last_position = sentence.find(" ", last_position+1)
...: return count
...:
In [8]: count_words(s)
Out[8]: 5