0

次の点を考慮してください。

python を使用して、来年の家族のために秘密のサンタ スクリプトを作成しています。名前を描画する方法はわかりましたが (以下のコードを参照)、一度だけ実行する必要があります。フラスコフレームワークを使用して、抽選までの日数をカウントダウンするページを作成する予定です(これも理解しました)が、誰かが毎回ではなく、1回だけ抽選を行うようにするにはどうすればよいですかそのページにログオンしますか? 意味がわかりますか?

とにかく、ここに私のコードを示します。

# imports & initial Flask set up above

def do_matchup(names, draw, matches=None):
   if matches is None:
      matches = []

   while names:
       member = names.pop()
       recipient = choice(draw)

       if recipient != member:
           matches.append("%s=%s" % (member, recipient))
           draw.remove(recipient)
       else:
           names.append(member)

   return matches


@app.route("/")
def index():
    now = dt.datetime.now()
    draw_date = dt.datetime.strptime('10/1/2013', '%m/%d/%Y')
    days = draw_date - now
    family = ["member1", "member2", "member3", "member4", "member5", "Me"]
    hat_names = [name for name in family]
    matchup = do_matchup(family, hat_names)

    return render_template("base.html", now=now,
                                        draw_date=draw_date,
                                        days=days, 
                                        matchup=matchup)

テンプレートは、{% if now < draw_date %} 「抽選まであと x 日数あります」、{% else %} 「抽選結果を表示する」という基本的な html ページです。

ページが読み込まれるたびに、新しい描画が行われます。抽選を 1 回だけ行い、家族ごとに異なる結果が得られないようにするにはどうすればよいですか?

4

2 に答える 2

1

特定のページにアクセスするなど、シャッフルを実行する別の方法が必要です。そのコードは、シャッフルもデータベースに保存する必要があります。もう 1 つの方法は、現在の年のシャッフルが既に存在するかどうかを確認し、存在しない場合にのみ生成して保存することです。

基本的に、答えはシャッフルをデータベースなどに保存することです。

于 2012-12-30T18:47:57.797 に答える
1

データベースを使用しておらず、この少量の保存された結果だけが必要な場合は、マッチアップをファイルにピクルすることができます。次に、インデックスでファイルが存在するかどうかを確認し、存在する場合はファイルを読み取り、その一致を返します。それ以外の場合は、新しい対戦を生成して保存し、結果を返します。

于 2012-12-30T18:49:51.710 に答える