繁体   English   中英

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

[英]How do I compare a character to all the characters in some string in Python?

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

这是我想出的代码,但是没有找到正确的方法。 如果有人可以解释并纠正错误,我将不胜感激。

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

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”在字符串中仅出现一次。 为什么会这样,我该如何解决?

"YourString".count("Char")

要解决您眼前的问题,您只需要使打印凹痕并返回

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)

这是一个简单的代码,可以满足您的需求:

它返回字符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
>>> 

几种可能的方式。

使用清单

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

使用collections.Counter

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

问题在于return值缩进了一个区块,因此比较该列表的第一个字符后,该函数返回。

(另一个问题是,函数func1不仅命名不正确,而且过于复杂:

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

虽然您实际上根本不需要任何功能。)

假设您放置在其中的代码格式正确,则不会使您的return代码缩进一格-好像它在for块中被调用了一次

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM