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 end
verwendet, 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:
>>>
(
"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>"
, line1
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
:
...
(
"Woe!"
)
...
else
:
...
(
"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
undelse
verwendest und je nach Wert vondisaster
-
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
:
...
(
"It's a yeti."
)
...
else
:
...
(
"It's a cat!"
)
...
else
:
...
if
large
:
...
(
"It's a whale!"
)
...
else
:
...
(
"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"
:
...
(
"It's a tomato"
)
...
elif
color
==
"green"
:
...
(
"It's a green pepper"
)
...
elif
color
==
"bee purple"
:
...
(
"I don't know what it is, but only bees can see it"
)
...
else
:
...
(
"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 True
berechnet 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 |
|
null |
|
Null-Ganzzahl |
|
Nullschwimmer |
|
leere Zeichenfolge |
|
leere Liste |
|
leeres Tupel |
|
leeres Diktat |
|
leere Menge |
|
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
:
...
(
"There's something in here"
)
...
else
:
...
(
"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'
:
...
(
letter
,
'is a vowel'
)
...
else
:
...
(
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
:
...
(
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
:
...
(
"A fitting tweet"
)
...
else
:
...
(
"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
:
...
(
"A fitting tweet"
)
...
else
:
...
(
"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.
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.