質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

解決済

2回答

346閲覧

辞書からランダムで取り出したキーを、変数に代入してpop()で消すことはできるのか

ritsu

総合スコア2

Python

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

0グッド

0クリップ

投稿2022/05/01 03:32

編集2022/05/01 05:15

pythonを初めて一か月、傑作展という何か作らねばならない学校の課題があったため、pythonで何か簡単なものを作れないかと考えました。そこで実用的な英単語フラッシュカードを作ってみることにしました。おおまかなコードはかけたのですが、一度でてきた問題を出ないようにしたいのです。できる範囲で試行錯誤したのですが、結局できませんでした。quesitonにランダムで取り出した要素のキーを代入したから、61,62行目の処理で消せると思ったのですができませんでした。どうすればよいでしょうか、

import random import time def count(): t=3 while t>0: print(t) time.sleep(1) t -= 1 word={ '奨励する':'encourage', '存在する':'exist', '~を比較する':'compare', '強く主張する':'insist', '記録する':'record', '~を促進する':'promote', '投票する':'vote', '~を消費する':'consume', } time.sleep(3) print('次の単語の英訳を答えよ(できれば一番スタンダードなものでお願いします)') time.sleep(3) print('準備はいいですか?') time.sleep(2) count() print('スタート!') time.sleep(1) while True: question=random.choice(list(word.keys())) for index, p in enumerate(word,1): print("__________第{}問__________".format(index)) time.sleep(2) print(question) answer=input() if answer=='0': break elif answer==word[question]: print('*'*10+' '+'正'+' '+'解'+' '+'!'+' '+'*'*10) else: print('*'*10+' '+'残'+' '+'念'+' '+'!'+' '+'*'*10) time.sleep(2) for key in question: word.pop(key) question=random.choice(list(word.keys()))

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

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

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

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

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

luuguas

2022/05/01 03:46

コードは画像ではなく、</>(コードの挿入)ボタンを押して出てくる```~```の中に書きましょう。コードは一部分でなく全体を載せたほうが良いです。
退会済みユーザー

退会済みユーザー

2022/05/01 03:54 編集

・コードは画像ではなく入力してください。 ・前の質問と内容がほとんどおなじに見えます https://teratail.com/questions/i6akjzra7c8g66 せっかく回答してくれている人がいるのに、それに対して何のレスポンスも返さず 似たような質問を繰り返しているのはなぜなんでしょう? random.shuffleを使った回答に対して”random.shuffleはできれば使いたくありません”というなら、それを前の質問の回答者さんに対して理由と一緒に提示するべきです。質問は編集できるので。
ritsu

2022/05/01 05:18

申し訳ありません、以後気を付けます。random.shuffleの()内が理解できず、かといってせっかくコードを書いてくださったのにもう一度聞くのも気が引けたため返信を後回しにしてしまいました。
guest

回答2

0

ベストアンサー

要素の削除はdel word[question] で可能です。
全体の流れがよくわからないのですが、こちらの判断で以下のようにしました。

python3

1import random 2import time 3 4def count(): 5 t=3 6 while t>0: 7 print(t) 8 time.sleep(1) 9 t -= 1 10 11word={ 12 '奨励する':'encourage', 13 '存在する':'exist', 14 '~を比較する':'compare', 15 '強く主張する':'insist', 16 '記録する':'record', 17 '~を促進する':'promote', 18 '投票する':'vote', 19 '~を消費する':'consume', 20} 21 22time.sleep(3) 23print('次の単語の英訳を答えよ(できれば一番スタンダードなものでお願いします)') 24time.sleep(3) 25print('準備はいいですか?') 26time.sleep(2) 27count() 28print('スタート!') 29time.sleep(1) 30 31count = 0 32while True: 33 if len(word) == 0: 34 break 35 question=random.choice(list(word.keys())) 36 count += 1 37 print("__________第{}問__________".format(count)) 38 39 time.sleep(2) 40 41 print(question) 42 43 answer=input() 44 if answer=='0': 45 break 46 elif answer==word[question]: 47 print('*'*10+' '+'正'+' '+'解'+' '+'!'+' '+'*'*10) 48 else: 49 print('*'*10+' '+'残'+' '+'念'+' '+'!'+' '+'*'*10) 50 51 time.sleep(2) 52 53 del word[question] 54 55 56

投稿2022/05/01 06:32

tatsu99

総合スコア5438

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

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

ritsu

2022/05/01 10:27

なるほど、わざわざありがとうございます!参考にさせていただきます
guest

0

なぜ、while ループの中で for文を使おうとするんですか?
ループは一つでいいでしょう。

Python

1import random 2import time 3 4def count(): 5 for t in range(3, 0, -1): 6 print(t) 7 time.sleep(1) 8 9word = { 10 '奨励する' : 'encourage', 11 '存在する' : 'exist', 12 '~を比較する' : 'compare', 13 '強く主張する' : 'insist', 14 '記録する' : 'record', 15 '~を促進する' : 'promote', 16 '投票する' : 'vote', 17 '~を消費する' : 'consume', 18} 19 20print('次の単語の英訳を答えよ(できれば一番スタンダードなものでお願いします)') 21print('準備はいいですか?') 22count() 23print('スタート!') 24 25for i in range(len(word)): 26 question = random.choice(list(word.keys())) 27 print(f'__________第{i+1}問__________') 28 print(question) 29 answer = input() 30 if answer == '0': 31 break 32 if answer == word[question]: 33 print('*'*10 + ' 正 解 ! ' + '*'*10) 34 else: 35 print('*'*10 + ' 残 念 ! ' + '*'*10) 36 word.pop(question)

投稿2022/05/01 06:32

kazuma-s

総合スコア8224

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

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

ritsu

2022/05/01 10:08

盲点でした、ありがとうございます!参考にさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問