1

文字と文字列を入力として取り、その文字を文字列内の各要素と比較する関数を作成する必要があります。次に出力し、最後にその文字が文字列に出現した回数を返します。

これは私が思いついたコードですが、正しく機能していません。誰かがエラーを説明して修正していただければ幸いです。

最初に、次のように、2 つの文字を比較して等しいかどうかを確認する関数を作成することを考えました。

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" を選択し、文字列として 5 つの a の文字列を入力した場合でも、関数は文字列に "a" が 1 回だけ出現したことを通知します。これはなぜですか、どうすれば修正できますか?

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が 1 ブロック深くインデントされているため、リストの最初の文字を比較した後、関数が返されることです。

(別の問題は、関数のfunc1名前が不十分であるだけでなく、複雑すぎるということです:

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

ただし、そのための関数はまったく必要ありません。)

于 2013-03-05T19:58:08.873 に答える
0

そこに置いたコードが正しくフォーマットされていると仮定すると、return1つのブロックのインデントが解除されます-forブロックを介して一度呼び出されているようです

于 2013-03-05T19:58:32.123 に答える