verschachtelte for schleife

Code-Stücke können hier veröffentlicht werden.
Antworten
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Servus,
Bin grad dabei n kleines Progrämmchen zu schreiben, das zeilen und spaltenanzahl ließt und dann daraus ein Rechteck aus Sternchen macht.

Bleibe grade nur an der For- hängen. In der Ausbildung lernen wir mit C# und das wandele ich jetzt sozusagen in Python3 um.

Hier ist mein Code:

Code: Alles auswählen

#!/usr/bin/python3

zeile = input("Bitte geben sie die Zeilenanzahl an:\n")
spalte = input("Bitte geben sie die Spaltenanzahl an:\n")

for i =0; <= zeile:
    for j = 0; j<=spalte:
        print ("*")
    print("\n")
Bei den beiden "for's" meckert er..

Danke für Antworten :)
BlackJack

@nfehren: Das ist ja auch keine gültige Python-Syntax. Du erwartest jetzt aber nicht ernsthaft das Dir jemand die Python-Dokumentation oder ein Grundlagentutorial vorliest, oder? Bei der Gelegenheit kannst Du auch gleich nachlesen was die `input()`-Funktion zurück gibt, also insbesondere welchen Typ die Werte haben.

Edit: Code 1:1 aus anderen Programmiersprachen zu übertragen führt übrigens häufig zu unidiomatischem Quelltext in der Zielsprache. Zumindest die innere Schleife würde man sich in Python zum Beispiel sparen weil Zeichenketten eine praktische Operation bieten um eine Zeichenkette aus Wiederholungen einer anderen Zeichenkette zu erstellen.

Code: Alles auswählen

from itertools import repeat


def main():
    column_count = 42
    row_count = 23
    print('\n'.join(repeat('*' * column_count, row_count)))


if __name__ == '__main__':
    main()
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

BlackJack hat geschrieben:@nfehren: Das ist ja auch keine gültige Python-Syntax. Du erwartest jetzt aber nicht ernsthaft das Dir jemand die Python-Dokumentation oder ein Grundlagentutorial vorliest, oder? Bei der Gelegenheit kannst Du auch gleich nachlesen was die `input()`-Funktion zurück gibt, also insbesondere welchen Typ die Werte haben.
War ne dumme Frage sorry :lol:
hab den code jetzt verbessert:

Code: Alles auswählen

#!/usr/bin/python3

zeile = int(input("Bitte geben sie die Zeilenanzahl an:\n"))
spalte = int(input("Bitte geben sie die Spaltenanzahl an:\n"))



for i in range(0, zeile):
    out = ""
    for j in range(0, spalte):
        out += "*"
    print(out)
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Das lässt sich noch deutlich verkürzen wenn man im Tutorial zum Thema Strings gelesen hat, dass mit dem *-Operator eine String-Wiederholung möglich ist.

Code: Alles auswählen

for i in range(zeile):
    print('*' * spalte)
Man könnte es mittels join auch noch auf eine Zeile eindampfen.

Code: Alles auswählen

print('\n'.join('*' * spalte for i in range(zeile)))
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bei geschickter Nutzung der ``print()``-Funktion kann man sich das ``'\n'.join()`` sogar sparen:

Code: Alles auswählen

print(*repeat('*' * columns, lines), sep='\n')
Zugegeben sind da jetzt ganz schön viele Sternchen im Code. ^^
BlackJack

@snafu: Viele Sternchen passt doch zu Weihnachten. ;-)
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wobei das ja eher Flocken wären. Passt aber genau so. Ich frag mich schon, warum die nicht aus meiner Codezeile schweben... :o
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Vielen Danke für eure Antworten!!
Ist echt ein super Forum hier muss ich echt sagen :)
Antworten