• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のランダムクイズの表示がうまくいきません・・・。)

複数のランダムクイズの表示がうまくいかない!

このQ&Aのポイント
  • 複数のランダムクイズの表示がうまくいかない問題について質問があります。
  • プログラムを作成しましたが、表示が思うようにいかずバラバラです。
  • どなたか分かる方いらっしゃいましたらご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これだと、連続した問題しか表示されないし、random_numberによっては5問表示されないです。 counter?の値を追ってみましょう 1回目のループでは counter=0+1=1 counter2=counter+2=3 counter3=counter+3=4 counter4=counter+4=5 counter5=counter+5=6 になります。 2回目のループでは counter=1+1=2 counter2=counter+2=4 counter3=counter+3=5 counter4=counter+4=6 counter5=counter+5=7 になります。以下同様に増えていきます。 ここで、random_number=6だったとすると 1回目→counter5=6で 第1レコードの問題を表示(radio name="Q5") 2回目→counter4=6で 第2レコードの問題を表示(radio name="Q4") 3回目→counter3=6で 第3レコードの問題を表示(radio name="Q3") 4回目→counter2=6で 第4レコードの問題を表示(radio name="Q2") 5回目→該当無し 6回目→counter=6で 第6レコードの問題を表示(radio name="Q1") →counter=random_numberでループ終了 となり、5問表示されます。 ただし、必ず連続した問題が表示されます。また、ラジオボタンはQ5からの逆順です。 では、random_number=2だったらどうでしょうか? 1回目→該当無し 2回目→counter=2で 第2レコードの問題を表示(radio name="Q1") →counter=random_numberでループ終了 と1問しか表示されません。 現在の構造をそのまま使いたいなら、 random_number=int(rnd*(total_records-5))+1+5 として、random_numberを6~total_recordsの範囲になるようにします。 よりランダムにする常套手段として ・1~total_recordsの乱数を5つ、同じ値にならないように用意する。 ・それぞれの乱数に該当するレコードを表示 とします。 あと、変数counterに初期値が無いまま、いきなりcounter=coutnter+1と使用しています。 一応、暗黙の初期値として0が入るので、今回は動作していますが、思わぬバグを引き起す原因となります。 whileループの前に count=0 と明示的に初期値を入れるような癖を身に付けましょう。

yk_happy
質問者

お礼

分かりやすく丁寧な解説ありがとうございました。 おかげさまで解決することが出来ました。 初期値を入れることも大事なんですね。バグを引き起こす原因になるのも初めて知りました。 これからはつけるように心がけていきたいと思います。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A