3

アルファベットをインポートしようとしていますが、各文字が 1 つの文字列ではなく 1 つの配列になるように分割しています。分割は機能しますが、それを使用して入力された単語に含まれる文字数を見つけようとすると、「TypeError: 'list' オブジェクトを暗黙的に str に変換できません」というエラーが表示されます。これを解決する方法を知っている人はいますか?どんな助けでも感謝します。コードは以下です。

import string
alphabet = string.ascii_letters
print (alphabet)
splitalphabet = list(alphabet)
print (splitalphabet)

x = 1
j = year3wordlist[x].find(splitalphabet)
k = year3studentwordlist[x].find(splitalphabet)
print (j)

編集:申し訳ありませんが、私の説明はちょっと悪いです、私は急いでいた. 私がやりたいことは、単語の個々の文字を数えることです。これは、スペリング ビー プログラムをコーディングしているためです。たとえば、正しい単語が 'because' で、スペリング ビーに参加しているユーザーが 'becuase' と入力した場合、正しい単語の文字と文字の位置、およびユーザーが入力した文字をプログラムでカウントする必要があります。単語とそれらを比較して、学生に点数を付けます-おそらく何らかの点数システムを使用します。私が抱えている問題は、それが正しいか間違っているかを簡単に言うことができないことです。単語が正しいに近い場合は 1 点を与えなければなりません。これが私がやろうとしていることです。

4

7 に答える 7

2

inキーワードを使用すると、はるかに簡単な解決策があります。特定の文字が含まれているかどうかを確認するために、アルファベットを分割する必要さえありません。

year3wordlist = ['asdf123', 'dsfgsdfg435']
total_sum = 0
for word in year3wordlist:
    word_sum = 0
    for char in word:
        if char in string.ascii_letters:
            word_sum += 1
    total_sum += word_sum

# Length of characters in the ascii letters alphabet:
# total_sum == 12
# Length of all characters in all words:
# sum([len(w) for w in year3wordlist]) == 18

編集:

OPがスペリングビーコンテストを作成しようとしているとコメントしているので、より具体的に答えてみましょう. 正しいスペルの単語と類似の文字列との間の距離は、さまざまな方法で測定できます。最も一般的な方法の 1 つは、「編集距離」または「レーベンシュタイン距離」と呼ばれます。これは、入力文字列を「正しい」文字列に書き換えるのに必要な挿入、削除、または置換の回数を表します。

その距離はPython-Levenshteinパッケージに実装されています。pip経由でインストールできます:

$ sudo pip install python-Levenshtein

そして、次のように使用します。

from __future__ import division
import Levenshtein

correct = 'because'
student = 'becuase'
distance = Levenshtein.distance(correct, student)  # distance == 2

mark = ( 1 - distance / len(correct)) * 10  # mark == 7.14

最後の行は、生徒の入力と正解の間の距離から成績を導き出す方法に関する単なる提案です。

于 2014-03-03T16:51:19.283 に答える
1

joinのクラス メソッドstrです。

''.join(splitalphabet)

また

str.join('', splitalphabet)
于 2014-03-03T16:43:30.547 に答える
1

必要なのは参加することだと思います:

>>> "".join(splitalphabet)
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
于 2014-03-03T16:39:04.090 に答える
0

リストsplitalphabetを文字列に変換して、使用find()できる関数で使用できるようにするにはseparator.join(iterable):

"".join(splitalphabet)

あなたのコードでそれを使用する:

j = year3wordlist[x].find("".join(splitalphabet))
于 2014-03-03T16:39:16.783 に答える