1. ホーム
  2. python

[解決済み] TypeError: Python 3 で関数を呼び出すときは list ではなく str でなければならない

2022-02-24 12:09:43

質問

例えばeのような文字を数える関数を作りました。

def count_letter(sentence, accents, case):

    lower_case_e = ['e']
    upper_case_E = ['E']
    accent_lower_case = ['é', 'ê', 'è']
    accent_upper_case = ['É', 'Ê', 'È']

    for character in sentence:#If statement for optional argument where ignore_accents == True and ignore_case == False.
        #This loop will count lower case and upper case e as differente letters but will treat accented characters the same.

        if accents == True and case == False:
            lower_case_count = sentence.count(lower_case_e)
            accent_lower_case_count = sentence.count(accent_lower_case)
            upper_case_count = sentence.count(upper_case_E)
            accent_upper_case_count = sentence.count(accent_upper_case)

            total_e_count = lower_case_count + accent_lower_case_count
            total_E_count = upper_case_count + accent_upper_case_count

            return {'Total number of lower case e in sentence ignoring accents':total_e_count, 'Total number of upper case E in sentence ignoring accents':total_E_count }

この関数のポイントは、eという文字を数えて、それが小文字か大文字か、あるいはアクセントがあるかどうかによって、文字を合計することである。sentence.txtというテキストファイルを作ったら、こんな感じになりました。

Testing if function can count letter e or E.

以下のコードでファイルを読み込んでいます。

# Reading the data from sentence.txt as a string
with open('sentence.txt', 'r') as Sentence_file:
    Sentence_string=Sentence_file.read().replace('\n', '')

そして、ファイルを読み込んだ後、次のように関数を呼び出そうとします。

count_letter(sentence, True, False)

しかし、これを実行しようとすると、次のようなエラーが発生します。

TypeError: must be str, not list

何が間違っているのか、どなたかお分かりになりますか?このエラーは、私がtxt.fileを読む方法にあるのでしょうか?どんな提案でも、とてもありがたいです。

エラーのフルトレースはこのようになります。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-b171590ddd67> in <module>()
     29 with open('Test_Sentence1.txt', 'r') as Sentence1_file:
     30     Sentence1=Sentence1_file.read().replace('\n', '')
---> 31 count_letter_e(Sentence1, True, False)
     32 

<ipython-input-2-b171590ddd67> in count_letter_e(sentence, accents, case)
     18         if accents == True and case == False:#If statement for optional argument where ignore_accents == True and ignore_case == False.
     19             #This loop will count lower case and upper case e as differente letters but will treat accented characters the same.
---> 20             lower_case_count = sentence.count(lower_case_e)#counting lower case e with no accent from the sentence
     21             accent_lower_case_count = sentence.count(accent_lower_case)#counting lower case e with accents from the sentence
     22             upper_case_count = sentence.count(upper_case_E)#counting upper case E with no accent from the sentence

TypeError: must be str, not list

解決方法は?

は、" count() "関数は、入力として文字列のみを受け付けます。例えば

lower_case_count = 0
for lower_case_e_char in lower_case_e:
    lower_case_count += sentence.count(lower_case_e_char)
print(lower_case_count)