`# サイトからテキストにコピーしてきたものから英単語テストを作ろうとしました。
問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)
コードを画像じゃなくテキストで提示しましょう
申し訳ありません。こちらがコードになります。
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')
質問を編集してそこに追記してください
それではコードが読めません
コードにインデントがなく読みにくいです。
回答1件
あなたの回答
tips
プレビュー