2

私はpython 3.2で作業していますが、これをトラブルシューティングするのに多くの時間を費やしましたが、まだ頭を悩ませているようには見えません。

number = random.randint ( x0 ,xn )

乱数を生成しています。その目的は、私のコードが毎回違ったものになるようにすることです。

たとえば、私が書いたテキストの変数が 10 個あります。プログラムを実行するたびにこれらの変数が同じ順序で表示されないという問題を解決しました。

私が抱えている問題は、それらが毎回ランダムに表示されることです。毎回 10 のうち 1 つを選択しますが、最初は 10 で次は 9 です。以前のものを除外する方法がわかりません。

thelist = [0]

while i < x
     if number in thelist:
         >>>repeat<<<
     else:
         thelist.append (number)
         if ( number == x0 ):
             >>>something<<<
         elif ( number == x1 ):
             >>>something<<<

これは、コードが次のようになると想像するものです。ループするたびに、リストにもう1つの数字が追加されるため、リストに既にある数字を選択するたびに、ランダムなすべての数字を使用するまでループを繰り返します.randint はプルできます。

4

2 に答える 2

3

シャッフル関数は次のとおりです。

import random

max = 15
x = list(range(max+1))

for i in range(max, 0, -1):
    n = random.randint(0, i)
    x[n], x[i] = x[i], x[n]

これは、ソートされた数字のリストから始まります[0, 1, ... max]

次に、インデックス 0 からインデックス max までの数値を選択し、インデックス max と交換します。

次に、インデックス 0 からインデックス max-1 までの数値を選択し、インデックス max-1 と交換します。

など、max-2、max-3、... 1 の場合

ようすけさばいが正しく指摘しているように、これは を呼び出すのと同じ効果がありrandom.sample(range(max+1), max+1)ます。これによりmax + 1、 から一意のランダム値が選択されrange(max+1)ます。つまり、順序を入れ替えるだけです。ドキュメント: http://docs.python.org/2/library/random.html#random.sample

提案したアルゴリズムのラインに沿って何かが必要な場合は、次のようにすることができます。

import random

max = 15
x = range(max+1)
l = []

for _ in range(max+1):
    n = random.randint(0,max)
    while n in l:
        n = random.randint(0,max)
    l.append(n)
于 2012-10-31T05:36:52.657 に答える
1

あなたの説明とサンプルコードについて私が理解していることから、ランダムな順序でとのthelist間のすべての整数になりたいと思っています。もしそうなら、リストをその場でシャッフルする で非常に簡単にそれを達成できます:x0xnrandom.shuffle()

import random

x0 = 5
xn = 15

full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)
于 2012-10-31T06:07:54.200 に答える