こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonで重複無しの出題をしたい。

Pytonで初歩的なcodeを書いております。

十個の四文字熟語があります。 重複のない四文字熟語を表示したいのです。

(1)のcodeでは上手く行くのですが、(2)の様にテキストファイルから読み込むと重複します。

多分while関数を使って重複が有ったら、再度randomで重複しないデータを抽出しろとでもやるのでしょうが、上手く行きません。

while以降どの様にcodingするのか、或いはそのほかの方法を教えて頂ければ嬉しいです。

宜しくお願い致します。

(1) リストから重複無しの熟語を表示する---OK
----------------------------
import random

四文字熟語=[
'0 百花繚乱',
'1 疾風迅雷',
'2 明鏡止水',
'3 不撓不屈',
'4 国士無双',
'5 魑魅魍魎',
'6 行雲流水',
'7 花鳥風月',
'8 天下無双',
'9 行雲流水'
]

空リスト = []

for カウンター in range(10):
一時保存 = random.choice(四文字熟語)
while 一時保存 in 空リスト:
一時保存 = random.choice(四文字熟語)
空リスト.append(一時保存)
print(一時保存)
これは重複無しの熟語を表示します。
---------------------

(1) テキストファイルから、重複無しの熟語を表示する---NG

import random

file = open("四文字熟語.txt")
lines = file.readlines()
file.close()

for line in lines:
line = line.rstrip("\n")

temp = random.choice(lines)
print(temp)

Shellには、
7 花鳥風月

6 行雲流水

6 行雲流水

7 花鳥風月

2 明鏡止水

9 行雲流水
9 行雲流水
8 天下無双

7 花鳥風月

0 百花繚乱
--------------------------
このほうほうだと、こんな風に表示されます。

投稿日時 - 2018-11-28 15:59:34

QNo.9562570

困ってます

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

ここの質問文は行頭のスペースなどが削除されるので、インデントの範囲がわからなくなってしまうのですが。Pythonだと、ループの範囲がわからなくなってしまいます。

前者は、whileで一度選択したものが選択された場合は選びなおしをしていますが、後者にはその処理がないので、違いがあって当然のように思います。
そもそも、重複せずにランダムに選択したいのであれば、random.sample()を使ったほうがいいでしょう。

投稿日時 - 2018-11-29 10:47:16

お礼

random.sample()でやって見ます。 有難うございました。

投稿日時 - 2018-11-29 16:39:37

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問