2016-04-29 40 views
0

範囲から乱数を生成する最も単純なコードを考え出しますが、1つの数値(この場合は「2」)は除きます。ランダムな関数から数値を除外する方法は?

これを達成するために「if」と「while」が本当に必要ですか?

<!DOCTYPE html> 
<html> 
<body> 

<?php 
$x = rand(1,5); 
if ($x == 2) { 
    do { 
     echo "The number is: $x <br>"; 
     $x = rand(1,5); 
    } while ($x == 2); 
} 
echo "The number is: $x <br>"; 
?> 

</body> 
</html> 
+2

最初の2つのPHP行を削除するには、 'do'だけが必要です。またdoの中の 'echo'も削除してください。 –

+0

休憩時間。私は良い方法を見つけることを試みる時間を過ごす!!! – cronos

+0

また、実行ごとに異なる乱数を得るためには、あなたのための「シード」ジェネレータが必要です –

答えて

2

あなたがこれを行うことができます:

$exclude = array(2); 
while(in_array(($x = rand(1,5)), $exclude)); 
echo $x; 

ランドは、配列内の変数を返す可能性があるため、それが働くだろうその後、whileループリトリガー。

これで、除外するすべての数値の配列を作成できます。

0

1つの番号のみを除外する場合は、その番号に含まれていない許容可能な番号に置き換えてください。

<!DOCTYPE html> 
<html> 
<body> 

<?php 
$x = rand(1,4); // accept 1, 2, 3 or 4 with equal probability 
if ($x == 2) { 
    $x = 5; // if x = 2, change it to 5 
} 
echo "The number is: $x <br>"; 
?> 

</body> 
</html> 
+0

これは、「ランダム」数が他の何よりも4倍高い可能性を生み出します。あなたが番号を除外すると、あなたはその番号のどれかを得るチャンスが3分の1になります。しかし、あなたのコードでは、4以外の数字を取得するチャンスは1/4です。それは、一部のシステムでは大きな問題になる可能性があります。 – GrumpyCrouton

+0

なぜですか?私の推測では、確率は同じままになるでしょうか?私が1から5までの数字を選ぶと、私は2を選択する場合。私は袋に番号を返し、2が選択されている異なる数までピッキングを続ける! – cronos

+0

真。私はPythonに慣れていますが、rand(1,4)の結果は1、2、3ではなく4です。私は編集します。 – fislerdata

関連する問題