Wie würde eine For-Schleife so in Python geschrieben werden?

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
Kanda
User
Beiträge: 2
Registriert: Montag 12. September 2016, 17:47

[codebox=java file=Unbenannt.java]for(int i=0;i<15;i++){
System.out.println("Text");
}[/code]

Hallo,
ich komme von Java, wie wird so etwas direkt in Python umgesetzt? Die Idee mit "for Variable in Sequenz" finde ich ganz schön kompliziert.
Wie würde man so eine For-Schleife direkt umsetzen?
Oder würde man das in Python so lösen?

[codebox=pycon file=Unbenannt.txt]i=0
while i<15:
i=i+1
print("Text")
[/code]
BlackJack

@Kanda: Es ist ``for variable in iterable:``, das muss kein Sequenztyp sein. Man würde das Tutorial in der Python-Dokumentation durcharbeiten und sehen wie man ein iterierbares Objekt erstellt, das einem die Zahlen liefert. Beziehungsweise so viele Elemente wie man für die Wiederholungen braucht, denn `i` wird in dem Beispiel ja nicht verwendet.

Du solltest übrigens nicht einfach direkt von Java nach Python umsetzen wollen, denn Python ist nicht Java. Sachen 1:1 aus einer Sprache in eine andere übernehmen zu wollen geht meistens schief und führt nicht zu idiomatischem Code. Ausser die Sprachen sind sich wirklich sehr ähnlich, was man von Java und Python nicht sagen kann.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Die Idee mit "for Variable in Sequenz"
In Python arbeitet man sehr sehr oft mit Iteration - wenn du dich damit nicht anfreunden kannst dann a) solltest du das am besten ändern oder b) die Finger von Python lassen :-)

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn du eine while Schleife (in Python Code) siehst oder dabei bist eine zu Schreiben, bist du wahrscheinlich dabei einen Fehler zu machen. Wenn du in so eine Situation kommt, immer einen Moment innehalten und überlegen was du da gerade eigentlich tust.

Je nach Programmiersprache gilt dies sogar für jede Form von Schleifen oder Rekursion.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@DasIch: while-Schleifen an sich sind noch kein Fehler. Wenn man dagegen eine Schleife hat, wo man händisch einen Index hochzählt oder überhaupt einen Index benutzt, sollte man sich überlegen, ob sich das nicht auf andere Art lösen läßt.

Code: Alles auswählen

for text in itertools.repeat("Text", 15):
  print(text)
BlackJack

Das lässt sich auch ganz nett in Java ”zurück übersetzen”:
[codebox=java5 file=Unbenannt.java]import java.io.IOException;
import java.util.stream.Stream;

public class Main {
public static void main(String[] args) throws IOException {
Stream.generate(() -> "Test").limit(15).forEach(System.out::println);
}
}[/code]
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Ich kann kein Java, aber nach meinem Gefühl sieht der Python-Code recht ähnlich aus:

Code: Alles auswählen

for i in range(15):
    print "Text"
BlackJack

@S0S: Da solltest Du ein `xrange()` draus machen, sonst wird da tatsächlich eine Liste mit 15 Werten erstellt die kein Mensch braucht. :-)

In Java wäre Deins mit Python 2 `range()` eher das hier:
[codebox=java5 file=Unbenannt.java]import java.io.IOException;
import java.util.Collections;

public class Main {
public static void main(String[] args) throws IOException {
Collections.nCopies(15, "Test").forEach(System.out::println);
}
}[/code]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sirius3 hat geschrieben:@DasIch: while-Schleifen an sich sind noch kein Fehler.
Hab ich auch nicht behauptet, ich habe geschrieben man macht wahrscheinlich einen Fehler. Eine while-Schleife impliziert State und da State unschön ist sind es damit while-Schleifen auch.

Das heisst nicht dass man while Schleifen nie benutzen sollte oder dass man immer einen Fehler macht, wenn man sie benutzt aber erfahrungsgemäß gibt es fast immer eine bessere Lösung, die weniger fehleranfällig ist, den Vorgang besser beschreibt und damit lesbarer ist.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn ich 15x `Text` ausgeben wollte, dann würde ich das ja so machen:

Code: Alles auswählen

print('Text\n'*15)
Gruß, noisefloor
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: Dein Java nach Python rückrückübersetzt wäre ja eher:

Code: Alles auswählen

for text in ["Text"] * 15:
    print text
Die Variante mit xrange sähe in Java dagegen so aus:
[codebox=java file=Unbenannt.java]
import java.io.IOException;
import java.util.stream.IntStream;

public class Main {
public static void main(String[] args) throws IOException {
IntStream.range(0, 15).forEach(i -> System.out.println("Text"));
}
}
[/code]
Antworten