如何将字符与Python中某些字符串中的所有字符进行比较?

时间:2013-03-05 19:55:06

标签: python string list character string-comparison

我需要编写一个函数,它将一个字符和一个字符串作为输入,然后将该字符与字符串中的每个元素进行比较。然后打印并最终返回字符出现在字符串中的次数。

这是我提出的代码,但它没有以正确的方式运行。如果有人能解释并纠正错误,我会很感激。

我首先考虑编写一个比较两个字符的函数来检查它们是否相等,如下所示:

def func1(x1, x2):
    if x1 == x2:
        return True
    else:
        return False

然后,我想我会选择另一个主要功能:

def func2():
    ch1 = input("Enter one character. ")
    str1 = str(input("Enter a string. "))
    list_1 = list(str1)
    a = 0
    for 1 in list_1:
        if func1(ch1, list_1):
            a += 1
        else:
            a += 0
        print(a)
        return a

这里有什么错误?如果我选择“a”作为我的角色,然后输入一个五个字母的字符串作为我的字符串,该函数仍然告诉我字符串中只出现一个“a”。为什么这样,我该如何解决?

6 个答案:

答案 0 :(得分:6)

"YourString".count("Char")会做

答案 1 :(得分:1)

要解决您的问题,您只需要打印并返回

即可
def func2():
    ch1 = input("Enter one character. ")
    str1 = str(input("Enter a string. "))
    list_1 = list(str1)
    a = 0
    for 1 in list_1:
        if func1(ch1, list_1):
            a += 1
        else:
            a += 0
    print(a)  # <-- dedent
    return a  # <-- dedent

您不需要将字符串转换为列表来迭代它。如果它不执行任何操作,则不需要else子句。你不应该从for循环内部返回

def func2():
    ch1 = input("Enter one character. ")
    str1 = input("Enter a string. ")
    a = 0
    for c in str1:
        if c == ch:
            a += 1
        print(a)
    return a

更简单

def func2():
    ch1 = input("Enter one character. ")
    str1 = input("Enter a string. ")
    return str1.count(ch1)

答案 2 :(得分:1)

这是一个执行您想要的简单代码:

它返回字符ch出现在文本中的次数。

def test(ch, text): // ch is character and text is the string
    numAppears = 0
    for t in text:
        if t == ch:
            numAppears += 1
    return numAppears

示例:

>>> test("a", "saherbaderahwal")
4
>>> test("c", "hello")
0
>>> test(" ", "nice to meet you")
3
>>> 

答案 3 :(得分:1)

几种可能的方式。

使用列表

>>> len([x for x in test_string if x == test_char])

使用collections.Counter

>>> from collections import Counter
>>> print(Counter(test_string)[test_char])

答案 4 :(得分:0)

问题是return缩进了一个块到深,所以在比较列表的第一个字符后,函数返回。

(另一个问题是你的函数func1不仅命名不佳,而且太复杂了:

def cmp_chars(x, y):
    return x == y

虽然你真的根本不需要这个功能。)

答案 5 :(得分:0)

假设你放在那里的代码是正确格式化的,而不是你的return一个块 - 它看起来像是在for block中被调用了一次