首页 > 解决方案 > 这个 for 循环和 "new = ' ' " 是如何工作的?

问题描述

def shortenPlus(s):
    # Yer Code 'Ere Mate!
    # Aye Aye cap'
    new = ''
    prior = ''
    for x in s:
        if not (x in 'aeiou' and prior.isalpha()):
            new += x
        prior = x
    return new

print(shortenPlus("I've information vegetable, animal and mineral"))

所以这是我从这个线程中找到的代码。我无法理解 for 循环的“如果不是”部分是如何工作的,以及为什么我们有新的和先前的语句。

我知道我们从字符串中获取一个变量,如果这个变量不在“aeiou”中,并且之前的容器没有任何字母表中的内容,那么你将这个变量添加到新的。但如果先验是 I,x 是 v,它不满足先验条件,但仍将其添加到新条件。

到目前为止,这就是我的理解。请让我知道我在误解什么!

标签: pythonfor-loopif-statement

解决方案


让我们展开

if not(x in 'aeiou' and prior.isalpha()): ...

inner = x in 'aeiou' and prior.isalpha()
if not inner:
    ...

为了清楚起见。现在,inner当且仅当两个条件都为真时,才会为真:

  • x是元音
  • 前一个字符是一个字母

如果其中任何一个不正确,那么inner将是 False。所以,原来的测试:

not(x in 'aeiou' and prior.isalpha())

否定这一点,如果同时满足这两个条件,则为False 。如果其中一个(或两个!)不满足,那么它将是True,并且将评估 if 语句。因此,如果满足以下条件,则将评估 if 语句:

  • x不是一个
  • 和/或前一个字符不是字母。

推荐阅读