2017-10-06 4 views
0

私は短い答えのクイズ(文字列として入力)を作成しています。私はクイズを起動して実行している間に、私は少し醜い/扱いにくいと思われるコードを書いていることがわかりました。そして、b)異なる状況では拡張/再利用できません。ループまたは関数によるSQLAlchemyパラメータの作成

はここ(このパターンが異なる機能に数回使用されている)の例です:

answers_to_store = Answer(answer_1=user_answer_list[0], 
           answer_2=user_answer_list[1], 
           answer_3=user_answer_list[2], 
           answer_4=user_answer_list[3], 
           answer_5=user_answer_list[4]) 

これらのパラメータを作成するためのより良い方法はありますか?パラメータ名(answer_1)を変数などで置き換える方法がわかりません(タスクを簡単にするための唯一の方法です)。

私が見つけた唯一の方法は、ループを使用してテキストとしてパラメータを作成し、execで結果のコマンドを実行することです。これを達成する唯一の方法はより良い方法ですか?もう1つの制限は、クイズからの5つの回答を格納する記憶機能を持つことは、20の回答を格納する回答とは異なることを意味します(データベースにはその数の列があります)。

私は検索しようとしましたが、問題は私には正しい言葉がわかりません。私が思いついたのは、ループとexecで適切なコマンドを作成したことです。これを行うのに長い時間がかかるようです。

答えて

0

これは簡単な答えのクイズであると仮定して、questionIDとanswer_stringのデータベースを作成し、questionIDを使用してテーブルにアクセスし、出力をユーザー入力と比較します。

from sqlalchemy import create_engine, Table, MetaData, Column, Integer, VARCHAR 
from sqlalchemy.orm import mapper, sessionmaker 

Session = sessionmaker() 

engine = create_engine('sqlite:///foo.db') 
Session.configure(bind=engine) 

sess = Session() 

metadata = MetaData() 

question = Table('question', metadata, 
      Column('id', Integer, primary_key=True), 
      Column('answerKey', VARCHAR(None)) 
      ) 

class Question(object): 
    def __init__(self, answer): 
     self.answer = answer 


mapper(Question, question) 


def check(INquestionID, answerInput): 
    # Return an answer string associated with the question. 
    ans = sess.query(question.answer).filter(question.id == INquestionID).limit(1) 

    if answerInput == ans[0]: 
     return True 
    else: 
     return False 

このメソッドは、文字列(SQL Serverでは最大8000文字)を格納し、IDに基づいてアクセスし、格付けを比較します。

+0

こんにちは。ありがとう、残念ながら、それは複数の選択肢のクイズではない、各質問は答えとして文字列を持っているので、私はまだきちんとした方法でパラメータにアクセス/作成する方法を見ることができません。 – djaychela

+0

@djaychela文字列の入力は、クイズのかなり重要な部分です。私は編集を提案しました。 – brddawg

+0

また、回答文字列に対応するために回答を編集したことに気付くはずです。 – brddawg

関連する問題