前回はChat GPTでクイズのプログラムを作成しました。
前回は非常にシンプルなコードになっていました。
クイズ数を増やしたい時は外部にファイルやデータベースを作成している方が、プログラムとしては汎用性があります。
今回はCSVファイルを読み込んで、クイズを作成しています。
まず、簡単にCSVファイルとは何かから記載します。
私はmacですので、macでのCSVファイルの作成も記載します。
CSVファイルとは何か?
CSVファイルとは、Comma-Separated Valuesの略で、テキストベースのファイル形式の一種です。
CSVファイルは、各行がテキストのフィールドのリストで構成され、各フィールドはカンマで区切られています。
この形式は、様々なプログラムやアプリケーションでデータを簡単にやりとりするために使用されます。
Microsoft Excelでは、CSVファイルをインポートすることができます。
CSVファイルは、単純で汎用性が高く、データを扱うための一般的な方法として広く使用されています。
データが簡単にテキストで保存でき、ファイルサイズが小さいため、CSVファイルは非常に便利で使いやすいファイル形式の一つとされています。
CSVファイルをMacで保存するには?
テキストエディット、Microsoft Excel、Google Sheetsなどのアプリケーションを用います。
いろいろ方法はありますが、今回はテキストエディットを使用しています。
CSVファイルのテキスト(クイズ内容)Chat GPTに考えてもらって、そのデータをコピペするからです。
手順ですが、まず場所になります。
私はその他に入っていました。
わからなければ検索すれば出るでしょう。
開いてもらうと、
こんな画面になります。
ChatGPTでCSVでクイズを作ってもらって、それをコピペしました。
そのままだと保存できないので、標準テキストをクリックします。
名前をつけて.csvで保存します。今回はテストにしています。
これでCSVファイルの準備はできています。
ChatGPTにプログラムを作ってもらう。
事前にクイズのCSVを作って、下のプログラムと同じフォルダに格納しています。
今回はこんな感じで入力しました。
少し細かく指定しました。
import tkinter as tk
import csv
root = tk.Tk()
root.title(“Quiz”)
questions = []
with open(“quiz/questions.csv”, “r”, encoding=”utf-8″) as file:
reader = csv.reader(file)
for row in reader:
questions.append(row)
current_question = 0
question_label = tk.Label(root, text=questions[current_question][0])
question_label.pack()
var = tk.StringVar()
option1 = tk.Radiobutton(root, text=questions[current_question][1], variable=var, value=questions[current_question][1])
option1.pack()
option2 = tk.Radiobutton(root, text=questions[current_question][2], variable=var, value=questions[current_question][2])
option2.pack()
option3 = tk.Radiobutton(root, text=questions[current_question][3], variable=var, value=questions[current_question][3])
option3.pack()
option4 = tk.Radiobutton(root, text=questions[current_question][4], variable=var, value=questions[current_question][4])
option4.pack()
def next_question():
global current_question
current_question += 1
if current_question < len(questions):
question_label.config(text=questions[current_question][0])
option1.config(text=questions[current_question][1], value=questions[current_question][1])
option2.config(text=questions[current_question][2], value=questions[current_question][2])
option3.config(text=questions[current_question][3], value=questions[current_question][3])
option4.config(text=questions[current_question][4], value=questions[current_question][4])
else:
# クイズ終了時の処理
pass
next_button = tk.Button(root, text=”Next”, command=next_question)
next_button.pack()
root.mainloop()
これの出来上がりは、
この問題はまだCSVファイルから読み取っていません。
雛形です。
これを発展させて(ChatGPTにしてもらって)出来上がりのコードはこれです。
import csv
import random
import tkinter as tk
class QuizGUI:
def __init__(self, master):
self.master = master
self.master.title(“Quiz App”)
# CSVファイルを読み込む
with open(“quiz/questions.csv”, newline=””) as csvfile:
reader = csv.DictReader(csvfile)
self.questions = list(reader)
# 問題の数を取得する
self.num_questions = len(self.questions)
# 問題番号とスコアを初期化する
self.question_number = 0
self.score = 0
# 問題文、選択肢、正解を表示するためのラベルを作成する
self.question_label = tk.Label(self.master, text=””)
self.question_label.pack(pady=10)
self.choice1_button = tk.Button(self.master, text=””)
self.choice1_button.pack(pady=5)
self.choice2_button = tk.Button(self.master, text=””)
self.choice2_button.pack(pady=5)
self.choice3_button = tk.Button(self.master, text=””)
self.choice3_button.pack(pady=5)
self.choice4_button = tk.Button(self.master, text=””)
self.choice4_button.pack(pady=5)
# 問題を表示する
self.show_question()
def show_question(self):
# 問題番号が問題数を超えた場合はスコアを表示する
if self.question_number >= self.num_questions:
self.question_label.configure(text=f”スコア: {self.score}/{self.num_questions}”)
self.choice1_button.configure(text=”終了”, command=self.master.quit)
self.choice2_button.pack_forget()
self.choice3_button.pack_forget()
self.choice4_button.pack_forget()
return
# 現在の問題を取得する
question = self.questions[self.question_number]
# 問題文を設定する
self.question_label.configure(text=question[“question”])
# 選択肢をランダムに並び替える
choices = [question[“answer”], question[“wrong1”], question[“wrong2”], question[“wrong3”]]
random.shuffle(choices)
# 選択肢をボタンに設定する
self.choice1_button.configure(text=choices[0], command=lambda:self.check_answer(choices[0], question[“answer”]))
self.choice2_button.configure(text=choices[1], command=lambda:self.check_answer(choices[1], question[“answer”]))
self.choice3_button.configure(text=choices[2], command=lambda:self.check_answer(choices[2], question[“answer”]))
self.choice4_button.configure(text=choices[3], command=lambda:self.check_answer(choices[3], question[“answer”]))
# 問題番号を更新する
self.question_number += 1
def check_answer(self, choice, answer):
# 選択された回答が正解かどうかをチェックする
if choice == answer:
self.score += 1
# 次の問題を表示する
self.show_question()
if __name__ == “__main__”:
root = tk.Tk()
gui = QuizGUI(root)
root.mainloop()
出来上がりは、
出来上がりはこんな感じの4択クイズになっています。
問題を押してもその時点で正解かはわかりません。
最終的に点数が表示されるクイズが仕上がりました。
まとめ
CSVファイルを用いて、クイズアプリを作成しました。
CSVファイルを使用することで、さらにクイズ数を増やすことが可能と思われます。
ChatGPTへの記載によっては全然動かないコードも出てきます。
今回のプログラムも何度か試した結果です。
これはシンプルなプログラムですが、ChatGPTと協力すればコードを覚えていなくても、複雑なコードも記載できそうです。
以上参考になれば幸いです。
コメント