Hallo,
ich suche eine Möglichkeit zufällig true/false auszugeben jedoch mit Beeinflussungsmöglichkeiten.
Beispiel: Ich möchte zu 70% true haben und zu 30% false.
Könnt ihr mir helfen ?
Automatisch zusammengefügt:
Habe jetzt gerade erst gesehen das es einen Web-Programmierungs Abteil gibt, kann diesen Thread wer verschieben ?
[PHP] Random mit Beeinflussungsmöglichkeit
-
djkobi -
28. Juni 2016 um 14:03 -
Erledigt
Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
-
-
[PHP] Random mit Beeinflussungsmöglichkeit? Schau mal ob du hier fündig wirst!
-
Hallo djkobi
Die rand Funktion zusammen mit einer Fallunterscheidung sollte da ausreichen.Gruß
Chris -
Du legst Dir ein File mit folgendem Inhalt an:
true
true
true
true
true
true
true
false
false
false(7x true, 3x false)
Und dann so:
head -`grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1` file|tail -1 -
Du legst Dir ein File mit folgendem Inhalt an:true
true
true
true
true
true
true
false
false
false(7x true, 3x false)
Und dann so:
head -`grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1` file|tail -1Ich möchte ich es in PHP und zusätzlich muss dieser Wert variable sein.
hmm...
Automatisch zusammengefügt:
Hallo djkobi
Die rand Funktion zusammen mit einer Fallunterscheidung sollte da ausreichen.Gruß
ChrisIch kenne die rand Funktion jedoch weiß ich nicht wie du das mit der Fallunterscheidung meinst.
Hast du ein Beispiel für mich ? -
Läuft das PHP Script denn permanent, also ist dort eine Schleife drin, oder wird die Datei immer wieder erneut ausgeführt? Und worüber wird die Datei angesprochen: Webserver oder Konsole?
Das Problem wird denk ich sein zu erkennen wie oft bereits "true" oder "false" ausgegeben wurde, da du ja unbedingt ein bestimmtes Verhältnis haben willst.
-
Läuft das PHP Script denn permanent, also ist dort eine Schleife drin, oder wird die Datei immer wieder erneut ausgeführt? Und worüber wird die Datei angesprochen: Webserver oder Konsole?Das Problem wird denk ich sein zu erkennen wie oft bereits "true" oder "false" ausgegeben wurde, da du ja unbedingt ein bestimmtes Verhältnis haben willst.
Ich habe einen Webserver wo eine Variable zmb. 70/30/50... ausgiebt wenn die Datei erneut ausgeführt wird.
Ich möchte nun zu 70/30/50 %true ausgeben.Ja ich weiß nicht eventuell in eine DB speichern, dachte halt es gibt eine Methode dafür und ihr wisst die vll.
-
[...]Ich kenne die rand Funktion jedoch weiß ich nicht wie du das mit der Fallunterscheidung meinst.
Hast du ein Beispiel für mich ?Eine Fallunterscheidung kann in PHP mit if umgesetzt werden.
Geht es denn Darum, dass bei 100 (bzw. einer bestimmten Anzahl) exakt das Verhältinis 30%/70% erreicht wird, oder soll es nur für sehr viele "Ziehungen" am Ende etwa 30%/70% sein, (also wäre 69.95% / 30.05% auch Ok).
-
Eine Fallunterscheidung kann in PHP mit if umgesetzt werden.
Geht es denn Darum, dass bei 100 (bzw. einer bestimmten Anzahl) exakt das Verhältinis 30%/70% erreicht wird, oder soll es nur für sehr viele "Ziehungen" am Ende etwa 30%/70% sein, (also wäre 69.95% / 30.05% auch Ok).
69.95% / 30.05% wäre auch ok.
Es geht nur darum ca. auf diesen Wert zukommen. -
Es geht nur darum ca. auf diesen Wert zukommen.Ok, dann musst du nicht Speichern, was du schon ausgegeben hast, sondern kannst es nach meiner Idee machen.
PS: Hast du inzwischen herausgefunden, wie du aus rand und if das Verhältnis bestimmen kannst, oder brauchst du weiter Tipps?
-
Ok, dann musst du nicht Speichern, was du schon ausgegeben hast, sondern kannst es nach meiner Idee machen.
PS: Hast du inzwischen herausgefunden, wie du aus rand und if das Verhältnis bestimmen kannst, oder brauchst du weiter Tipps?
Habe gerade noch was anderes zu tun kannst mir aber gerne einen tipp geben
-
Lass dir eine zufällige Zahl zwischen 0 und 1 generieren. Falls größer als 0.3, return true, else return false
-
Probiers mal damit:
PHP
Alles anzeigen<?php function truefalse($trueperc, $falseperc) { if (($trueperc + $falseperc) !== 100) { echo 'Error invalid percentages'; return -1; } $trueperc = $trueperc / 100; $falseperc = $falseperc / 100; $perc = mt_rand() / mt_getrandmax(); echo $trueperc."\n"; echo $falseperc."\n"; echo $perc."\n"; if ($perc > $falseperc) { return 1; } elseif ($perc < $trueperc) { return 0; } } for ($i=0; $i < 10; $i++) { echo truefalse(70, 30)."\n"; } ?> [/php] Test Ausgabe: [code] root@raspberrypi:/tmp# php -f tf.php 0.7 0.3 0.26405566943067 0 0.7 0.3 0.58127148243658 1 0.7 0.3 0.22789691306087 0 0.7 0.3 0.45036662484071 1 0.7 0.3 0.39790685307137 1 0.7 0.3 0.8770353905284 1 0.7 0.3 0.35928377246451 1 0.7 0.3 0.27084061609155 0 0.7 0.3 0.68656367840551 1 0.7 0.3 0.1544806431767 0 root@raspberrypi:/tmp#
Die Zeilen
echo $trueperc."\n";
echo $falseperc."\n";
echo $perc."\n";
einfach auskommentieren wenn du die Funktion tatsächlich verwenden willst, natürlich ist die for Schleife auch nur zum testenAllerdings glaub ich ehrlich gesagt nicht dass das deiner Anforderung entspricht
-
Lass dir eine zufällige Zahl zwischen 0 und 1 generieren. Falls größer als 0.3, return true, else return falseDanke es funktioniert jetzt alles
-
Das Problem mit der Zufälligen Zahl ist aber das du nicht wirklich ein Verhältnis von 70% true, 30% false erreichst da die Generierung der zufälligen Zahl sich nicht an diese Vorgabe hält. Wenn man sich nur an die zufällige Zahlgenerierung hält kann auch öfter als 70% true erzeugt werden.
Um das zu erreichen musst du IMHO vorherige Zustände (true/false) speichern und bei der nächsten Generierung beachten. Also von wie viel Generierungen kam wie oft false und wie oft true.Selbst das Beispiel von tom.angelripper funktioniert nicht derart korrekt:
Code
Alles anzeigenroot@raspberrypi:/tmp# cat truefalse_source true true true true true true true false false false root@raspberrypi:/tmp# for x in {1..10}; do head -`grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1` truefalse_source | tail -1; done false true false false false false true true true true root@raspberrypi:/tmp#
Da kommt öfter "false" raus als es sollte.
-
Hallo zusammen,
habe gerade selbst mal einige kleine tests gemacht und musst leider festestellen, dass rand(0,1) integer liefert und damit immer das Ergebnis 50/50 erreicht wird. Folgendes Skript kommt aber meist um die 70% raus.
[code=php]$tr = 0;
$fl = 0;
for($i = 0; $i < 1000; ++$i){
if(mt_rand(0,100) < 70){
++$tr;
}else{
++$fl;
}
}
echo "TR:".$tr."<br/>\n";
echo "FL:".$fl."<br/>\n";[/php]Gruß
Chris
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!