Lotto richtig tippen
Re: Lotto richtig tippen
Mittlerweile mag ich die If-Schleife irgendwie, keine Ahnung warum.
Re: Lotto richtig tippen
...täglich (je nach dem wie hoch der jackpot ist)
Re: Lotto richtig tippen
Du deklarierst $a als Integer und vergleichst die Variable dann mit einem String. Das funktioniert zwar in PHP, ist aber trotzdem ein grober Fehler.buddy67 hat geschrieben:11.01.2022 19:06:41Code: Alles auswählen
for ($a = 0; $a <= 5 ; $a++) { ... } if($a == "5" ){ ... }
Versuche es mal so, dann wirst du sehen dass dein Code nicht funktioniert:
Code: Alles auswählen
if($a === "5" ){...
Re: Lotto richtig tippen
In dem Fall wuerde ich die Werte gleich passend generieren. Das scheint mir einfacher zu sein als hinterher zu pruefen.buddy67 hat geschrieben:11.01.2022 19:36:41nun möchte ich das array noch darauf prüfen, ob die
erste zahl im bereich von 1-9 liegt, die
zweite zahl im bereich von 10-18, die
dritte zahl im bereich von 19-27, die
vierte zahl im bereich von 28-36 die
fünfte zahl im bereich von 37-45 und die
sechste zahl im bereich von 46-49
Aber ich hatte Lust ein bisschen zu coden. Hier ein Prograemmchen, das so eine Pruefung durchfuehrt:
Code: Alles auswählen
<?php
$a = range(1, 49);
shuffle($a);
$a = array_slice($a, 0, 6);
sort($a, SORT_NUMERIC);
print_r($a);
foreach (range(1, 49, 9) as $i => $step) {
if ($a[$i] < $step || $a[$i] >= $step + 9) {
echo "$a[$i] not in required range\n";
}
}
Btw: Zaehlschleifen sollten wenn moeglich diese Form haben:
Code: Alles auswählen
for ($a = 0; $a < 6 ; $a++) {
Use ed once in a while!
Re: Lotto richtig tippen
ich lass mir ja einreden, dass man schleifen mit nur einer if machen kann wenn man sprünge in der sprache hat. zB so in pseudocode
Code: Alles auswählen
marker loopbody;
[... schleifenkörper ...]
if [...]: goto loopbody;
aber wer macht das schon so
Re: Lotto richtig tippen
...funktioniert super. Habe ich schon eingebaut Aber nach einigen Durchläufen des Scripts denke ich, dass so (step 9) zu viele Kombinationen rausgeschmissen werden. Aber ich spiele mal ein wenig mit den Abständen herum. Vielen Dank!!!Meillo hat geschrieben:11.01.2022 20:23:41In dem Fall wuerde ich die Werte gleich passend generieren. Das scheint mir einfacher zu sein als hinterher zu pruefen.buddy67 hat geschrieben:11.01.2022 19:36:41nun möchte ich das array noch darauf prüfen, ob die
erste zahl im bereich von 1-9 liegt, die
zweite zahl im bereich von 10-18, die
dritte zahl im bereich von 19-27, die
vierte zahl im bereich von 28-36 die
fünfte zahl im bereich von 37-45 und die
sechste zahl im bereich von 46-49
Aber ich hatte Lust ein bisschen zu coden. Hier ein Prograemmchen, das so eine Pruefung durchfuehrt: ....
...hab ich geändert. Nochmal Danke! Auch an @reox!Meillo hat geschrieben:11.01.2022 20:23:41Btw: Zaehlschleifen sollten wenn moeglich diese Form haben:Also mit 0 starten und mit < Anzahl pruefen. (Du hast `<= 5' im Code stehen.)Code: Alles auswählen
for ($a = 0; $a < 6 ; $a++) {
...ich meine solchen, Euch sicher zum schmunzeln bringende "Konstrukte": Dabei sind im array $real die tatsächlich gezogenen Zahlen in aufsteigender Reihenfolge und $tipp die mittels Script ermittelten Zahlen (auch in aufsteigender Reihenfolge was aber egal ist). Wenn eine der tatsächlich gezogenen Zahlen NICHT im array der durch das Script errechneten Zahlen ist, wird das array um diese Zahle erweitert. Hat also dann das so erstelle array 6 Werte waren alle sechs Zahlen der tatsächlich gezogenen Zahlen im array der durch das Script errechneten Zahlen -> 6 Richtige! ))reox hat geschrieben:11.01.2022 20:44:04
ich lass mir ja einreden, dass man schleifen mit nur einer if machen kann wenn man sprünge in der sprache hat. zB so in pseudocodedas ist dann quasi eine do-while.Code: Alles auswählen
marker loopbody; [... schleifenkörper ...] if [...]: goto loopbody;
aber wer macht das schon so
Code: Alles auswählen
for ($i = 0; $i < 6 ; $i++) {
if(in_array($real[$i], $tipp)) {
// do nothing...
} else {
array_push($tipp, $real[$i]);
}
$inarray = count($tipp);
if($i == 5) { $treffer = $inarray; }
}
if($treffer == "9") {
$gewinn = "Drei Richtige";
$drei++;
}
if($treffer == "8") {
$gewinn = "Vier Richtige";
$vier++;
}
if($treffer == "7") {
$gewinn = "Fünf Richtige";
$fuenf++;
}
if($treffer == "6") {
$gewinn = "Sechs Richtige";
$sechs++;
}
Re: Lotto richtig tippen
Das könntest du auch so machen:buddy67 hat geschrieben:12.01.2022 17:40:53Wenn eine der tatsächlich gezogenen Zahlen NICHT im array der durch das Script errechneten Zahlen ist, wird das array um diese Zahle erweitert.
Code: Alles auswählen
if(!in_array($real[$i], $tipp)) {
array_push($tipp, $real[$i]);
}
Code: Alles auswählen
if(in_array($real[$i], $tipp) == false) {
array_push($tipp, $real[$i]);
}
Re: Lotto richtig tippen
Ich erlaube mir mal deinen Code ordentlich einzuruecken (und den Vorschlag von thoerb aufzugreifen):buddy67 hat geschrieben:12.01.2022 17:40:53Code: Alles auswählen
for ($i = 0; $i < 6 ; $i++) { if(in_array($real[$i], $tipp)) { // do nothing... } else { array_push($tipp, $real[$i]); } $inarray = count($tipp); if($i == 5) { $treffer = $inarray; } } if($treffer == "9") { $gewinn = "Drei Richtige"; $drei++; } if($treffer == "8") { $gewinn = "Vier Richtige"; $vier++; } if($treffer == "7") { $gewinn = "Fünf Richtige"; $fuenf++; } if($treffer == "6") { $gewinn = "Sechs Richtige"; $sechs++; }
Code: Alles auswählen
for ($i = 0; $i < 6 ; $i++) {
if(!in_array($real[$i], $tipp)) {
array_push($tipp, $real[$i]);
}
$inarray = count($tipp);
if($i == 5) {
$treffer = $inarray;
}
}
if ($treffer == "9") {
$gewinn = "Drei Richtige";
$drei++;
} else if ($treffer == "8") {
$gewinn = "Vier Richtige";
$vier++;
} else if ($treffer == "7") {
$gewinn = "Fünf Richtige";
$fuenf++;
} else if ($treffer == "6") {
$gewinn = "Sechs Richtige";
$sechs++;
}
Use ed once in a while!
Re: Lotto richtig tippen
..und schon wieder eine zeile weg DANKE!thoerb hat geschrieben:12.01.2022 18:58:04Das könntest du auch so machen:buddy67 hat geschrieben:12.01.2022 17:40:53Wenn eine der tatsächlich gezogenen Zahlen NICHT im array der durch das Script errechneten Zahlen ist, wird das array um diese Zahle erweitert.oder so:Code: Alles auswählen
if(!in_array($real[$i], $tipp)) { array_push($tipp, $real[$i]); }
Dann kannst du dir das "else" sparen.Code: Alles auswählen
if(in_array($real[$i], $tipp) == false) { array_push($tipp, $real[$i]); }
@Mello: Ja, sieht besser aus! ...vielleicht auch ein Grund warum ich mich öfters mal "verzettel"
Re: Lotto richtig tippen
Mittlerweile habe ich das Script etwas modifiziert:
- Das Array aus denen die Tipps generiert werden sollen wird automatisch aus einer Webseite ermittelt (z,B. Zahl 1 wurde 10 mal nicht gezogen -> Zahl 1 -> 10x ins Array, usw.) https://www.sachsenlotto.de/portal/zahl ... ometer.jsp
- Sogenannte "unbeliebte" Zahlen können dem Array in beliebiger Menge zugefügt werden (siehe: https://brefeld.homepage.t-online.de/lottoquoten.html
- Ermittelte "Tipps" die 4 oder mehr ungerade oder gerade Zahlen enthalten werden ausgefiltert
- Auswertung: Man kann im Script die tatsächlich gezogenen Zahlen eingeben und diese mit dem vom Programm ermittelten "Treffer" auf "Gewinne" prüfen - allerdings ist hier noch das Problem, dass wenn die Ziehung gelaufen ist, die Zahlen auf der "Barometer-Seite" bereits aktualisiert sind...
Aber so ist es schon ganz gut, ich kann mir nun Zahlen nach meinen Wünschen generieren lassen Immerhin gab es damit 2x3 und 1x4 Treffer.. was aber leider noch nicht für Bier für alle hier reicht )))
- Das Array aus denen die Tipps generiert werden sollen wird automatisch aus einer Webseite ermittelt (z,B. Zahl 1 wurde 10 mal nicht gezogen -> Zahl 1 -> 10x ins Array, usw.) https://www.sachsenlotto.de/portal/zahl ... ometer.jsp
- Sogenannte "unbeliebte" Zahlen können dem Array in beliebiger Menge zugefügt werden (siehe: https://brefeld.homepage.t-online.de/lottoquoten.html
- Ermittelte "Tipps" die 4 oder mehr ungerade oder gerade Zahlen enthalten werden ausgefiltert
- Auswertung: Man kann im Script die tatsächlich gezogenen Zahlen eingeben und diese mit dem vom Programm ermittelten "Treffer" auf "Gewinne" prüfen - allerdings ist hier noch das Problem, dass wenn die Ziehung gelaufen ist, die Zahlen auf der "Barometer-Seite" bereits aktualisiert sind...
Aber so ist es schon ganz gut, ich kann mir nun Zahlen nach meinen Wünschen generieren lassen Immerhin gab es damit 2x3 und 1x4 Treffer.. was aber leider noch nicht für Bier für alle hier reicht )))
Re: Lotto richtig tippen
Sowas wäre mit Sicherheit nicht anzuraten, da das Prüfen auf ==true/false schlechter Stil ist. Man würde ja auch nicht fragen if a>b==False oder sprachtechnisch, ist Garagentor offen==richtig. Das ist sprachtechnisch unterirdisch, zumindest für das false. Für den True-Vergleich käme dann noch erschwerend hinzu, dass je nach Sprache der Wert True = 1 ist und der Vergleich aber nach ungleich 0 (False) stattfindet - der Vergleich also nicht nur stilistisch unschön, sondern auch technisch falsch wäre.thoerb hat geschrieben:12.01.2022 18:58:04oder so:Code: Alles auswählen
if(in_array($real[$i], $tipp) == false) {
Re: Lotto richtig tippen
Wenn man das machen will (muss), dann sollte man einen anderen operator nehmen (ich glaube in php ist das dann === und nicht ==).
Mein $phpfoo ist schon sehr schwach geworden aber in Python zB macht es manchmal Sinn sehr explizit auf True, False, None zu prüfen:
Code: Alles auswählen
def fun(var):
if var:
print("var is something")
if not var:
print("var is not something")
if var is None:
print("var is None")
if var is True:
print("var is True")
if var is False:
print("var is False")
for myvar in [None, True, False, 1, 0, 'sdf']:
print("input:", repr(myvar))
fun(myvar)
print("~~~")
Code: Alles auswählen
input: None
var is not something
var is None
~~~
input: True
var is something
var is True
~~~
input: False
var is not something
var is False
~~~
input: 1
var is something
~~~
input: 0
var is not something
~~~
input: 'sdf'
var is something
~~~
Re: Lotto richtig tippen
``Sprachtechnisch unterirdisch'' finde ich etwas hart gesprochen. In erster Linie ist das sicher eine Stilfrage, auch wenn ich selber bei boolean-Werten typischerweise das Weglassen des direkten Vergleichs besser lesbarfinde:tobo hat geschrieben:16.01.2022 00:32:35Sowas wäre mit Sicherheit nicht anzuraten, da das Prüfen auf ==true/false schlechter Stil ist. Man würde ja auch nicht fragen if a>b==False oder sprachtechnisch, ist Garagentor offen==richtig. Das ist sprachtechnisch unterirdisch, zumindest für das false.thoerb hat geschrieben:12.01.2022 18:58:04oder so:Code: Alles auswählen
if(in_array($real[$i], $tipp) == false) {
if (in_array(...) == false) { -- liest sich: if in array gleich false
if (!in_array(..)) { -- liest sich: if not in array
Zweiteres finde ich natuerlichsprachlicher und einfacher weil direkter verstaendlich. Insbesondere trifft das auf alle Arten von Verneinungen oder gar doppelten Verneinungen zu. Darauf wolltest du, tobo, wohl hinaus, oder?
Das verstehe ich nicht. Kannst du ein Beispiel machen was du damit meinst.Für den True-Vergleich käme dann noch erschwerend hinzu, dass je nach Sprache der Wert True = 1 ist und der Vergleich aber nach ungleich 0 (False) stattfindet - der Vergleich also nicht nur stilistisch unschön, sondern auch technisch falsch wäre.
Viel schlimmer als diese Dinge finde ich Vergleiche des Rueckgabewertes von strcmp() oder fork() mit !, weil die logisch gesehen keine Booleans zurueckliefern, sondern drei Arten von inhaltlicher Information. Da macht ! (also NOT) meiner Meinung nach keinen Sinn. Der explizite Vergleich eines Boolean-Wertes gegen true/false ist dagegen nur eine Frage der Lesbarkeit/Verstaendlichkeit, nicht aber eine Frage des sprachlichen Sinns des Ausdrucks.
Hmm ... ganz schoen viel OT.
Use ed once in a while!
Re: Lotto richtig tippen
Richtig, das ist in PHP ===.reox hat geschrieben:16.01.2022 11:18:26Wenn man das machen will (muss), dann sollte man einen anderen operator nehmen (ich glaube in php ist das dann === und nicht ==).
....
Wenn ich aber wissen will ob es tatsächlich den boolschen Wert True beinhaltet muss ich in dem Fall sogar gegen True vergleichen. Aber da muss man eben aufpassen, dass man den richtigen Vergleichsoperator nimmt.
Gibt true zurück, wenn $a gleich $b ist und beide denselben Typ haben. (Aus dem Beispiel)
Ich selbst habe das so auch noch nie gemacht weil ich die andere Variante mit vorgestelltem ! gelernt habe und mir das so auch besser gefällt. Habe es aber so gelegentlich im Internet gesehen. Das das schlechter Stil ist, lese ich hier das erste Mal.
Re: Lotto richtig tippen
So wie ich das sehe, hat buddy eine Leiche ausgegraben um was zu lernen. So gesehen finde ich das schon ok.
buddy67 hat geschrieben:10.01.2022 21:22:18Mir geht es eher darum in php effizienter zu programmieren, bzw. zu lernen, z.B.: ich lasse mir 100x ein array mit 6 unterschiedlichen Zahlen ausgeben, jetzt möchte ich effizient die Zahlenreihen eliminieren, die z.B. aufeinander folgende Zahlen darstellen (z.B. 1,2,3,4,5,6 (+1) oder 4,9,14,19,24,29 (+5)... ), oder ich möchte alle Zahlenkombinationen die nur ungerade/gerade Zahlen beinhalten eliminieren, oder oder oder....und zwar einfach nur so, zum Spaß!
Re: Lotto richtig tippen
Was schlechter Stil ist, ist eine komplexe Frage. Auch abseits von Gewoehnung und in einer Programmierkultur ueblichen Konstrukten, die eine Person dieser Kultur als Ganzes wahrnimmt und nicht als ihre Teile, sind Fragen nach gutem Code immer Kompromisse beim Abwaegen zwischen verschiedenen Zielen, die man erreichen will. Je nachdem wie jemand die Prioritaeten setzt -- was sich von Person zu Person, von Programmiersprache zu Programmiersprache und von Projekt zu Projekt unterscheiden kann -- sind unterschiedliche Dinge guter oder schlechter Stil. Pauschale Aussagen lassen sich da selten treffen, jedenfalls meiner Meinung.thoerb hat geschrieben:16.01.2022 11:42:58Das das schlechter Stil ist, lese ich hier das erste Mal.
Ich finde es gut, wenn unterschiedliche Personen darlegen was sie in dem Fall als den besseren Stil erachten und vor allem begruenden wieso. Das schafft eine Basis um eigene Meinungen zu bilden, weil man dann verschiedene Betrachtungsweisen und deren jeweilige Vorzuege kennt.
Use ed once in a while!
Re: Lotto richtig tippen
Das es "schlechter Stil" ist, kommt wohl daher, dass if (ausdruck == true) eine implizite typenkonvertierung vornimmt. Das kann im Zweifelsfall dann ein falsches Ergebnis geben.
Beim programmieren ist explizit sein halt immer (mh naja das ist auch streitbar) besser als implizit.
Jedenfalls ist if (ausdruck === true) sehr implizit, dass (ausdruck) hier eben einen boolschen wert ergeben soll, der dann true ist und (ausdruck == true) sagt nur, dass eine implizite typenkonvertierung möglich sein soll und nach true evaluieren. Nachdem aber if (ausdruck) das selbe ergebnis hat, und man ebenfalls nicht unnötigen code schreiben soll (Ist ja auch eine form von explizit sein), würde man eben versuchen das unnötige == true zu vermeiden.
Beim programmieren ist explizit sein halt immer (mh naja das ist auch streitbar) besser als implizit.
Jedenfalls ist if (ausdruck === true) sehr implizit, dass (ausdruck) hier eben einen boolschen wert ergeben soll, der dann true ist und (ausdruck == true) sagt nur, dass eine implizite typenkonvertierung möglich sein soll und nach true evaluieren. Nachdem aber if (ausdruck) das selbe ergebnis hat, und man ebenfalls nicht unnötigen code schreiben soll (Ist ja auch eine form von explizit sein), würde man eben versuchen das unnötige == true zu vermeiden.
Re: Lotto richtig tippen
Du hättest also kein Problem damit deinen Nachbarn zu fragen: Ist dein Garagentor offen gleich richtig?Meillo hat geschrieben:16.01.2022 11:39:01``Sprachtechnisch unterirdisch'' finde ich etwas hart gesprochen.tobo hat geschrieben:16.01.2022 00:32:35Sowas wäre mit Sicherheit nicht anzuraten, da das Prüfen auf ==true/false schlechter Stil ist. Man würde ja auch nicht fragen if a>b==False oder sprachtechnisch, ist Garagentor offen==richtig. Das ist sprachtechnisch unterirdisch, zumindest für das false.thoerb hat geschrieben:12.01.2022 18:58:04oder so:Code: Alles auswählen
if(in_array($real[$i], $tipp) == false) {
Selbstverständlich - die Antwort ist im if ja bereits gegeben; da muss man ja nicht nochmal nachfragen.Zweiteres finde ich natuerlichsprachlicher und einfacher weil direkter verstaendlich. Insbesondere trifft das auf alle Arten von Verneinungen oder gar doppelten Verneinungen zu. Darauf wolltest du, tobo, wohl hinaus, oder?
Das verstehe ich nicht. Kannst du ein Beispiel machen was du damit meinst.Für den True-Vergleich käme dann noch erschwerend hinzu, dass je nach Sprache der Wert True = 1 ist und der Vergleich aber nach ungleich 0 (False) stattfindet - der Vergleich also nicht nur stilistisch unschön, sondern auch technisch falsch wäre.
Code: Alles auswählen
#include <stdio.h>
#include <stdbool.h>
int main(){
if(3)
printf("true\n");
else
printf("false\n");
if(3 == true)
printf("true\n");
else
printf("false\n");
return 0;
}
Re: Lotto richtig tippen
Danke fuer die Beispiele, tobo. Jetzt verstehe ich besser was du meinst. Zusammen mit reox' Post kann man sehen wie unterschiedlich die Dinge bewertet werden koennen.
In manchen Faellen wuerde man versuchen explizit auf den Typ zu pruefen. In PHP mit === und in C mit einem Wert 1 fuer true. In anderen Faellen ist das nebensaechlich und man kann sich den expliziten Vergleich sparen. Das haengt von den konkreten Ausdruecken und den Rueckgabewerten der genutzten Funktionen ab. in_array() liefert immer einen Bool. Wozu in dem Fall also explizit oder gar typgebunden vergleichen? Aber fuer Personen, die nicht den Rueckgabetyp jeder Funktion kennen, macht es vielleicht mehr Sinn, explizit zu pruefen, damit sie nicht ueberrascht sind, wenn unterschiedliche Dinge zurueck kommen, wie z.B. bei fgets(), das in PHP false oder "" liefern kann, wobei zweiteres als false interpraetiert wird obwohl es ein valider Wert ist und eigentlich true sein sollte. Da steht man dann an der Frage, was einem wichtiger ist ... denn es ist auch eine Komplexitaet, wissen zu muessen wann man den expliziten Vergleich weglassen kann und wann er entscheidend ist. Es kann auch sinnvoll sein, wenn der Code einheitlich ist, weil das besser ueber unterschiedliche Erfahrungslevel der Entwickler skaliert. Einheitlicher Code ist auch eine Form von gutem Stil.
Ich will damit nur sagen, dass diese Fragen selten eindeutig und klar beantwortet werden koennen.
In manchen Faellen wuerde man versuchen explizit auf den Typ zu pruefen. In PHP mit === und in C mit einem Wert 1 fuer true. In anderen Faellen ist das nebensaechlich und man kann sich den expliziten Vergleich sparen. Das haengt von den konkreten Ausdruecken und den Rueckgabewerten der genutzten Funktionen ab. in_array() liefert immer einen Bool. Wozu in dem Fall also explizit oder gar typgebunden vergleichen? Aber fuer Personen, die nicht den Rueckgabetyp jeder Funktion kennen, macht es vielleicht mehr Sinn, explizit zu pruefen, damit sie nicht ueberrascht sind, wenn unterschiedliche Dinge zurueck kommen, wie z.B. bei fgets(), das in PHP false oder "" liefern kann, wobei zweiteres als false interpraetiert wird obwohl es ein valider Wert ist und eigentlich true sein sollte. Da steht man dann an der Frage, was einem wichtiger ist ... denn es ist auch eine Komplexitaet, wissen zu muessen wann man den expliziten Vergleich weglassen kann und wann er entscheidend ist. Es kann auch sinnvoll sein, wenn der Code einheitlich ist, weil das besser ueber unterschiedliche Erfahrungslevel der Entwickler skaliert. Einheitlicher Code ist auch eine Form von gutem Stil.
Ich will damit nur sagen, dass diese Fragen selten eindeutig und klar beantwortet werden koennen.
Use ed once in a while!
Re: Lotto richtig tippen
Eine andere Methode ist zB eine ternäre abfrage, zB so in python:
Wenn man nur if x: verwenden würde, würde das nicht gehen.
Code: Alles auswählen
if x is None:
pass
elif x is True:
pass
elif x is False:
pass
Re: Lotto richtig tippen
Ich habe so einiges gelernt dank Eurer Hinweise und Tipps! Danke!
Mittlerweile habe ich das Script so weit, das es tut was es meiner Meinung nach tun soll Der Quelltext ist zwar mittlerweile wieder so "grottig", das ich selbst damit manchmal nicht mehr klar komme aber es funktioniert!
Und denen hier die mir empfohlen haben Roulett zu spielen oder mir versucht haben die Wahrscheinlichkeitstheorie näher zu bringen: Ihr habt alle Recht! Die Antworten derer, die sich meine Post's wirklich durchgelesen und geantwortet haben waren mir allerdings viel lieber!
cheers!
Mittlerweile habe ich das Script so weit, das es tut was es meiner Meinung nach tun soll Der Quelltext ist zwar mittlerweile wieder so "grottig", das ich selbst damit manchmal nicht mehr klar komme aber es funktioniert!
Und denen hier die mir empfohlen haben Roulett zu spielen oder mir versucht haben die Wahrscheinlichkeitstheorie näher zu bringen: Ihr habt alle Recht! Die Antworten derer, die sich meine Post's wirklich durchgelesen und geantwortet haben waren mir allerdings viel lieber!
cheers!