Kapitel 4. Wähle mit wenn

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Wenn du einen kühlen Kopf bewahren kannst, wenn alle um dich herum
ihren verlieren und dir die Schuld geben, ...

Rudyard Kipling, If...

In den vorherigen Kapiteln hast du viele Beispiele für Daten gesehen, aber nicht viel mit ihnen gemacht. Die meisten Code-Beispiele haben den interaktiven Interpreter benutzt und waren kurz. In diesem Kapitel lernst du, wie du Python-Code strukturieren kannst, nicht nur Daten.

In vielen Computersprachen werden Zeichen wie geschweifte Klammern ({ und }) oder Schlüsselwörter wiebegin und endverwendet, um Codeabschnitte zu markieren. In diesen Sprachen ist es eine gute Praxis, eine einheitliche Einrückung zu verwenden, um dein Programm für dich und andere besser lesbar zu machen. Es gibt sogar Tools, mit denen du deinen Code schön einrücken kannst.

Als er die Sprache entwarf, aus der Python wurde, entschied Guido van Rossum, dass die Einrückung selbst ausreicht, um die Struktur eines Programms zu definieren, und vermied es, all die Klammern und geschweiften Klammern zu tippen.Python ist ungewöhnlich in der Verwendung von Leerraum, um die Programmstruktur zu definieren. Es ist einer der ersten Aspekte, den Neulinge bemerken, und es kann denjenigen, die Erfahrung mit anderen Sprachen haben, seltsam vorkommen. Es stellt sich heraus, dass es sich nach einer Weile des Schreibens von Python natürlich anfühlt und man aufhört, es zu bemerken. Man gewöhnt sich sogar daran, mehr zu tun und weniger zu tippen.

Unsere ersten Code-Beispiele waren Einzeiler. Sehen wir uns zunächst an, wie man Kommentare und mehrzeilige Befehle erstellt.

Kommentar mit #

Ein Kommentar ist ein Textabschnitt in deinem Programm, der vom Python-Interpreter ignoriert wird. Du kannst Kommentare verwenden, um einen nahe gelegenen Python-Code zu verdeutlichen, dir Notizen zu machen, um etwas zu reparieren oder was auch immer du willst. Du kennzeichnest einen Kommentar mit dem Zeichen #; alles von diesem Punkt an bis zum Ende der aktuellen Zeile ist Teil des Kommentars. Normalerweise siehst du einen Kommentar in einer eigenen Zeile, wie hier:

>>> # 60 sec/min * 60 min/hr * 24 hr/day
>>> seconds_per_day = 86400

Oder in der gleichen Zeile wie der Code, den er kommentiert:

>>> seconds_per_day = 86400 # 60 sec/min * 60 min/hr * 24 hr/day

Das Zeichen # hat viele Namen:Raute, Schärfe, Pfund oder die unheimlich klingendeOktothorpe.1 Wie auch immer du es nennst,2 seine Wirkung hält nur bis zum Ende der Zeile an, in der es erscheint.

In Python gibt es keinen mehrzeiligen Kommentar, du musst jede Kommentarzeile oder jeden Abschnitt explizit mit einem # beginnen:

>>> # I can say anything here, even if Python doesn't like it,
... # because I'm protected by the awesome
... # octothorpe.
...
>>>

Wenn er jedoch in einem Text vorkommt, kehrt der mächtige Oktothorpe zu seiner Rolle als einfaches altes # Zeichen zurück:

>>> print("No comment: quotes make the # harmless.")
No comment: quotes make the # harmless.

Linien mit \ fortsetzen

Programme sind besser lesbar, wenn die Zeilen einigermaßen kurz sind. Die empfohlene (nicht vorgeschriebene) maximale Zeilenlänge beträgt 80 Zeichen. Wenn du in dieser Länge nicht alles sagen kannst, was du sagen willst, kannst du das Fortsetzungszeichen verwenden:\ (Backslash). Gib einfach \ am Ende einer Zeile ein, und Python tut plötzlich so, als wärst du immer noch in der gleichen Zeile.

Wenn ich zum Beispiel die ersten fünf Ziffern hinzufügen wollte, könnte ich das zeilenweise tun:

>>> sum = 0
>>> sum += 1
>>> sum += 2
>>> sum += 3
>>> sum += 4
>>> sum
10

Oder ich könnte es in einem Schritt machen, indem ich das Fortsetzungszeichen verwende:

>>> sum = 1 + \
...       2 + \
...       3 + \
...       4
>>> sum
10

Wenn wir den Backslash in der Mitte eines Ausdrucks auslassen würden, bekämen wir eine Ausnahme:

>>> sum = 1 +
  File "<stdin>", line 1
    sum = 1 +
            ^
SyntaxError: invalid syntax

Hier ist ein kleiner Trick: Wenn du dich in der Mitte von gepaarten Klammern (oder eckigen oder geschweiften Klammern) befindest, schimpft Python nicht über Zeilenenden:

>>> sum = (
...     1 +
...     2 +
...     3 +
...     4)
>>>
>>> sum
10

In Kapitel 5erfährst du außerdem, dass du mit gepaarten dreifachen Anführungszeichen mehrzeilige Strings erstellen kannst.

Vergleiche mit if, elif, und else

Jetzt machen wir endlich unseren ersten Schritt in dieCodestrukturen, die Daten in Programme einweben. Unser erstes Beispiel ist dieses kleine Python-Programm, das den Wert der booleschen Variable disasterüberprüft und einen entsprechenden Kommentar ausgibt:

>>> disaster = True
>>> if disaster:
...     print("Woe!")
... else:
...     print("Whee!")
...
Woe!
>>>

Die Zeilen if und else sind Python-Anweisungen, die prüfen, ob eine Bedingung (hier der Wert von disaster) ein boolescher True Wert ist oder als True ausgewertet werden kann. Erinnere dich daran, dassprint() die eingebaute Funktion von Python ist, um Dinge auszudrucken, normalerweise auf den Bildschirm.

Hinweis

Wenn du in anderen Sprachen programmiert hast, beachte, dass du für den if Test keine Klammern brauchst. Sag zum Beispiel nicht so etwas wie if (disaster == True)(der Gleichheitsoperator == wird in ein paar Absätzen beschrieben). Du brauchst den Doppelpunkt (:) am Ende. Wenn du, wie ich, manchmal vergisst, den Doppelpunkt einzugeben, zeigt Python eine Fehlermeldung an.

Jede Zeile von print() wird unter ihrem Test eingerückt. Ich habe vier Leerzeichen verwendet, um jeden Unterabschnitt einzurücken. Obwohl du jede beliebige Einrückung verwenden kannst, erwartet Python, dass du den Code innerhalb eines Abschnitts einheitlich einrückst - die Zeilen müssen gleich weit eingerückt sein und auf der linken Seite aufgereiht werden. Der empfohlene Stil,PEP-8 genannt, ist die Verwendung von vier Leerzeichen. Verwende keine Tabulatoren oder mische Tabulatoren und Leerzeichen; das bringt die Einrückungszahl durcheinander.

Wir haben hier eine Reihe von Dingen getan, die ich im weiteren Verlauf des Kapitels genauer erkläre:

  • Der Variable mit dem Namen True wurde der boolesche Wert zugewiesen. disaster

  • Führe einen bedingten Vergleich durch, indem du if und else verwendest und je nach Wert von disaster

  • Ruft die Funktion print() auf, um einen Text zu drucken

Du kannst Tests in Tests haben, so viele Ebenen tief wie nötig:

>>> furry = True
>>> large = True
>>> if furry:
...     if large:
...         print("It's a yeti.")
...     else:
...         print("It's a cat!")
... else:
...     if large:
...         print("It's a whale!")
...     else:
...         print("It's a human. Or a hairless cat.")
...
It's a yeti.

In Python bestimmt die Einrückung, wie die Abschnitte if und else gepaart werden. Unser erster Test war, furry zu prüfen. Da furry zu True wird, geht Python zum eingerückten if large Test über. Da wir large auf True gesetzt hatten, wirdif large als True ausgewertet und die folgende Zeile else ignoriert. Dadurch führt Python die eingerückte Zeile unter if large:aus und gibtIt's a yeti.

Wenn es mehr als zwei Möglichkeiten zum Testen gibt, verwende if für die erste,elif (d.h. else if) für die mittlere und else für die letzte:

>>> color = "mauve"
>>> if color == "red":
...     print("It's a tomato")
... elif color == "green":
...     print("It's a green pepper")
... elif color == "bee purple":
...     print("I don't know what it is, but only bees can see it")
... else:
...     print("I've never heard of the color", color)
...
I've never heard of the color mauve

Im vorangegangenen Beispiel haben wir mit dem Operator == auf Gleichheit geprüft.Hier sind die Vergleichsoperatoren von Python:

Gleichstellung

==

Ungleichheit

!=

weniger als

<

kleiner als oder gleich

<=

größer als

>

größer als oder gleich

>=

Diese geben die booleschen Werte True oder False zurück. Schauen wir uns an, wie das alles funktioniert, aber zuerst weisen wir x einen Wert zu:

>>> x = 7

Lass uns jetzt ein paar Tests machen:

>>> x == 5
False
>>> x == 7
True
>>> 5 < x
True
>>> x < 10
True

Beachte, dass zwei Gleichheitszeichen (==) verwendet werden, um die Gleichheit zu prüfen; erinnere dich daran, dass ein einzelnes Gleichheitszeichen (=) verwendet wird, um einer Variablen einen Wert zuzuweisen.

Wenn du mehrere Vergleiche gleichzeitig durchführen musst, verwendest du dielogischen (oder booleschen) Operatorenand, or und not, um das endgültige boolesche Ergebnis zu ermitteln.

Logische Operatoren haben einen niedrigeren Vorrangals die Codeabschnitte, die sie vergleichen. Das bedeutet, dass die Abschnitte zuerst berechnet und dann verglichen werden. In diesem Beispiel, weil wir x auf 7 gesetzt haben, wird5 < x als Trueberechnet und x < 10 ist auch True, so dass wir am EndeTrue and True erhalten:

>>> 5 < x and x < 10
True

Wie "Vorrang" zeigt, ist es am einfachsten, Verwirrung über den Vorrang zu vermeiden, indem man Klammern hinzufügt:

>>> (5 < x) and (x < 10)
True

Hier sind einige andere Tests:

>>> 5 < x or x < 10
True
>>> 5 < x and x > 10
False
>>> 5 < x and not x > 10
True

Wenn du and-ing mehrere Vergleiche mit einer Variablen durchführst, kannst du das in Python tun:

>>> 5 < x < 10
True

Es ist dasselbe wie 5 < x and x < 10. Du kannst auch längere Vergleiche schreiben:

>>> 5 < x < 10 < 999
True

Was ist wahr?

Was ist, wenn das zu prüfende Element kein Boolescher Wert ist? Was versteht Python unter True und False?

Ein false Wert muss nicht unbedingt explizit ein boolescher False Wert sein. Zum Beispiel werden diese alle als False betrachtet:

boolean

False

null

None

Null-Ganzzahl

0

Nullschwimmer

0.0

leere Zeichenfolge

''

leere Liste

[]

leeres Tupel

()

leeres Diktat

{}

leere Menge

set()

Alles andere wird als True betrachtet. Python-Programme verwenden diese Definitionen von "Wahrhaftigkeit" und "Falschheit", um auf leere Datenstrukturen sowie False Bedingungen zu prüfen:

>>> some_list = []
>>> if some_list:
...     print("There's something in here")
... else:
...     print("Hey, it's empty!")
...
Hey, it's empty!

Wenn das, was du testest, ein Ausdruck und keine einfache Variable ist, wertet Python den Ausdruck aus und gibt ein boolesches Ergebnis zurück. Wenn du also tippst:

if color == "red":

Python wertet color == "red" aus. In unserem früheren Beispiel haben wir die Zeichenkette "mauve" color zugewiesen, also ist color == "red" False , und Python macht mit dem nächsten Test weiter:

elif color == "green":

Mehrere Vergleiche durchführen mit in

Angenommen, du hast einen Buchstaben und willst wissen, ob er ein Vokal ist. Eine Möglichkeit wäre, eine lange if Aussage zu schreiben:

>>> letter = 'o'
>>> if letter == 'a' or letter == 'e' or letter == 'i' \
...     or letter == 'o' or letter == 'u':
...     print(letter, 'is a vowel')
... else:
...     print(letter, 'is not a vowel')
...
o is a vowel
>>>

Wenn du viele solcher Vergleiche durchführen musst, die durch or getrennt sind, verwende stattdessen PythonsZugehörigkeitsoperator in. Hier siehst du, wie du die Vokalität auf pythonische Weise überprüfen kannst, indem du in mit einer Zeichenkette aus Vokalzeichen verwendest:

>>> vowels = 'aeiou'
>>> letter = 'o'
>>> letter in vowels
True
>>> if letter in vowels:
...     print(letter, 'is a vowel')
...
o is a vowel

Hier ist eine Vorschau darauf, wie du in mit einigen Datentypen verwendest, die du in den nächsten Kapiteln im Detail kennenlernen wirst:

>>> letter = 'o'
>>> vowel_set = {'a', 'e', 'i', 'o', 'u'}
>>> letter in vowel_set
True
>>> vowel_list = ['a', 'e', 'i', 'o', 'u']
>>> letter in vowel_list
True
>>> vowel_tuple = ('a', 'e', 'i', 'o', 'u')
>>> letter in vowel_tuple
True
>>> vowel_dict = {'a': 'apple', 'e': 'elephant',
...               'i': 'impala', 'o': 'ocelot', 'u': 'unicorn'}
>>> letter in vowel_dict
True
>>> vowel_string = "aeiou"
>>> letter in vowel_string
True

Für das Wörterbuch betrachtetin die Schlüssel (die linke Seite des :) und nicht die Werte.

Neu: Ich bin das Walross

In Python 3.8 gibt es den Walross-Operator, der wie folgt aussieht:

name := expression

Siehst du das Walross? (Wie ein Smiley, aber mit mehr Stoßzähnen.)

Normalerweise erfolgen eine Aufgabe und ein Test in zwei Schritten:

>>> tweet_limit = 280
>>> tweet_string = "Blah" * 50
>>> diff = tweet_limit - len(tweet_string)
>>> if diff >= 0:
...     print("A fitting tweet")
... else:
...     print("Went over by", abs(diff))
...
A fitting tweet

Mit unserer neuen Tusk-Power (akaZuweisungsausdrücke) können wir diese in einem Schritt kombinieren:

>>> tweet_limit = 280
>>> tweet_string = "Blah" * 50
>>> if diff := tweet_limit - len(tweet_string) >= 0:
...     print("A fitting tweet")
... else:
...     print("Went over by", abs(diff))
...
A fitting tweet

Das Walross versteht sich auch gut mit for und while, die wir uns in Kapitel 6 ansehen.

Kommend

Spiele mit Fäden und triff interessante Charaktere.

Dinge zu tun

4.1Wähle eine Zahl zwischen 1 und 10 und weise sie der Variablen secret zu. Wähle dann eine weitere Zahl zwischen 1 und 10 und weise sie der Variablen guess zu. Schreibe dann die bedingten Tests (if, else und elif), um die Zeichenkette 'too low'zu drucken, wenn guess kleiner ist als secret,'too high', wenn sie größer ist als secret, und 'just right', wenn sie secret entspricht.

4.2 Weisen Sie True oder False den Variablensmall und green zu. Schreiben Sie einige if/else Anweisungen, um zu drucken, was davon zu diesen Auswahlmöglichkeiten passt: Kirsche, Erbse, Wassermelone, Kürbis.

1 Wie dieses achtbeinige grüne Ding, das direkt hinter dir steht!

2 Bitte rufe es nicht an. Es könnte zurückkommen.

Get Einführung in Python, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.