前提・実現したいこと
Pythonで英単語学習アプリを作成しております。
現在は全てのtextを読み込んで、乱数で単語・意味・例文を表示できております。
しかし沢山の英単語を取り出し表示すると、たまにしか出会えない単語が多すぎて学習にならないのです。
そこで、aならaで始まる単語だけを繰り返し学習し、次にbで始まる単語の学習をするようにしたいのです。 その為にEntryボックスにあるa~zをクリックしたら、その頭文字の英単語だけを出題するようにしたいのです。
発生している問題・エラーメッセージ
上記の処理ではエラーは出ておりませんが、期待しているようにcodingが出来ません。
該当のソースコード
Python3.8
1 2import tkinter as tk 3import random 4import textwrap # 文字列折り返し用 5import time 6 7root = tk.Tk() 8 9root.geometry('480x360') 10root.title('新難解英単語') 11 12font_word = font = ("Helevetica", 12, "bold") 13 14lbl1 = tk.Label(text='英単語:', font=font_word) 15lbl1.place(x=10, y=30) 16lbl2 = tk.Label(text='意味:', font=font_word) 17lbl2.place(x=10, y=80) 18lbl3 = tk.Label(text='備考:', font=font_word) 19lbl3.place(x=10, y=130) 20lbl4 = tk.Label(root, font=font_word) # 備考表示用 21lbl4.place(x=75, y=130) 22 23txt1 = tk.Entry(width=42, font=font_word, fg="red") # 英単語 24txt1.place(x=75, y=30) 25txt2 = tk.Entry(width=42, font=("Helevetica", 12, "bold")) # 意味 26txt2.place(x=75, y=80) 27 28btn1 = tk.Button(root, width=15, text='開始/次へ', font=font_word) 29btn1.place(x=40, y=250) 30 31btn2 = tk.Button(root, text="<-- 先頭のabcで学習グループを指定") 32btn2.place(x=200, y=200) 33 34txt3 = tk.Entry(root, width=8, bg="pink") # 学習する単の開始場所(start) 35txt3.place(x=80, y=200) 36 37 38def read_words(): 39 with open("文字列読込2ab.txt", 'r', encoding='utf_8') as file: 40 line = file.readlines() 41 42 eitango_words = [] # 英単語list 43 imi_words = [] # 意味list 44 ref_words = [] 45 46 line_count = 0 # 単語数カウンター 47 48 for name in line: 49 name = name.rsplit("\t") # tabで区切ったファイルの場合 50 if len(name) == 3: # 要素3個をそれぞれのlistへ追加する 51 eitango_words.append(name[0]) # 英単語をlistへadd 52 imi_words.append(name[1]) # 意味をlistへadd 53 ref_words.append(name[2]) # 例文とかをlistへadd 54 line_count += 1 55 56 for name in line: 57 first_letter = txt3.get() 58 #print("line 61 :", first_letter) 59 if name.startswith(first_letter): 60 print("line 63: ", name) 61 pass 62 # ここからどこへ飛ばすか不明 3/7/2021 63 return line_count, [eitango_words, imi_words, ref_words] 64 65 66def show_data(count, num, eitango_words, imi_words, ref_words): 67 eitango_word = eitango_words[num] 68 imi_word = imi_words[num] 69 ref_word = ref_words[num] 70 71# ボタン1(開始/次)の関数 72 def show_tango(event): 73 txt1.delete(0, tk.END) 74 txt2.delete(0, tk.END) 75 first_letter = txt3.get() 76 lbl4["text"] = "" 77 78 num = random.randrange(0, count) 79 eitango_word = eitango_words[num] 80 txt1.insert(tk.END, eitango_word) 81 82 def meaning(event): 83 txt2.delete(0, tk.END) 84 imi_word = imi_words[num] 85 ref_word = ref_words[num] 86 txt2.insert(tk.END, eitango_word) 87 lbl4["text"] = "" 88 lbl4["text"] = ref_word 89 90 message = textwrap.wrap(ref_word, 35) 91 ref = '\n'.join(message) 92 lbl4["text"] = ref 93 btn1.bind("<ButtonRelease>", meaning) 94 95 btn1.bind("<Button>", show_tango) 96 97 98first_letter = input("Enter first letter. --> :") 99txt3.insert(tk.END, first_letter) 100count, words = read_words() 101eitango_words = words[0] 102imi_words = words[1] 103ref_words = words[2] 104num = random.randrange(0, count) 105show_data(count, num, eitango_words, imi_words, ref_words) 106 107 108def destroy(): 109 root.destroy() 110 111 112btn3 = tk.Button(root, width=15, text='終わる', 113 font=font_word, command=destroy) 114btn3.place(x=270, y=250) 115 116root.mainloop() 117 118
試したこと
code中の次の処理で一度読み込んだデータをinput()関数でaとかbを入力すると、その分類の単語だけ抽出できているようですが、その後それらを表示させることが出来ません。
for name in line:
first_letter = txt3.get()
#print("line 61 :", first_letter)
if name.startswith(first_letter):
print("line 63: ", name)
補足情報(FW/ツールのバージョンなど)
OS:windows10
Python ver: 3.8
なお「文字列読込2ab.txt"」は次のような単語群です。tabで区切ってます。
abscOnd 逃亡する abscond the money 金を持ち逃げする
allegory 比喩、象徴、たとえ話 The wolf is an allegory of the Pope. そのオオカミは教皇の寓意像である。
bedlam 不穏な騒ぎ、混乱、気違いざた〔差別語〕 Stay away from their bedlam. あの人達に関わるな。
behest (古)命令、依頼 at his behest 彼の命令・要請で
candid 率直な、隠し撮りの(スナップ写真) You must be more candid if you want people to believe you.
canny 用心深い canny about 《be ~》~に抜け目がない、~を見抜く
dang げっ、いやだ、不愉快、damnの弱い形 ・I don't give a dang. 少しも気にしないよ。/そんなの屁とも思わない。
decency 【名】礼儀、品の良さ、良識、慎み He wasn't religious, but he believed in common decency.
edifice 大建造物、殿堂、〔手の込んだ〕組織、体系 edifice complex 巨大な建物
educe 〔事実から〕~を仮定する,〔潜在しているものを〕引き出す ・I succeeded in educing interesting responses from the informant.
faux 人造の,模造の,偽の フランス語でfalseの意味。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/09 05:26
2021/03/16 10:33
退会済みユーザー
2021/03/16 12:34
2021/03/16 23:41
2021/03/17 00:05
2021/03/17 01:10
2021/03/17 02:49