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

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

詳細はこちら
Python

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

Q&A

解決済

2回答

3341閲覧

ランダムに出したリストを削除したい

_0120

総合スコア5

Python

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

0グッド

0クリップ

投稿2019/10/08 17:11

前提・実現したいこと

Pythonで四択クイズを作ろうとしています。
一度出した問題をもう一度出さないようにするために、
ランダムに出した問題をリストから削除してもう一度ランダムで問題を出したいと考えています。このようなコードにするとAttributeErrorと出ます。

発生している問題・エラーメッセージ

File "elearning2.py", line 26, in <module>
word.remove(random.choice(list(word.keys())))
AttributeError: 'dict' object has no attribute 'remove'

該当のソースコード

python

ソースコード

import random
word = {'「time」の意味は?\n1.時間 2.りんご 3.猫 4.食べ物':1,
'「money」の意味は?\n1.さくら 2.携帯 3.お金 4.パソコン':3,
'「dog」の意味は?\n1.髪 2.犬 3.虎 4.ウサギ':2,
'「apple」の意味は?\n1.りんご 2.コンセント 3.本 4.変数':1,
'「father」の意味は?\n1.寿司 2.電車 3.父親 4.アルバイト':3,
}

count = 0
score = 0

while count < 5:
count += 1

randomWord = random.choice(list(word.keys())) print(randomWord) inputword = input('\n答えを入力してください:') if inputword == word[randomWord]: print('正解です。') score += 20

     word.remove(random.choice(list(word.keys())))

else: print('不正解です。正解は%sです。'%(word[randomWord])) word.remove(random.choice(list(word.keys())))

print('あなたの点数は%d点でした。'%(score))

試したこと

一度出した問題をもう一度出さないためにrandom.choiceではなくrandom.suffleにしましたがうまくいきません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

一度出した問題をもう一度出さないためにrandom.choiceではなくrandom.suffleにしましたがうまくいきません。

辞書から (Q, A) を要素に持つリストに挿げ替えてやれば良いです。

Python

1import random 2 3question_to_answers = { 4 '「time」の意味は?\n1.時間 2.りんご 3.猫 4.食べ物': 1, 5 '「money」の意味は?\n1.さくら 2.携帯 3.お金 4.パソコン': 3, 6 '「dog」の意味は?\n1.髪 2.犬 3.虎 4.ウサギ': 2, 7 '「apple」の意味は?\n1.りんご 2.コンセント 3.本 4.変数': 1, 8 '「father」の意味は?\n1.寿司 2.電車 3.父親 4.アルバイト': 3, 9} 10 11 12score = 0 13 14question_with_answers = list(question_to_answers.items()) 15random.shuffle(question_with_answers) 16 17for i, (question, answer) in enumerate(question_with_answers): 18 #if 挑戦可能回数 <= i: 19 # break 20 21 print(question) 22 23 input_word = input('\n答えを入力してください:') 24 if int(input_word) == answer: 25 print('正解です') 26 score += 20 27 else: 28 print('不正解です。正解は%sです。' % answer) 29 30print('あなたの点数は%d点でした。' % score)

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
Python

特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2019/10/08 22:02

LouiS0616

総合スコア35668

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

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

_0120

2019/10/08 23:22 編集

ありがとうございます! for文で回してみます
guest

0

辞書から指定した要素を削除するには del を使ってください。

python

1a = {"a": 1, "b": 2, "c": 3} 2print(a) # {'a': 1, 'b': 2, 'c': 3} 3 4del a["a"] 5print(a) # {'b': 2, 'c': 3}

修正したコード

python

1import random 2 3word = { 4 "「time」の意味は?\n1.時間 2.りんご 3.猫 4.食べ物": 1, 5 "「money」の意味は?\n1.さくら 2.携帯 3.お金 4.パソコン": 3, 6 "「dog」の意味は?\n1.髪 2.犬 3.虎 4.ウサギ": 2, 7 "「apple」の意味は?\n1.りんご 2.コンセント 3.本 4.変数": 1, 8 "「father」の意味は?\n1.寿司 2.電車 3.父親 4.アルバイト": 3, 9} 10 11count = 0 12score = 0 13 14while count < 5: 15 count += 1 16 17 randomWord = random.choice(list(word.keys())) 18 print(randomWord) 19 inputword = int(input("\n答えを入力してください:")) 20 if inputword == word[randomWord]: 21 print("正解です。") 22 score += 20 23 else: 24 print("不正解です。正解は%sです。" % (word[randomWord])) 25 26 # 削除する。 27 del word[randomWord] 28 29print("あなたの点数は%d点でした。" % (score))

投稿2019/10/08 17:33

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問