他の人が言及しているように、あなたは簡単なでテストを実装することができますword.count('e')
。これを単純な演習として行っていない限り、これは車輪の再発明を試みるよりもはるかに優れています。
コードの問題は、最後にインデックス-1
をテストしているため、最後の文字が2回カウントされることです。これは、Pythonでは文字列の最後の文字を返します。while letters >= 0
に変更して修正してくださいwhile letters > 0
。
コードを整理する方法は他にもあります(これが学習の練習であると仮定します)。
- Pythonは、
for
ループを使用して文字列を反復処理するための優れた方法を提供します。while
これは、ループを使用して独自のカウンター変数を維持するよりもはるかに簡潔で読みやすくなっています。ここですでに見たように、複雑さを追加するとバグが発生します。単純にする。
- ほとんどの言語には
+=
演算子があり、整数の場合は変数に金額を追加します。よりも簡潔ですcount = count + 1
。
- パラメータを使用して、カウントする文字を定義し、柔軟性を高めます。
char='e'
明らかなデフォルトがある場合にパラメータリストで使用するデフォルトの引数を定義します。
- 関数のより適切な名前を選択してください。この名前
has_no_e()
は、コードにeがないかどうかをコードがチェックしていると読者に思わせますが、実際にはeの出現をカウントします。
これをすべてまとめると、次のようになります。
def count_letter(word, char='e'):
count = 0
for c in word:
if c == char:
count += 1
return count
いくつかのテスト:
>>> count_letter('tee')
2
>>> count_letter('tee', 't')
1
>>> count_letter('tee', 'f')
0
>>> count_letter('wh' + 'e'*100)
100