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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Python

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

受付中

pythonにおけるimport先のCSVファイルを正常に読み込みたい

Ataro
Ataro

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Python

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

1回答

0評価

1クリップ

247閲覧

投稿2022/01/28 10:47

pythonで様々なカテゴリの4択クイズを出すアプリケーションを作りたいと考えています。他のサイト(URL:https://daeudaeu.com/tkinter_quiz/) を参照してクイズの根幹部分は完成しました。これ単体ではうまく作動します。しかし、この根幹部分をボタンをクリックしたときに作動させようとしたとき、エラーが発生します。それは、回答者が4択のうちの何を選択しても一番左を選んだことになってしまい、一番左が正答である場合を除き、クリアできません。どうすればよいのでしょうか? なお、クイズの内容とその答えはCSVファイルで読み込んでいます。pythonのバージョンは310です。

python

import tkinter from tkinter import messagebox import random import csv # クイズの情報を格納したファイル CSV_FILE = "quiz.csv" count = 0 tki = tkinter.Tk() tki.geometry("300x200") tki.title("クイズ") def btn_click1(): class Quiz(): def __init__(self, master): '''コンストラクタ master:クイズ画面を配置するウィジェット ''' # 親ウィジェット self.master = master # クイズデータリスト self.quiz_list = [] # 現在表示中のクイズ self.now_quiz = None # 現在選択中の選択肢番号 self.choice_value = tkinter.IntVar() self.getQuiz() self.createWidgets() self.showQuiz() def getQuiz(self): '''クイズの情報を取得する''' # ファイルを開く try: f = open(CSV_FILE,encoding="utf-8") except FileNotFoundError: return None # CSVデータとしてファイル読み込み csv_data = csv.reader(f) # CSVの各行をリスト化 for quiz in csv_data: self.quiz_list.append(quiz) f.close() def createWidgets(self): '''ウィジェットを作成・配置する''' # フレームを作成する self.frame = tkinter.Frame( self.master, width=400, height=200, ) self.frame.pack() # ボタンを作成する self.button = tkinter.Button( self.master, text="OK", command=self.checkAnswer ) self.button.pack() def showQuiz(self): '''問題と選択肢を表示''' # まだ表示していないクイズからクイズ情報をランダムに取得 num_quiz = random.randrange(len(self.quiz_list)) quiz = self.quiz_list[num_quiz] # 問題を表示するラベルを作成 self.problem = tkinter.Label( self.frame, text=quiz[0] ) self.problem.grid( column=0, row=0, columnspan=4, pady=10 ) # 選択肢を表示するラジオボタンを4つ作成 self.choices = [] for i in range(4): # ラジオボタンウィジェットを作成・配置 choice = tkinter.Radiobutton( self.frame, text=quiz[i+1], variable=self.choice_value, value=i ) choice.grid( row=1, column=i, padx=10, pady=10, ) # ウィジェットを覚えておく self.choices.append(choice) # 表示したクイズは再度表示しないようにリストから削除 self.quiz_list.remove(quiz) # 現在表示中のクイズを覚えておく self.now_quiz = quiz def deleteQuiz(self): '''問題と選択肢を削除''' # 問題を表示するラベルを削除 self.problem.destroy() # 選択肢を表示するラジオボタンを削除 for choice in self.choices: choice.destroy() def checkAnswer(self): '''解答が正解かどうかを表示し、次のクイズを表示する''' # 正解かどうかを確認してメッセージを表示 if self.choice_value.get() == int(self.now_quiz[5]): messagebox.showinfo("結果", "正解です!!") global count count = count + 1 else: messagebox.showerror("結果", "不正解です...。正解は"+str(self.now_quiz[5])+"です。(あなたが選択したのは"+str(self.choice_value.get())+"です)") # 表示中のクイズを非表示にする self.deleteQuiz() if self.quiz_list: # まだクイズがある場合は次のクイズを表示する self.showQuiz() else: # もうクイズがない場合はアプリを終了する self.endAppli() def endAppli(self): '''アプリを終了する''' # クイズがもうないことを表示 self.problem = tkinter.Label( self.frame, text="終わりました。正解数は4問中"+str(count)+"問です" ) self.problem.grid( column=0, row=0, padx=10, pady=10 ) # OKボタンのcommandを変更 self.button.config( command=self.master.destroy ) app = tkinter.Tk() quiz = Quiz(app) app.mainloop() btn = tkinter.Button(tki,text="クイズスタート",command = btn_click1) btn.place(x = 140,y = 170)

なお、CSVファイルは次のようになっています。

quiz.csv

「一」の意味は?,1,2,3,4,0 「二」の意味は?,1,2,3,4,1 「三」の意味は?,1,2,3,4,2 「四」の意味は?,1,2,3,4,3

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Python

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