Найдите последний индекс пробела через str.rindex
, затем нарезайте его:
def whole_words_upto(string, index):
return string[:string[:index].rindex(' ')]
whole_words_upto('The quick brown fox jumps over the lazy dog', 28)
# 'The quick brown fox jumps'
Примечание: не обрабатывает ошибочный ввод или угловые случаи (это ваша задача; -).
Второй вариант - разделить и выполнить итерацию, проверяя совокупную длину слов перед возвратом:
def whole_words_upto(string, index):
total_len = 0
words = string.split()
for i, s in enumerate(words):
if i > 0 and total_len + len(s) >= index:
return ' '.join(words[:i-1])
total_len += len(s)
return string