Routineaufgaben mit Python automatisieren. Al Sweigart

Читать онлайн книгу.

Routineaufgaben mit Python automatisieren - Al Sweigart


Скачать книгу

      Es ist auch möglich, eine Anweisung auf mehrere Zeilen aufzuteilen, indem Sie am Ende das Zeilenfortsetzungszeichen \ verwenden. Es bedeutet: »Diese Anweisung geht in der nächsten Zeile weiter.« Die Einrückung der Zeile, die auf das Zeichen \ folgt, spielt dann keine Rolle mehr. Beispielsweise ist folgender Code in Python gültig:

      print('Four score and seven ' + \

      'years ago...')

      Diese Tricks sind praktisch, um lange Zeilen umzuarrangieren und Ihren Python-Code damit besser lesbar zu machen.

       Beispielprogramm: Magic 8 Ball mithilfe einer Liste

      Mithilfe von Listen können Sie das Programm Magic 8 Ball aus dem vorherigen Kapitel auf eine viel elegantere Weise schreiben. Anstatt mehrere Zeilen nahezu identischer elif-Anweisungen zu verwenden, können Sie eine einzelne Liste aufstellen, mit der der Code dann arbeitet. Geben Sie den folgenden Code im Dateieditor ein und speichern Sie ihn als magic8Ball2.py:

      import random

      messages = ['It is certain',

      'It is decidedly so',

      'Yes definitely',

      'Reply hazy try again',

      'Ask again later',

      'Concentrate and ask again',

      'My reply is no',

      'Outlook not so good',

      'Very doubtful']

      print(messages[random.randint(0, len(messages) - 1)])

      Die Ausführung dieses Programms können Sie sich auf https://autbor.com/magic-8ball2/ ansehen.

      Wenn Sie das Programm ausführen, werden Sie feststellen, dass es genauso funktioniert wie die ursprüngliche Version magic8Ball.py.

      Beachten Sie den Ausdruck random.randint(0, len(messages) -1), den Sie hier als Index für messages verwenden. Dadurch wird für den Index eine Zufallszahl generiert, die von der Größe von messages abhängig ist – d. h., Sie erhalten eine Zufallszahl zwischen 0 und dem Wert von len(messages) - 1. Der Vorteil dieser Vorgehensweise besteht darin, dass Sie Elemente zur Liste messages hinzufügen und daraus entfernen können, ohne diese Codezeile zu ändern. Wenn Sie den Code später ändern, müssen Sie weniger Codezeilen anfassen, was auch weniger Gelegenheiten dafür bietet, Fehler einzubauen.

       Sequenzielle Datentypen

      Listen sind nicht die einzigen Datentypen, die eine geordnete Folge von Werten darstellen. So können Sie sich beispielsweise auch einen String als eine »Liste« von Textzeichen vorstellen. Zu den sequenziellen Datentypen von Python gehören Listen, Strings, die von range() zurückgegebenen Bereichsobjekte und Tupel (siehe den Abschnitt »Der Datentyp für Tupel« weiter hinten in diesem Kapitel). Viele der Dinge, die Sie mit Listen anstellen können, lassen sich auch mit Strings und anderen Werten sequenzieller Datentypen machen: Sie können sie indizieren, Sie können Slices daraus entnehmen, sie in for-Schleifen verwenden, ihre Größe mit len() bestimmen und die Operatoren in und not in anwenden. Geben Sie zur Veranschaulichung Folgendes in die interaktive Shell ein:

      >>> name = 'Zophie'

      >>> name[0]

      'Z'

      >>> name[-2]

      'i'

      >>> name[0:4]

      'Zoph'

      >>> 'Zo' in name

      True

      >>> 'z' in name

      False

      >>> 'p' not in name

      False

      >>> for i in name:

       print('* * * ' + i + ' * * *')

      * * * Z * * *

      * * * o * * *

      * * * p * * *

      * * * h * * *

      * * * i * * *

      * * * e * * *

       Veränderbare und unveränderbare Datentypen

      Listen und Strings unterscheiden sich jedoch in einem sehr wichtigen Punkt: Eine Liste ist ein veränderbarer Datentyp, da Sie Elemente zu ihr hinzufügen, aus ihr entfernen und ändern können. Dagegen ist ein String unveränderbar – er lässt sich nicht ändern. Wenn Sie versuchen, ein einzelnes Zeichen in einem String neu zuzuweisen, erhalten Sie die Fehlermeldung TypeError, wie das folgende Beispiel zeigt:

      >>> name = 'Zophie a cat'

      >>> name[7] = 'the'

      Traceback (most recent call last):

      File "<pyshell#50>", line 1, in <module>

      name[7] = 'the'

      TypeError: 'str' object does not support item assignment

      Um einen String zu »ändern«, müssen Sie ihn zerschneiden und verketten, um einen neuen String aus Teilen des alten zu erstellen. Probieren Sie das wie folgt in der interaktiven Shell aus:

      >>> name = 'Zophie a cat'

      >>> newName = name[0:7] + 'the' + name[8:12]

      >>> name

      'Zophie a cat'

      >>> newName

      'Zophie the cat'

      Mit [0:7] und [8:12] haben wir die Zeichen angegeben, die nicht ersetzt werden sollen. Da Strings unveränderbar sind, wird der ursprüngliche String 'Zophie a cat' nicht geändert.

      Eine Liste ist zwar veränderbar, dennoch nimmt die zweite Zeile im folgenden Code keine Änderung an der Liste eggs vor:

      >>> eggs = [1, 2, 3]

      >>> eggs = [4, 5, 6]

      >>> eggs

      [4, 5, 6]

      In Wirklichkeit wird die Liste in eggs hier nicht geändert. Stattdessen wird die alte Liste [1, 2, 3] komplett mit der neuen Liste [4, 5, 6] überschrieben, wie Abbildung 4–2 deutlich zeigt.

      Wenn Sie die ursprüngliche Liste in eggs tatsächlich so ändern wollen, dass sie schließlich [4, 5, 6] lautet, so müssen Sie wie folgt vorgehen:

      >>> eggs = [1, 2, 3]

      >>> del eggs[2]

      >>> del eggs[1]

      >>> del eggs[0]

      >>> eggs.append(4)

      >>> eggs.append(5)

      >>> eggs.append(6)

      >>>


Скачать книгу