试图在同一字符串中找到相同数量的字符
Trying to find equal amount of characters in same string
我想看看一个字符串是否有相同数量的 'x's 和 'o's。该方法必须 return 一个布尔值并且不区分大小写。字符串可以包含任何字符。
示例input/output:
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false
所以我尝试制作新列表,然后为每个 'x' 和每个 'o' 追加,但它不太有效。到目前为止,这是我的代码:
def xo(s):
ex = []
oh = []
for letter in s.split():
if letter.islower() == 'x':
ex = ex.append(letter)
elif letter.islower() == 'o':
oh = oh.append(letter)
if len(ex) == len(oh):
return True
else:
return False
只有前一个 return 正确,后三分之一不正确。在我看来,代码没有正确附加。
您的代码中存在(至少)三个问题:
s.split()
在每个 space 和 return 上拆分 s
一个列表(所以假设你没有 spaces,这给你一个列表单个项目)。相反,只需使用 for letter in s:
遍历每个字母。
letter.islower()
检查字母是否小写,returning True
或 False
。您想要的是 letter.lower()
,其中 return 是字符的小写版本。
- 此外(感谢 Mark)追加没有 return 值,因此当您 运行
oh = oh.append(letter)
时,您将 None
的值分配给 oh
变量。您应该改为只使用 oh.append(letter)
(无赋值)。
只需使用collections.Counter
。
>>> from collections import Counter
>>> c = Counter('xooxXo'.lower())
>>> c['x'] == c['o']
True
或
>>> c = Counter('xooxx'.lower())
>>> c['x'] == c['o']
False
如果需要,将其包装在您自己的函数中。
David 的回答涵盖了对您的代码的一些潜在修复,但如果您正在寻找更简洁的内容,我建议使用 .lower()
预先将字符串小写,然后使用 .count()
计算 X 和 Os 的数量,而不是使用 for
循环:
def xo(s):
return s.lower().count('x') == s.lower().count('o')
这输出:
False
我想看看一个字符串是否有相同数量的 'x's 和 'o's。该方法必须 return 一个布尔值并且不区分大小写。字符串可以包含任何字符。
示例input/output:
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false
所以我尝试制作新列表,然后为每个 'x' 和每个 'o' 追加,但它不太有效。到目前为止,这是我的代码:
def xo(s):
ex = []
oh = []
for letter in s.split():
if letter.islower() == 'x':
ex = ex.append(letter)
elif letter.islower() == 'o':
oh = oh.append(letter)
if len(ex) == len(oh):
return True
else:
return False
只有前一个 return 正确,后三分之一不正确。在我看来,代码没有正确附加。
您的代码中存在(至少)三个问题:
s.split()
在每个 space 和 return 上拆分s
一个列表(所以假设你没有 spaces,这给你一个列表单个项目)。相反,只需使用for letter in s:
遍历每个字母。letter.islower()
检查字母是否小写,returningTrue
或False
。您想要的是letter.lower()
,其中 return 是字符的小写版本。- 此外(感谢 Mark)追加没有 return 值,因此当您 运行
oh = oh.append(letter)
时,您将None
的值分配给oh
变量。您应该改为只使用oh.append(letter)
(无赋值)。
只需使用collections.Counter
。
>>> from collections import Counter
>>> c = Counter('xooxXo'.lower())
>>> c['x'] == c['o']
True
或
>>> c = Counter('xooxx'.lower())
>>> c['x'] == c['o']
False
如果需要,将其包装在您自己的函数中。
David 的回答涵盖了对您的代码的一些潜在修复,但如果您正在寻找更简洁的内容,我建议使用 .lower()
预先将字符串小写,然后使用 .count()
计算 X 和 Os 的数量,而不是使用 for
循环:
def xo(s):
return s.lower().count('x') == s.lower().count('o')
这输出:
False