前提・実現したいこと
現在、アンケートフォームを作成しています。
聞きたい質問のお題に6つのパターンがあり、1つのお題に3問の専用の質問が付随し、計18問あります。6つのお題を単にランダムで出題するのは容易ですが、それに専用の質問3問も順番通りに並んでいる必要があります。つまり、(1・2・3)と(4・5・6)・・・(16・17・18)の( )の中の順番は変えずに、( )間の出題をランダムにしたいのです。このランダム質問のあとは全員共通の質問に戻り、進行するにはどのようにすれば良いのかご教授頂けないでしょうか?ランダムと分岐を重ね合せるとできるように考えていますが、うまくまとめられません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
これぐらいですか?
python
1import random 2 3q = [["Xについて", "Xを知ってますか?", "Xは好きですか?", "Xを買いたいですか?"], 4 ["Yについて", "Yを知ってますか?", "Yは好きですか?", "Yを買いたいですか?"], 5 ["Zについて", "Zを知ってますか?", "Zは好きですか?", "Zを買いたいですか?"], 6 ["Pについて", "Pを知ってますか?", "Pは好きですか?", "Pを買いたいですか?"], 7 ["Qについて", "Qを知ってますか?", "Qは好きですか?", "Qを買いたいですか?"], 8 ["Rについて", "Rを知ってますか?", "Rは好きですか?", "Rを買いたいですか?"]] 9 10n = ["Aを知ってますか?", "Aは好きですか?", "Aを買いたいですか?", 11 "Bを知ってますか?", "Bは好きですか?", "Bを買いたいですか?"] 12 13for i in random.sample(q, 6): 14 print("ジャンル %s" %i[0]) 15 for j in i[1:4]: 16 print(" "+j) 17 18for j in n: 19 print(j) 20
結果は以下です。
shell
1> python questions.py 2ジャンル Yについて 3 Yを知ってますか? 4 Yは好きですか? 5 Yを買いたいですか? 6ジャンル Rについて 7 Rを知ってますか? 8 Rは好きですか? 9 Rを買いたいですか? 10ジャンル Pについて 11 Pを知ってますか? 12 Pは好きですか? 13 Pを買いたいですか? 14ジャンル Xについて 15 Xを知ってますか? 16 Xは好きですか? 17 Xを買いたいですか? 18ジャンル Zについて 19 Zを知ってますか? 20 Zは好きですか? 21 Zを買いたいですか? 22ジャンル Qについて 23 Qを知ってますか? 24 Qは好きですか? 25 Qを買いたいですか? 26Aを知ってますか? 27Aは好きですか? 28Aを買いたいですか? 29Bを知ってますか? 30Bは好きですか? 31Bを買いたいですか?
投稿2021/01/01 04:16
編集2021/01/01 04:17総合スコア24670
0
ベストアンサー
こんな感じでどうでしょうか?
Python
1import random 2#from collections import defaultdict 3 4# 専用質問 パターン 0 ~ 5 5sp_dic = { 6 0:('お題1', '質問1', '質問2', '質問3'), 7 1:('お題2', '質問4', '質問5', '質問6'), 8 2:('お題3', '質問7', '質問8', '質問9'), 9 3:('お題4','質問10','質問11','質問12'), 10 4:('お題5','質問13','質問14','質問15'), 11 5:('お題6','質問16','質問17','質問18') 12 } 13 14def special_quest(dic): 15 """ 16 dic format: {0:('お題1', '質問1', '質問2', ...), 1:(...), ...} 17 """ 18 #ans = defaultdict(list) 19 ans = dict() 20 idx = random.randrange(len(dic)) # 0 ~ 5 のどれか: 5 は len(dic)-1 21 print(dic[idx][0]) 22 for n in range(1, len(dic[idx])): 23 ans[dic[idx][n]] = input(dic[idx][n] + " > ") 24 return ans 25 26sp_ans = special_quest(sp_dic) 27print(*sp_ans.items()) 28# 以下共通の質問を行う
#改善コード
辞書の不要な KEY 0 ~ 5 を削除しリストに
Python
1import random 2 3# 専用質問 4sp_lst = [ 5 ('お題1', '質問1', '質問2', '質問3'), 6 ('お題2', '質問4', '質問5', '質問6'), 7 ('お題3', '質問7', '質問8', '質問9'), 8 ('お題4','質問10','質問11','質問12'), 9 ('お題5','質問13','質問14','質問15'), 10 ('お題6','質問16','質問17','質問18') 11 ] 12 13def special_quest(lst): 14 """ 15 lst format: [('お題1', '質問1', '質問2', ...), (...), ...] 16 """ 17 ans = dict() 18 idx = random.randrange(len(lst)) # 0 ~ 5 のどれか: 5 は len(lst)-1 19 print(lst[idx][0]) 20 for st in lst[idx][1:]: 21 ans[st] = input(st + " > ") 22 return ans 23 24sp_ans = special_quest(sp_lst) 25print(*sp_ans.items()) 26# 以下共通の質問を行う
投稿2021/01/01 03:38
編集2021/01/01 12:37総合スコア1156
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/01 06:36