Seite 1 von 1
Anfängerfrage | Ende eines For-Schleifen-Blocks
Verfasst: Mittwoch 2. Mai 2012, 17:52
von dit
Hallo zusammen!
Ich beschäftige mich seit Kurzem mit Python und habe ne Frage bezüglich Blöcke in Python.
Also ich programmiere hauptsächlich in C/C++ und Java und komme wohl deswegen nicht ganz klar mit dieser {}-losen Sprache
also hier ist ein einfaches Beispiel:
Code: Alles auswählen
def isLowCaseOnly(s=""):
l = len(s)
print ("length=%d" % l)
for i in range(0, l):
print ('i=%d' % i)
if s[i] not in string.ascii_lowercase:
return False
return True
also hier sind meine zwei Fragen:
wie definiert man das Ende einer Methode?
wie definiert man das Ende einer FOR-Schleife (eine Leere Zeile?)?
Danke schon mal!
Re: Anfängerfrage | Ende eines For-Schleifen-Blocks
Verfasst: Mittwoch 2. Mai 2012, 18:10
von derdon
Der Beginn eines Blockes wird durch Einrückung angezeigt. In Python hat die Einrückung eine wichtige Bedeutung und ist Teil der Syntax. Das Ende eines Blockes wird dementsprechend dadurch angezeigt, dass Code nicht mehr eingerückt ist. Leerzeilen innerhalb einer Funktions- oder Klassendefinition werden ignoriert und haben keine Bedeutung.
Re: Anfängerfrage | Ende eines For-Schleifen-Blocks
Verfasst: Mittwoch 2. Mai 2012, 18:13
von lunar
@dit: Beide Fragen beantwortet das Tutorial. Bitte lies das, denn dieses Forum ist kein Python-Grundkurs
Zu Deiner Frage: Blöcke – egal ob for-Schleife oder Methode – werden durch Ausrückung abgeschlossen.
Zu Deinem Quelltext:
- Methoden werden in Python nach PEP 8 vollständig klein geschrieben, also "is_lower_case" statt "isLowCaseOnly".
- Abkürzungen wie "l" oder "Low" sind ebenfalls verpönt, Bezeichner auszuschreiben, bringt Dich nicht um, hilft aber Dir selbst und anderen beim Verständnis des Quelltexts.
- Der Standardwert für den Parameter "s" ist vollkommen überflüssig. Was hast Du dir dabei gedacht? Kann es sein, dass Du da versucht hast, den Typ des Parameters anzugeben?
- Statt Schleifen über Indizes wird in Python direkt über das Objekt iteriert, sprich "for character in string:" statt "for i in range(len(string))".
- Zudem hat Python viele implizite Hilfsmethode zur Iteration wie beispielsweise "all()".
- Im Allgemeinen ist diese Funktion überflüssig, da Zeichenketten eine "islower()"-Methode haben. Ich gehe mal davon aus, dass Du diese Funktion nur zu Übungszwecken geschrieben hast.
- Vernünftigerweise würde man eine derartige Funktion auch auf echten Unicode-Zeichenketten mithilfe des "unicodedata"-Moduls implementieren, anstatt sich auf ASCII zu beschränken.
Mithin lässt sich Dein Quelltext auf eine Zeile kürzen:
Code: Alles auswählen
def is_lower_case(s):
return all(c in string.ascii_lowercase for c in s)
Oder bezüglich des letzten Punkts:
Code: Alles auswählen
def is_lower_case(s)
return all(unicodedata.category(c) == 'Ll' for c in s)
Re: Anfängerfrage | Ende eines For-Schleifen-Blocks
Verfasst: Mittwoch 2. Mai 2012, 18:21
von pillmuncher
Willkommen im Forum!
wie definiert man das Ende einer Methode?
Alles wird durch die Einrückung definiert. Ein Code-Block endet dort, wo der Nächste Code-Block mit höchstens derselben Einrückungstiefe beginnt. Beispiel:
Code: Alles auswählen
def eine_funktion(n):
mach_was_mit(n)
class EineKlasse(object):
def eine_methode(self, x):
mach_was_mit(x)
eine_klassen_variable = 'hallo'
eine_modul_variable = 'servus'
Hier endet eine_funktion dort, wo EineKlasse beginnt, und die wiederum endet dort, wo eine_modul_variable beginnt.
wie definiert man das Ende einer FOR-Schleife (eine Leere Zeile?)?
Ebenso wie bei den anderen Code-Blöcken. Wenn danach etweder die Datei endet oder danach etwas mit höchstens derselben Einrückungstiefe wie der Beginn der for-Schleife daherkommt, ist das das Ende des Blocks.
Übrigens ist deine Beispiel-Funktion recht unpythonisch. Besser wäre dies hier:
Code: Alles auswählen
def is_low_case_only(s):
return all(a == b for a, b in zip(s, s.lower())
Dabei bleiben Satzzeichen, Zahlen und white space allerdings unberücksichtigt. Wenn es tatsächlich darum geht, dass s nur aus den Buchstaben a-z besteht, dann vielleicht so:
Code: Alles auswählen
def is_low_case_only(s):
return all(c in string.ascii_lowercase for c in s)
Re: Anfängerfrage | Ende eines For-Schleifen-Blocks
Verfasst: Mittwoch 2. Mai 2012, 18:58
von pillmuncher
Noch eine Anmerkung: das Wort "Code-Block" in meiner o.s. Antwort ist nur eine informelle Ausdrucksweise. Der Python-Sprach-Standard spricht hier von
Statements bzw.
Compound Statements.