質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1071閲覧

python KeyError: 'weight'のエラーの意味と解決方法を教えてください。

KentaIrie

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/07 13:51

編集2020/08/07 15:00

`# サイトからテキストにコピーしてきたものから英単語テストを作ろうとしました。

問1.accept
1.受け入れる
2.到達する
3.走る
4.考える
####上記のような形式で問題を出そうと考え、for文で50回分のテストを新たなテキストに書き出そうと考えました。しかし、KeyError: 'weight'というエラーが出てきたので、調べたのですが、このエラーの意味と解決方法がわからなかったので、ご教示いただきたいです。下にコードを張り付けておきます。

source = 'noun01.txt' with open (source, encoding='utf-8') as f: data = f.read() english_words = re.findall('[a-z]+',data) print (english_words) japanese_words = re.findall('\s.*\n', data) meanings = []#空のリスト for word in japanese_words:#for文で回す m = re.sub('\t|\n', '', word)#.sub('変化前','変化後',どこから) meanings.append(m)#初めのからのリストに入れていく words_dict =dict(zip(english_words, meanings)) n_tests =50 n_questions = len(words_dict) for test_num in range(n_tests): with open ('英単語テスト_{:02d}.txt'.format(test_num + 1), 'w') as f:#'w'を付けることで、もしそのファイルがなかったら作ってくれるし、かける f.write('出席番号:\n' '名前:\n\n' '第{}回英単語テスト\n\n'.format(test_num + 1)) for question_num in range(n_questions): question_word = random.choice(english_words) correct_answer = words_dict[question_word]#辞書型やから英語に対する日本語を抽出 meanings_copy = meanings.copy()#meaningsのままでやるとだんだん選択肢が減っていく meanings_copy.remove(correct_answer)#ダミーの選択肢を作る、正解ではないものを作る wrong_answer = random.sample(meanings_copy,3)#<-リスト型 answer_options = [correct_answer] + wrong_answer#correct_answerをリスト型に、足し算はリスト型のみ random.shuffle(answer_options)#順番を入れ替える f.write('問{}. {}\n\n'.format(question_num + 1, question_word)) for i in range(4): f.write('{}. {}\n'.format(i + 1, answer_options[i])) f.write('\n\n') ![イメージ説明](caed2d409ad27cdf6ecc4aab3aca7f2d.png) ![イメージ説明](f39e2ecd59655a22e25bda4ccc73cfbc.png)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/08/07 13:52

コードを画像じゃなくテキストで提示しましょう
KentaIrie

2020/08/07 14:00

申し訳ありません。こちらがコードになります。 import re import random source = 'noun01.txt' with open (source, encoding='utf-8') as f: data = f.read() english_words = re.findall('[a-z]+',data) print (english_words) japanese_words = re.findall('\s.*\n', data) meanings = []#空のリスト for word in japanese_words:#for文で回す m = re.sub('\t|\n', '', word)#.sub('変化前','変化後',どこから) meanings.append(m)#初めのからのリストに入れていく words_dict =dict(zip(english_words, meanings)) n_tests =50 n_questions = len(words_dict) for test_num in range(n_tests): with open ('英単語テスト_{:02d}.txt'.format(test_num + 1), 'w') as f:#'w'を付けることで、もしそのファイルがなかったら作ってくれるし、かける f.write('出席番号:\n' '名前:\n\n' '第{}回英単語テスト\n\n'.format(test_num + 1)) for question_num in range(n_questions): question_word = random.choice(english_words) correct_answer = words_dict[question_word]#辞書型やから英語に対する日本語を抽出 meanings_copy = meanings.copy()#meaningsのままでやるとだんだん選択肢が減っていく meanings_copy.remove(correct_answer)#ダミーの選択肢を作る、正解ではないものを作る wrong_answer = random.sample(meanings_copy,3)#<-リスト型 answer_options = [correct_answer] + wrong_answer#correct_answerをリスト型に、足し算はリスト型のみ random.shuffle(answer_options)#順番を入れ替える f.write('問{}. {}\n\n'.format(question_num + 1, question_word)) for i in range(4): f.write('{}. {}\n'.format(i + 1, answer_options[i])) f.write('\n\n')
y_waiwai

2020/08/07 14:06 編集

質問を編集してそこに追記してください それではコードが読めません
meg_

2020/08/07 14:30

コードにインデントがなく読みにくいです。
guest

回答1

0

ベストアンサー

english_wordsmeaningsの長さが一致していないのではないでしょうか?

投稿2020/08/07 14:35

meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問