0

クイズを作ってみました。テキスト ファイルには、件名、質問、回答、および空スペース (この順序で) で構成されるブロックがあります。各行は、これらの項目の 1 つを表します。

組織学 巨核球の起源は? 血小板。

生理学 グランツマン血小板無力症で起こらない生理学的過程は? 血小板凝集。

組織学 赤血球生成過程で細胞が核を失うのはいつですか? オルトクロマトフィリック段階にあるとき。

生理学 止血のどの段階が凝固因子の作用を特徴としていますか? 二次止血。

生理学 関節内出血の特徴は何ですか? 関節腔内の血液。

生理機能 循環するだけでなく、血小板の一部も貯蔵されます。どこ?脾臓。

生理学 膜下領域を含む血小板ゾーンはどれですか? 周辺ゾーン。

ユーザーに質問を表示し、ユーザーがそう言ったときに答えを明らかにするプログラムのコーディングに成功しました。ただし、質問をランダムに表示したかったのです。それらを順番に表示するために使用したものは、Michael Dawson の本「絶対初心者のための Python プログラミング」に触発されました。著者が示した構造に厳密に従ったところ、うまくいきました。コードは次のとおりです。

#File opening function. Receives a file name, a mode and returns the opened file.
def open_file(file_name, mode):
    try:
        file = open(file_name, mode)
    except:
        print("An error has ocurred. Please make sure that the file is in the correct location.")
        input("Press enter to exit.")
        sys.exit()
    else:
        return file

#Next line function. Receives a file and returns the read line.
def next_line(file):
    line = file.readline()
    line = line.replace("/", "\n")
    return line

#Next block function. Receives a file and returns the next block (set of three lines comprising subject, question and answer.
def next_block(file):
    subject = next_line(file)
    question = next_line(file)
    answer = next_line(file)
    empty = next_line(file)
    return subject, question, answer, empty

#Welcome function. Introduces the user into the quizz, explaining its mechanics.
def welcome():
    print("""
        Welcome to PITAA (Pain In The Ass Asker)!
     PITAA will ask you random questions. You can then tell it to
    reveal the correct answer. It does not evaluate your choice,
    so you must see how many you got right by yourself.
    """)

def main():
    welcome()
    file = open_file("quizz.txt", "r")
    store = open_file("store.bat", "w")
    subject, question, answer, empty = next_block(file)
    while subject:
        print("\n")
        print("Subject: ", subject)
        print("Question: ", question)
        input("Press enter to reveal answer")
        print("Answer: ", answer)
        print("\n")
        subject, question, answer, empty = next_block(file)
    file.close()
    print("\nQuizz over! Have a nice day!")

#Running the program
main()
input("Press the enter key to exit.")

4 行のブロックをグループ化してランダム化するにはどうすればよいですか? 件名と質問でフィルタリングできればさらに良いでしょう。

4

2 に答える 2

1

整理するには、単純なクラスを作成するか、辞書を使用します。例えば:

クラスの実装

class Quiz():

    def __init__(self, question, answer, subject):
        self.question = question
        self.answer = answer
        self.subject = subject

これらの質問のインスタンスを作成し、それぞれの件名を作成して、属性に基づいて質問にアクセスできます。そのような:

q = Quiz("Question 1", "Answer 1", "Chemistry")
print(q.subject)
>>> Chemistry

新しいインスタンスをリストに追加して、リストをランダム化することができます

import random #Look up the python docs for this as there are several methods to use

new_list = []
new_list.append(q)
random.choice(new_list) #returns a random object in the list

ネストされた辞書を使用してこれを実行し、「件名」に基づいてドリルダウンすることもできます

new_dict = {'subject': {'question': 'this is the question', 
                        'answer': 'This is the answer'}}

しかし、独自のクラスを作成することで整理しやすくなると思います。

それが少し役立つことを願っています...

于 2013-10-14T16:16:56.420 に答える