Lotto richtig tippen

Du suchst ein Programm für einen bestimmten Zweck?
buddy67
Beiträge: 162
Registriert: 30.06.2016 22:52:15

Re: Lotto richtig tippen

Beitrag von buddy67 » 12.01.2022 17:40:53

Meillo hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 20:23:41
buddy67 hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 19:36:41
nun 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
In dem Fall wuerde ich die Werte gleich passend generieren. Das scheint mir einfacher zu sein als hinterher zu pruefen.

Aber ich hatte Lust ein bisschen zu coden. Hier ein Prograemmchen, das so eine Pruefung durchfuehrt: ....
...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: ↑ zum Beitrag ↑
11.01.2022 20:23:41
Btw: Zaehlschleifen sollten wenn moeglich diese Form haben:

Code: Alles auswählen

for ($a = 0; $a < 6 ; $a++) {
Also mit 0 starten und mit < Anzahl pruefen. (Du hast `<= 5' im Code stehen.)
...hab ich geändert. Nochmal Danke! Auch an @reox!
reox hat geschrieben: ↑ zum Beitrag ↑
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 pseudocode

Code: Alles auswählen

marker loopbody;
[... schleifenkörper ...]
if [...]: goto loopbody;
das ist dann quasi eine do-while.
aber wer macht das schon so :D
...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! :)))

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&uuml;nf Richtige";
  $fuenf++;
  }
  if($treffer == "6") {
  $gewinn = "Sechs Richtige";
  $sechs++;
  }

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von thoerb » 12.01.2022 18:58:04

buddy67 hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 17:40:53
Wenn eine der tatsächlich gezogenen Zahlen NICHT im array der durch das Script errechneten Zahlen ist, wird das array um diese Zahle erweitert.
Das könntest du auch so machen:

Code: Alles auswählen

 if(!in_array($real[$i], $tipp)) {
      array_push($tipp, $real[$i]);
  }
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
      array_push($tipp, $real[$i]);
  }
Dann kannst du dir das "else" sparen.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 12.01.2022 19:07:23

buddy67 hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 17:40:53

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&uuml;nf Richtige";
  $fuenf++;
  }
  if($treffer == "6") {
  $gewinn = "Sechs Richtige";
  $sechs++;
  }
Ich erlaube mir mal deinen Code ordentlich einzuruecken (und den Vorschlag von thoerb aufzugreifen):

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&uuml;nf Richtige";
	$fuenf++;
} else if ($treffer == "6") {
	$gewinn = "Sechs Richtige";
	$sechs++;
}
... sieht doch gleich viel schoener aus. ;-)
Use ed once in a while!

buddy67
Beiträge: 162
Registriert: 30.06.2016 22:52:15

Re: Lotto richtig tippen

Beitrag von buddy67 » 12.01.2022 20:17:32

thoerb hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 18:58:04
buddy67 hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 17:40:53
Wenn eine der tatsächlich gezogenen Zahlen NICHT im array der durch das Script errechneten Zahlen ist, wird das array um diese Zahle erweitert.
Das könntest du auch so machen:

Code: Alles auswählen

 if(!in_array($real[$i], $tipp)) {
      array_push($tipp, $real[$i]);
  }
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
      array_push($tipp, $real[$i]);
  }
Dann kannst du dir das "else" sparen.
..und schon wieder eine zeile weg :) DANKE!

@Mello: Ja, sieht besser aus! ...vielleicht auch ein Grund warum ich mich öfters mal "verzettel" :)

buddy67
Beiträge: 162
Registriert: 30.06.2016 22:52:15

Re: Lotto richtig tippen

Beitrag von buddy67 » 15.01.2022 23:25:10

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 :))))

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Lotto richtig tippen

Beitrag von tobo » 16.01.2022 00:32:35

thoerb hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 18:58:04
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
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.

reox
Beiträge: 2460
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von reox » 16.01.2022 11:18:26

tobo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 00:32:35
Sowas wäre mit Sicherheit nicht anzuraten
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("~~~")
liefert folgende Ausgabe:

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
~~~
Wenn ich wissen will ob das Ergebnis des Ausdrucks in irgendeiner weise nach True evaluiert kann ich ruhig das erste verwenden. 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.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 16.01.2022 11:39:01

tobo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 00:32:35
thoerb hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 18:58:04
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
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.
``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:

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?

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.
Das verstehe ich nicht. Kannst du ein Beispiel machen was du damit meinst.


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. :roll:
Use ed once in a while!

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von thoerb » 16.01.2022 11:42:58

reox hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:18:26
Wenn 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.
Richtig, das ist in PHP ===.

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.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von thoerb » 16.01.2022 11:50:39

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:39:01
Hmm ... ganz schoen viel OT. :roll:
So wie ich das sehe, hat buddy eine Leiche ausgegraben um was zu lernen. So gesehen finde ich das schon ok.
buddy67 hat geschrieben: ↑ zum Beitrag ↑
10.01.2022 21:22:18
Mir 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ß! :)

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 16.01.2022 12:06:18

thoerb hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:42:58
Das das schlechter Stil ist, lese ich hier das erste Mal.
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.

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!

reox
Beiträge: 2460
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von reox » 16.01.2022 12:32:29

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.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Lotto richtig tippen

Beitrag von tobo » 16.01.2022 12:33:24

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:39:01
tobo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 00:32:35
thoerb hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 18:58:04
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
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.
``Sprachtechnisch unterirdisch'' finde ich etwas hart gesprochen.
Du hättest also kein Problem damit deinen Nachbarn zu fragen: Ist dein Garagentor offen gleich richtig?
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?
Selbstverständlich - die Antwort ist im if ja bereits gegeben; da muss man ja nicht nochmal nachfragen.
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.
Das verstehe ich nicht. Kannst du ein Beispiel machen was du damit meinst.

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;
}

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 16.01.2022 12:58:35

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.
Use ed once in a while!

reox
Beiträge: 2460
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von reox » 17.01.2022 09:01:25

Eine andere Methode ist zB eine ternäre abfrage, zB so in python:

Code: Alles auswählen

if x is None:
    pass
elif x is True:
    pass
elif x is False:
    pass
Wenn man nur if x: verwenden würde, würde das nicht gehen.

buddy67
Beiträge: 162
Registriert: 30.06.2016 22:52:15

Re: Lotto richtig tippen

Beitrag von buddy67 » 02.02.2022 21:52:06

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! :)

Antworten