我需要确定一个字符串中是否有3个或更多z
,如果是,则返回1,否则返回0。
例如:
print punk('abc')
# should return 0
print punk('laz zzzz')
# should return 1
我的尝试:
def punk(s):
lett=('z')
for s in lett:
if len(s)>=3:
return 1
else:
if len(s)<=3:
return 0
这只返回0,无论我有多少z作为输入。我哪里做错了?
答案 0 :(得分:4)
如果您不想使用内置功能,可以尝试以下方法:
def punk(s):
count = 0
for letter in s:
if letter == "z" or letter == "Z":
count += 1
if count >= 3:
return 1
else:
return 0
答案 1 :(得分:3)
def punk(s):
counter = 0
for char in s: # iterate over each character in s
if char == 'z':
counter += 1
return int(counter >= 3) # int(False) => 0, int(True) => 1
您可以像这样使用内置string.count
:
def punk(s):
return int(s.count('z') >= 3)
也可以使用reduce
这样实现:
int(reduce(lambda x,y: x+int(y=='z'), a, 0) >= 3)
答案 2 :(得分:3)
您需要遍历传入的字符串中的每个字符,而不是遍历lett
中的每个项目。
def punk(string):
letters = ('Z', 'z')
zCount = 0
for char in string:
if char in letters:
zCount += 1
return 1 if zCount >= 3 else 0
答案 3 :(得分:1)
您的问题是您正在测试len(s)
,但s
已定义,因为您说的是for s in lett:
。因此,s
的长度始终为1。另外,当您说for s in lett:
时,您正在重新定义s
,因此您的原始参数会被完全覆盖。相反,您可以创建一个计数器并使用for
循环for c in lett:
。然后,每当c
为'z'
时,您就可以向计数器添加一个。我不会为你写出来因为这会迫使你作弊,但这是一种方法。