1

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

这是我想出的代码,但它的工作方式不正确。如果有人可以解释并纠正错误,我将不胜感激。

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

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 组成的字符串作为我的字符串,该函数仍然告诉我“a”只出现在字符串中一次。为什么会这样,我该如何解决?

4

6 回答 6

7

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

于 2013-03-05T20:34:31.167 回答
3

几种可能的方法。

使用列表

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

使用 collections.Counter

>>> from collections import Counter
>>> print(Counter(test_string)[test_char])
于 2013-03-05T20:16:55.907 回答
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)
于 2013-03-05T20:01:33.547 回答
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
>>> 
于 2013-03-05T20:03:15.673 回答
0

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

(另一个问题是您的函数func1不仅名称不佳,而且过于复杂:

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

虽然你真的根本不需要一个函数。)

于 2013-03-05T19:58:08.873 回答
0

假设您放在那里的代码格式正确,取消缩进您的return一个块 - 看起来它通过 for 块被调用一次

于 2013-03-05T19:58:32.123 回答