我正在尝试完成此次尝试,以计算字符串中"Z"
次"E"
次的次数。换句话说,我需要计算给定字符串中"ZE"
的次数:
letters = "GOLDZEZEDUZZEOZBIX"
为什么此代码只返回1?
def is_eaten(data):
count = 0
if "Z" and "E" in data:
count += 1
return count
答案 0 :(得分:3)
您只需使用count
方法:
letters.count('ZE') # returns 3
答案 1 :(得分:2)
因为您将计数设置为一个if
Z和E在数据中。每个ZE不是for
,而是if
。
阅读for
循环。
答案 2 :(得分:2)
为什么此代码只返回1?
有多重原因。
首先,代码中没有循环,因此无法返回超过1的循环。
其次,if "Z" and "E" in data
并不代表你的想法。如果"Z"
为真,并且"E" in data
为真,则为真。换句话说,它相当于if ("Z") and ("E" in data)
。但是,即使括号走向另一个方向,它是if ("Z" and "E") in data)
它也行不通。由于"Z" and "E"
仅为"E"
(尝试查看),因此只会检查"E"
是否出现在数据中。
您需要if "Z" in data and "E" in data
来执行您要执行的操作。
第三,即使你解决了这个问题,逻辑也没有任何意义。如果任何地方都有“Z”,任何地方都有“E”,那就是这样。因此,对于“EZ”来说,情况确实如此,这显然是错误的。如果子字符串"ZE"
出现在数据中,您只希望它为真,对吧?您可以使用if "ZE" in data
来表示这一点。或者,如果您因某些原因不允许这样做,请先找"Z"
并检查下一个字符是否为"E"
。
这是一种你可以做到这一点的方式(不是一种非常好的好的方式,但最接近我能想到你尝试过的方式):
def count_eaten(data):
count = 0
while True:
index = data.find('Z')
if index == -1:
return count
data = data[index+1:]
if data[0] == 'E':
count += 1
或者更简单:
def count_eaten(data):
count = 0
while True:
index = data.find('ZE')
if index == -1:
return count
data = data[index+1:]
count += 1
或者,更简单:
def count_eaten(data):
return data.count('ZE')
我猜你的教授不想要这个最后一个,并且可能不想要它之前的那个......但那真的只是一个猜测(因为这是事实上这是第一个作业)。
答案 3 :(得分:0)
对于其他解决方案,请尝试以下方法:
def keyCount(dataset, key):
return dataset.count(key)
这种方法的正确用法如下:
>>> letters = "GOLDZEZEDUZZEOZBIX"
>>> key = "ZE"
>>> keyCount(letters, key)
3
或
>>> keyCount(letters, "ZE")
3
或
>>> keyCount("GOLDZEZEDUZZEOZBIX", "ZE")
3
等。