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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

706閲覧

なぜ136単語以上の辞書が出来ない?

ikunaka

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/14 22:24

前提・実現したいこと

1180単語以上入った簡易な辞書を作りたい。

###ここに質問の内容を詳しく書いてください。
VScodeで辞書を作っています
最近、プログラミング教室に行き始めて、辞書を作る授業があり、
言われるがままプログラムを打ち、終了しましたしました、
なので、僕はプログラムの内容(文法?)についてはくわしく分かりません。

dictionarydata.csvに

単語,読み(カナ),意味

able,エイブル,できる

abroad,アブロード,外国へ

absent,アブセント,欠席の

accident,アクスィデント,事故

...
と書いていき、136行(135単語)までは普通にデバッグ(python file)したら、辞書がでてくるのですが、
137行(136単語)以上書くと、エラーが出てきます。
なぜでしょうか。また、どうしたら辞書がだせますか。

発生している問題・エラーメッセージ

エラーメッセージ 例外が発生しました: IndexError list index out of range File "D:\zisyo2\dictionary_nibunn.py", line 105, in BrowseTab print(dicdata[i][0] + dicdata[i][1] + dicdata[i][2]) File "D:\zisyo2\dictionary_nibunn.py", line 134, in <module> BrowseTab()

該当のソースコード

python

1 2 3import csv 4import tkinter as tk 5import tkinter.ttk as ttk 6 7#csv読み込み/配列へ格納 8csv_file = open('D:\zisyo2\dictionarydata.csv','r',encoding='utf-8',errors='',newline='') 9dicfile = csv.reader(csv_file,delimiter=',',doublequote=True,lineterminator='/r/n',quotechar='"',skipinitialspace=True) 10header = next(dicfile) 11dicdata = [row for row in dicfile] 12dicdatalen = len(dicdata) 13print(dicdatalen) 14print(dicdata) 15 16def SearchWord(): 17 resultTreeview.delete(*resultTreeview.get_children()) 18 searchKey = sbEntry.get() 19 low = 0 20 high = dicdatalen 21 statelabel['text'] = '[' + str(searchKey) + ']を検索開始' 22 print('[' + str(searchKey) + ']を検索開始') 23 while low <= high: 24 print(low,high) 25 mid = (low + high) // 2 26 print(mid) 27 guess = dicdata[mid][0] 28 if guess == searchKey: 29 print(str(guess) + '〇') 30 resultAry = [] 31 for i in range(3): 32 resultAry.append(dicdata[mid][i]) 33 resultTreeview.insert('', 'end', values=resultAry) 34 break 35 else: 36 print(str(guess) + '×') 37 j = 1 38 while True: 39 print(guess[:j].lower(),searchKey[:j].lower()) 40 if guess[:j].lower() > searchKey[:j].lower(): 41 high = mid - 1 42 break 43 elif guess[:j].lower() < searchKey[:j].lower(): 44 low = mid + 1 45 break 46 elif guess[:j].lower() == searchKey[:j].lower(): 47 j += 1 48 resultTreeview.pack(side=tk.LEFT,fill=tk.X) 49 50 51#tab1 52def SearchBarTab(): 53 #検索バー(SearchBar = sb) 54 topFrame = ttk.LabelFrame(tab1,text='検索バー') 55 topFrame.pack(fill=tk.X) 56 sblabel = tk.Label(topFrame,text='検索:') 57 sblabel.pack(side=tk.LEFT) 58 global sbEntry 59 sbEntry = ttk.Entry(topFrame,width=35) 60 sbEntry.pack(side=tk.LEFT) 61 button = ttk.Button(topFrame,text='検索',command=SearchWord) 62 button.pack(side=tk.LEFT) 63 64 65 #ステータスバー 66 stateFrame = tk.Frame(tab1) 67 stateFrame.pack(side=tk.TOP,fill=tk.X) 68 global statelabel 69 statelabel = tk.Label(stateFrame,text='検索する言葉を入力し、検索してください。',bd=1) 70 statelabel.pack(side=tk.LEFT,fill=tk.X) 71 72 #検索結果ツリービュー 73 bottomFrame = ttk.LabelFrame(tab1,text='該当データ') 74 bottomFrame.pack(side=tk.TOP,fill=tk.X) 75 print(header) 76 global resultTreeview 77 resultTreeview = ttk.Treeview(bottomFrame,height=12) 78 resultTreeview['columns'] = (1,2,3) 79 resultTreeview['show'] = 'headings' 80 resultTreeview.column(1,width=120,stretch=False) 81 resultTreeview.column(2,width=120,stretch=False) 82 resultTreeview.column(3,width=120,stretch=False) 83 resultTreeview.heading(1,text=header[0]) 84 resultTreeview.heading(2,text=header[1]) 85 resultTreeview.heading(3,text=header[2]) 86 resultTreeview.pack(side=tk.LEFT, fill=tk.X) 87 scroll_bar =tk.Scrollbar(bottomFrame, command=resultTreeview.yview) 88 scroll_bar.pack(side=tk.RIGHT, fill=tk.Y) 89 90 91 92#tab2 93def BrowseTab(): 94 topFrame2 = ttk.LabelFrame(tab2,text='登録データ') 95 topFrame2.pack(fill=tk.BOTH) 96 print(header) 97 dataTreeview = ttk.Treeview(topFrame2,height=15) 98 dataTreeview['columns'] = (1,2,3) 99 dataTreeview['show'] = 'headings' 100 dataTreeview.column(1,width=120,stretch=False) 101 dataTreeview.column(2,width=120,stretch=False) 102 dataTreeview.column(3,width=120,stretch=False) 103 dataTreeview.heading(1,text=header[0]) 104 dataTreeview.heading(2,text=header[1]) 105 dataTreeview.heading(3,text=header[2]) 106 for i in range(dicdatalen): 107 print(dicdata[i][0] + dicdata[i][1] + dicdata[i][2]) 108 resultAry = [] 109 resultAry.append(dicdata[i][0]) 110 resultAry.append(dicdata[i][1]) 111 resultAry.append(dicdata[i][2]) 112 dataTreeview.insert('','end',values=resultAry) 113 dataTreeview.pack(side=tk.LEFT, fill=tk.BOTH) 114 scroll_bar =tk.Scrollbar(topFrame2, command=dataTreeview.yview) 115 scroll_bar.pack(side=tk.RIGHT, fill=tk.BOTH) 116 117#メインウィンドウの作成 118root = tk.Tk() 119 120#ウィンドウ名 121root.title(u"辞書") 122root.geometry() 123 124#ここから中身 125#ノートブック 126nb = ttk.Notebook() 127 128#タブの作成 129tab1 = tk.Frame(nb) 130tab2 = tk.Frame(nb) 131nb.add(tab1,text="検索",padding=3) 132nb.add(tab2,text="閲覧",padding=3) 133nb.pack(side=tk.LEFT,expand=1,fill='both') 134 135SearchBarTab() 136BrowseTab() 137 138tk.mainloop() 139 140 141 142 143 144 145

試したこと

もっとひどくなりそうで何もしてません。

補足情報(FW/ツールのバージョンなど)

Python 3.7.4 32-bit

イメージ説明

イメージ説明

関係ないかもしれませんが、上のエラーも気になります。

イメージ説明
ドーでも良いかもしれませんが、

プログラムの[i]の所にマウスをもっていくと上に135と表示されました。

イメージ説明

イメージ説明

イメージ説明

イメージ説明

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

dictionarydata.csv の 136単語目付近で、 項目(列)が不足していないでしょうか。
不足しているとエラーになるので、足してみて下さい。

もし、それでも治らない場合、

print(dicdata[i][0] + dicdata[i][1] + dicdata[i][2])
の前に

print(dicdata[i])

とすると、何が表示されるでしょうか。(特にエラーになる直前で)

投稿2019/08/14 22:37

編集2019/08/14 22:38
mokemokechicken

総合スコア948

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

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

ikunaka

2019/08/14 23:26

137行目の can,キャン,できる というところが can,キャン.できる になってました。 直したらちゃんと動きました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問