您的任务是将句子截断为不超过给定字符数的长度。
如果句子已经足够短,你不需要对它做任何事情。如果需要截断,应在缩略句的末尾添加省略号(“...”)来表示缺失的部分。
一个缩写的句子可以包含整个单词和空格。它不得包含任何截断的单词或尾随空格。在计算允许的字符数时考虑了省略号,因此它不计入给定长度。
输入数据:两个参数:
单行句子为字符串 截断句子的最大长度为 int 输出:带有省略号(如果需要)作为一行的截断句子。
例子:
cut_sentence("Hi my name is Alex", 4) == "Hi..."
cut_sentence("Hi my name is Alex", 8) == "Hi my..."
cut_sentence("Hi my name is Alex", 18) == "Hi my name is Alex"
cut_sentence("Hi my name is Alex", 20) == "Hi my name is Alex"
我的代码:
def cut_sentence(line: str, length: int) -> str:
list_ = [str(x) for x in line.split()]
len_word = 0
res_word = ''
lst2 = []
if len(line) == 0 or length == 1:
return '...'
elif len(line) - (length + 3) > 0:
for i in list_:
if len(res_word) > length-2:
break
lst2.append(i)
res_word = ' '.join(lst2)
res_word += '...'
else:
return f'{line[:length]}'
return res_word
我哪里错了?
让我们测试一下:
不幸的是,大多数测试都失败了。
PS我的回答没有说明错误的具体原因。说明有很多错误。您可能没有仔细阅读条款。
PPS正则表达式
r'\S\s'匹配一对字符——“非空格”和“空格”。它们之间是你可以剪断绳子的位置。在所有这些位置中,您需要选择最远的位置,但不要超过给定的长度。如果没有,则第一次切割距离太远或根本没有切割。在这种情况下,只应返回省略号:作为备选。由于我们只对作为分隔符的空格感兴趣,因此我们可以简单地在所需位置的左侧查找一个空格(加上我们要查找的空格的空格,因此切片中的长度 + 1)并将字符串沿它。如果未找到空格,则截断整个字符串。如果整个字符串的长度足够,我们什么也不做。
代码越短,就越难搞砸。
assert好吧,以-s的形式编写计算代码检查是一种很好的做法。如果该功能有问题 - 您会立即注意到它。