这可能是您想要做的:
def checkio(element):
newelement = element.replace(" ", " ").replace(" ", " ")
return newelement
您甚至可以将其缩短为
def checkio(element):
return element.replace(" ", " ").replace(" ", " ")
但是,如果您想替换任意数量的空格怎么办?最好将句子拆分为任意数量的空格,然后用一个空格将其重新连接在一起。为此,您将使用
def checkio(element):
return " ".join(element.split())
该split
方法接受一个字符串并将其分成一个列表。没有参数,它以空格分隔:
>>> "I like python".split()
["I", "like", "python"]
该join
方法获取一个列表并从中生成一个字符串,使用列表元素之间的字符串:
>>> ' '.join(["I", "like", "python"])
"I like python"
>>> '__HELP__'.join(["I", "like", "python"])
"I__HELP__like__HELP__python"
为什么您最初的尝试失败了
线
newelement = element.replace(" ", " ") and element.replace(" ", " ")
没有做你所期望的,因为它使用了字符串的“真实性”。and
操作员着眼于合乎逻辑的事物。在 python 中,""
除了True
. 您可以使用它来执行称为“短路”的操作,这就是您所做的。
使用时and
,left 和 right 语句都必须为 true 才能对其求值True
。如果左侧部分是False
,则没有理由继续移动到右侧部分并且评估停止在那里(也称为“短路”)。如果是真的,那么它需要检查右边,看整个陈述是否为真。您可以利用这一事实在左语句为假时返回左语句,如果左语句为真则返回右语句:
>>> a = "a" and "b"
>>> a
"b"
>>> a = "" and "b"
>>> a
""
>>> # It works oppositely with "or"
>>> a = "a" or "b"
>>> a
"a"
>>> a = "" or "b"
>>> a
"b"
element.replace(" ", " ")
返回一个字符串,element.replace(" ", " ")
. 由于字符串的计算结果为True
,因此您基本上只返回 . 的正确语句and
。
这不是 python 中逻辑运算符的常见用法(虽然它更常用于其他语言)