【发布时间】:2020-11-15 08:18:10
【问题描述】:
为了解释我的查询,我有一个简单的代码 sn-p 下面是我的问题。
def count_vowels(s):
num_vowels = 0
for char in s:
if char in 'aeiouAEIOU':
num_vowels = num_vowels + 1
return num_vowels
print(count_vowels(""))
print("" in "aeiouAEIOU")
给出一个输出
0
True
我的疑问:
为什么空字符串""为表达式返回True
"" in "aeiouAEIOU"
但是当它与 for 循环一起出现时它会跳过?
for char in s:
我的理解是空字符串是所有字符串的子集,那么为什么在 for 循环中使用相同的表达式时会忽略它?如果我在这里遗漏了什么,请随时纠正我。
【问题讨论】:
-
它不包含字符,所以
count_vowels中的循环会立即退出,嗯? -
@bipll 很好,但我的问题是为什么?看到 print 表达式了吗?它返回真。所以我实际上是在问为什么 for 循环会跳过 True 表达式?
-
@mishsx 对字符串的迭代迭代字符串中的字符。根据定义,空字符串没有字符。它的全部目的是用作字符串的空版本。我想,可能会有一个约定,例如,字符串的最后一个字符将始终是一个空字符串,但没有这样的约定,我认为它没有什么价值。无论如何,这根本不是它定义的工作方式。
-
请注意,我想
str对象有一个奇怪的特征,即迭代它们会产生相同类型的对象,因为python没有“char”类型,它只是长度为 1 的字符串。 -
@mishsx 当你评估这个表达式作为打印参数时,你会得到它的布尔值
True。当您在主体循环中对其进行评估时,您不会对其进行一次评估,因为由于迭代的字符串为空,因此永远不会输入主体。
标签: python python-3.x