python - 这个 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,它不满足先验条件,但仍将其添加到新条件。
到目前为止,这就是我的理解。请让我知道我在误解什么!
解决方案
让我们展开
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
不是一个值- 和/或前一个字符不是字母。
推荐阅读
- ansible - 在ansible中创建用户
- angular - Angular 8(星云)填充订阅的选择选项
- java - 以什么顺序为带有 RETURN_GENERATED_KEYS 标记的 jdbcOperations.execute 语句返回生成的 ID?
- python - 如何计算未在熊猫中采样的总体的协方差?
- objective-c - 生成的 Protobuf objc .m 文件有不正确的#import
- html - 无法将输入字段与引导程序对齐
- plink - plink:未知选项“--file”/“--freq”/“--out”
- oracle - Oracle 连接无法连接
- ios - iPadOS:我可以请求另一个应用程序以分屏方式打开吗?
- git - Git:如何使用存储库的子文件夹作为子模块?