解決済み

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

  • 困ってます
  • 質問No.9562570
  • 閲覧数86
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 92% (35/38)

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 百花繚乱
--------------------------
このほうほうだと、こんな風に表示されます。

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

  • 回答No.1

ベストアンサー率 62% (404/651)

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

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

お礼率 92% (35/38)

random.sample()でやって見ます。 有難うございました。
投稿日時 - 2018-11-29 16:39:37
感謝経済
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝でトクする時代へ!感謝経済に参加しよう!

ピックアップ

ページ先頭へ