我正在尝试完成此尝试,以计算在字符串中"Z"
吃了多少次。"E"
换句话说,我需要计算"ZE"
给定字符串中有多少次:
letters = "GOLDZEZEDUZZEOZBIX"
为什么这段代码只返回 1?
def is_eaten(data):
count = 0
if "Z" and "E" in data:
count += 1
return count
您可以简单地使用以下count
方法:
letters.count('ZE') # returns 3
因为您将计数设置为if
Z 并且 E 在数据中。不是for
每个 ZE 一次,而是if
.
阅读for
循环。
为什么这段代码只返回 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
这个意思来表达。或者,如果由于某种原因不允许您这样做,请先找到 a"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')
我猜你的教授不想要最后一个,也可能不想要它之前的那个……但这实际上只是一个猜测(事实上,这首先是家庭作业)。
for even another solution try this:
def keyCount(dataset, key):
return dataset.count(key)
correct usage of this method would then look like:
>>> letters = "GOLDZEZEDUZZEOZBIX"
>>> key = "ZE"
>>> keyCount(letters, key)
3
or
>>> keyCount(letters, "ZE")
3
or
>>> keyCount("GOLDZEZEDUZZEOZBIX", "ZE")
3
etc..