For-Schleife mit mehreren Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Accy
User
Beiträge: 1
Registriert: Donnerstag 29. Oktober 2020, 13:02

Hallo,

ich bin ganz neu im programmieren und habe schon einige Tutorials zu den Basics von Python durch.

Doch jetzt hänge ich vor einer simplen Aufgabe und komme nicht auf das Ergebnis.

Undzwar möchte ich alle Paare von ganzen Zahlen (i,j) mit [ i^2 + j^2 < 10 ] auflisten.

Folgenden Code habe ich bisher geschrieben:

Code: Alles auswählen

for i in range(-100, 100):          # >> 'i' wird in einer for-Schleife ausgeführ in einer Reichweite von -100 bis 100
    m = i**2 + i**2                 # >> 'm' wird berechnet
    if m < 10:                      # >> prüfe ob 'm' kleiner als 10 ist
        print(i)                    # >> falls wahr - gibt die Zahl aus
    continue                        # >> falls falsch - brich hier ab und setze die Schleife fort
print('finish')                     # >> ende der Schleife

Das funktioniert auch ganz gut, allerdings möchte ich mit zwei Variablen rechnen:

Code: Alles auswählen

for i, j in range(-100, 100):       # >> 'i' wird in einer for-Schleife ausgeführ in einer Reichweite von -100 bis 100
    m = i**2 + j**2                 # >> 'm' wird berechnet
    if m < 10:                      # >> prüfe ob 'm' kleiner als 10 ist
        print(i, j)                 # >> falls wahr - gibt die Zahl aus
    continue                        # >> falls falsch - brich hier ab und setze die Schleife fort
print('finish')                     # >> ende der Schleife
Dabei erhalte ich allerdings eine Fehlermeldung

Code: Alles auswählen

Traceback (most recent call last):
  line 12, in <module>
    for i, j in range(-100, 100):       # >> 'i' wird in einer for-Schleife ausgeführ in einer Reichweite von -100 bis 100
TypeError: cannot unpack non-iterable int object
Wie kann ich das lösen? Oder bin ich bei der Aufgabe komplett auf dem falschen Weg?

Vielen Dank.

Beste Grüße. :)
Sirius3
User
Beiträge: 18225
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du zwei unabhängige Variablen brauchst, dann brauchst Du auch zwei for-Schleifen.
Das `continue` ist ziemlich uneffektvoll.
Wenn Du nur m < 10 willst, dann sind Zahlen von i oder j größer als 3 nicht sinnvoll.
narpfel
User
Beiträge: 688
Registriert: Freitag 20. Oktober 2017, 16:10

`itertools.product` ist eine Möglichkeit, wie man mehrere verschachtelte `for`-Schleifen vermeiden kann.
Rckstr
User
Beiträge: 19
Registriert: Freitag 15. Mai 2020, 10:04

Und um noch mal den Fehler zu erklären, damit du verstehst was bei deiner Logik schief gegangen ist:

range(-100,100) gibt pro Interation einen Wert zurück. Also zb -100 bei der ersten Iteration. -99 bei der Zweiten usw.

In deinem ersten Bsp

Code: Alles auswählen

for i in range(-100, 100): 
speicherst du diesen Wert in i ab. So weit so gut. In deinem zweiten Code schreibst du:

Code: Alles auswählen

for i, j in range(-100, 100):
 
du willst also zwei Werte speichern. Einmal in i und einmal in j. Wie oben beschrieben gibt range() aber nur einen Wert zurück. Daher kommt die Fehlermeldung.

Du kannst for loops ineinander verschachteln. Als Hinweis für den Lösungsansatz ;-)

/Rckstr
Antworten