[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]
Wie würde eine For-Schleife so in Python geschrieben werden?
@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.
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.
- noisefloor
- User
- Beiträge: 3854
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
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 lassenDie Idee mit "for Variable in Sequenz"
Gruß, noisefloor
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.
Je nach Programmiersprache gilt dies sogar für jede Form von Schleifen oder Rekursion.
@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)
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]
[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]
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"
@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]
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]
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.Sirius3 hat geschrieben:@DasIch: while-Schleifen an sich sind noch kein Fehler.
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.
- 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:
Gruß, noisefloor
wenn ich 15x `Text` ausgeben wollte, dann würde ich das ja so machen:
Code: Alles auswählen
print('Text\n'*15)
@BlackJack: Dein Java nach Python rückrückübersetzt wäre ja eher:
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]
Code: Alles auswählen
for text in ["Text"] * 15:
print text
[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]