Seite 1 von 2

Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 19:36
von python_tipper
Nachdem ich mich dumm und dämlich studiert habe, stelle ich die Frage nun hier im Forum.

Ich möchte drei Zahlenreihen generieren mit einer while/for Schlaufe:

6 11 16
7 12 17
8 13 18
9 14 19
10 15 20

Mir ist klar wie man einzelne Zahlen erhöhen kann. Aber nicht alle Reihen... Beispiel:

Code: Alles auswählen

z1 = 5
z2 = 10
z3 = 15

while z1 <= 9:

    z1 += 1

    print(z1, z2, z3) 
Ergibt dann:
6 10 15
7 10 15
8 10 15
9 10 15
10 10 15

Wie muss ich die Schlaufe aufbauen, damit ALLE drei Zahlenreihen erhöht werden?
Nicht so:

Code: Alles auswählen

z1 = 5
z2 = 10
z3 = 15

while z1 <= 9:

    z1 += 1
    z2 += 1

    print(z1, z2, z3) 
denn das ergibt:
6 11 15
7 12 15
8 13 15
9 14 15
10 15 15


Und um es noch komplizierter zu machen: Ich möchte ALLE möglichen Varianten/Kombinationen ausgeben...

Also als Beispiel die erste Zahl "6" soll zusammen mit 10/11/12/13/14 und 15/16/17/18/19 erscheinen, ein ganzer Zahlenwurm, in allen Varianten...

Ist das machbar ohne extrem kompliziertes Konstrukt?

Vielen Dank

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 20:25
von Sirius3
Warum nicht so? Du mußt natürlich auch noch ›z3‹ ändern.
Aber Zahlenreihen generiert man nicht so, sondern benutzt ›range‹:

Code: Alles auswählen

for z1, z2, z3 in zip(range(6,11), range(11,16), range(16, 21)):
    print(z1, z2, z3)
Und wenn man alle Kombinationen will, benutzt man ›itertools.product‹.

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 20:34
von python_tipper
Danke.

Zählt aber auch nur die Reihen hoch...

Code: Alles auswählen

z1 = 5
z2 = 11
z3 = 16

for z1, z2, z3 in zip(range(6,11), range(11,16), range(16, 21)):
    print(z1, z2, z3)
6 11 16
7 12 17
8 13 18
9 14 19
10 15 20

Möchte aber auch alle Varianten ausgeben...

Also in Zeile 1:

6 11 16 - 6 12 16 - 6 13 16 - bis 6 15 -20

Hoffe ich drücke mich einigermassen verständlich aus...

Ziel ist schlussendlich ein riesiger Zahlenwurm...

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 20:39
von Sirius3
Hast Du auch meinen letzten Satz gelesen?

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 20:46
von python_tipper
Ja, ich kämpfe grade mit der Syntax von itertools...

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 21:16
von python_tipper
Bin nun am Bahnhof...

Code: Alles auswählen

from itertools import product

z1 = 5
z2 = 11
z3 = 16

for z1, z2, z3 in zip(range(6,10), range(11,15), range(16, 20)):
    print(z1,z2,z3)

product(z1,z2,z3)
for alle in product(z1,z2,z3):
    print(alle)
Ergibt:
6 11 16
7 12 17
8 13 18
9 14 19
Traceback (most recent call last):
File "**** line 10, in <module>
product(z1,z2,z3)
TypeError: 'int' object is not iterable

Oben macht er das mit range, soweit okay. Aber was mach ich unten falsch?

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 21:23
von Sirius3
Die ersten Zuweisungen an z1-3 sind überflüssig, weil die Werte in der for-Schleife gleich ersetzt werden. Und ›product‹ braucht keine Zahlen, sondern die Zahlenreihen, damit es weiß, welcher Kombinationen es bilden soll. Einfach nur ›product‹ aufzurufen ist auch überflüssig, weil es nur bei der for-Schleife Sinn ergibt.

Code: Alles auswählen

from itertools import product

for z1, z2, z3 in zip(range(6,10), range(11,15), range(16, 20)):
    print(z1,z2,z3)

for alle in product(range(6,10), range(11,15), range(16, 20)):
    print(alle)

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 21:52
von python_tipper
sehr cool, genau so wollte ich das. vielen dank!

kann man die ausgabe auch direkt formatieren? ohne klammern und kommas?

(9, 14, 19) -> 9 14 19

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 21:55
von Sirius3
Mit was lernst Du Python?

Re: Zahlenreihen

Verfasst: Mittwoch 6. November 2019, 23:00
von python_tipper
benutze eclipse und nebenbei noch pythonista auf einem ipad, um mal schnell eine idee auszuprobieren.
lernen mit googeln bei konkreten fragestellungen (was mir aber hier nicht weitergeholfen hatte, ein forum ist da sicher der bessere weg).

Re: Zahlenreihen

Verfasst: Donnerstag 7. November 2019, 02:09
von snafu
Schreib halt wieder "z1, z2, z3" anstatt "alle"...

Re: Zahlenreihen

Verfasst: Donnerstag 7. November 2019, 06:18
von Sirius3
Dann solltest Du mal ein Tutorial, zum Beispiel das in der offiziellen Dokumentation, durcharbeiten. Insbesondere zu Grunddatentypen wie Tuple.

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 18:41
von python_tipper
danke für die tipps. ich glaube ich wählte einen komplett falschen ansatz.

erkenntniss: die listen muss ich gar nicht erstellen.

ich erklär mal genauer was ich erreichen will:

ich habe zwei zahlenpäärchen, zb. koordinaten: 100 200 und 500 600.

Code: Alles auswählen

z1a = 100
z1b = 200

z2a = 500
z2b = 600
diese möchte ich miteinander vergleichen. und immer wenn der abstand zb. 200 ist, soll dieser wert ausgegeben werden.

vergleichen heisst: alle zahlen von 100-150/200-250 und 500-550/600-650 sollen vergleichen werden. also wie meine ursprüngliche frage, sie sollen heraufgezählt werden. jede der vier zahlen bis zum maximalen wert.

abstand berechnen:

Code: Alles auswählen

abstand=math.sqrt((((z1-z3)**2)+((z2-z4)**2)))
vergleichen mit:

Code: Alles auswählen

    if abstand==200:
        print(abstand, z1, z2, z3, z4) 
dann sollen ALLE zahlen die den berechneten abstand "200" haben, ausgegeben werden. mein skript stoppt hier noch nach der ersten ausgabe.

wie bekomme ich das alles hin? habe nun fast das ganze wochenende verbraten und komme auf keinen grünen zweig. vielleicht mag mir jemand aufzeigen, wo ich das falsch mache?

herzlichen dank :-)

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:00
von Sirius3
Was hat denn nun z1a/b mit z1 bis z4 zu tun? Was meinst Du mit „allen Zahlen”? Hast Du das Problem mal auf Papier mit Lineal und Zirkel gelöst?

Bisher sehe ich noch kein Skript.

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:11
von __blackjack__
Was ist denn das *eigentliche* Problem das gelöst werden soll? Also mal nicht als (halbe) Lösung formuliert, sondern mal tatsächlich das Problem und die Motivation hinter dem ganzen?

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:15
von python_tipper
doppelpost
doppelpost

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:19
von python_tipper
doppelpost
doppelpost

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:20
von python_tipper
...habe aus z1/z2 neu z1a und z1b gemacht, weil die "zusammengehören"... ja habe es auch aufgezeichnet, da gibt es sehr viele mögliche lösungen.

alle zahlen heisst: z1a ist definiert von 100-150, z1b von 200 bis 250 etc.
somit vergleichen:

Code: Alles auswählen

100 200 500 600
101 200 500 600
...
150 250 550 650
skript kein ansatz mehr vorhanden, alle meine absurden schleifen und ifs und fors laufen ins leere :-(

wie macht man sowas konkret?

das eigentliche problem (frage von blackjack): ich möchte alle möglichen koordinaten-paare/kombinationen, welche als bedingung den abstand x erfüllen, auslesen.

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:25
von Sirius3
Warum möchtest Du gerade die ganzen Zahlen zwischen 100 und 150? Was ist der Hintergrund?
Woher kommen die Zahlen? Was willst Du mit dem Ergebnis anfangen?

Re: Zahlenreihen

Verfasst: Sonntag 10. November 2019, 19:27
von python_tipper
@sirius3: ich möchte alle möglichen koordinaten-paare/kombinationen, welche als bedingung den abstand x erfüllen, auslesen.