🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

499閲覧

3問1セットの質問項目6題をランダムかするには・・・

m1ku

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/01/01 02:10

前提・実現したいこと

現在、アンケートフォームを作成しています。
聞きたい質問のお題に6つのパターンがあり、1つのお題に3問の専用の質問が付随し、計18問あります。6つのお題を単にランダムで出題するのは容易ですが、それに専用の質問3問も順番通りに並んでいる必要があります。つまり、(1・2・3)と(4・5・6)・・・(16・17・18)の( )の中の順番は変えずに、( )間の出題をランダムにしたいのです。このランダム質問のあとは全員共通の質問に戻り、進行するにはどのようにすれば良いのかご教授頂けないでしょうか?ランダムと分岐を重ね合せるとできるように考えていますが、うまくまとめられません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m1ku

2021/01/01 06:36

不慣れな私でもわかりやすい簡潔なコードをありがとうございます! 結果まで示して頂き、このような質問もできることがわかり、安心致しました。 1週間ばかり悩んでいましたので、新年から解決して頂き、とても安心できました。 凄いかたは1時間も掛からないで実現できるのだと、恐縮するばかりです。 この度はお世話になり、ありがとうございました。
guest

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
lehshell

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lehshell

2021/01/01 04:02

defaultdict は不要でした。
m1ku

2021/01/01 06:29

こんなに素早く素晴らしいコードをありがとうございます! 曖昧なイメージと実際にコードにするのでは雲泥の差で、凄い方は本当に凄いと恐れ入りました。 新年から大変助かました! ありがとうございました。
lehshell

2021/01/01 12:40

辞書の 0 ~ 5 の KEY は不要でした。m(__)m わざわざコードを複雑にしていました。 改善したコードに書き直しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問