Aufgaben zu Session 03 vom 12.03.2021 - k*.net

Die Seite wird erstellt Stefan-Albert Holz
 
WEITER LESEN
Aufgaben zu
Session 03 vom
12.03.2021
 Stand: 19. März 2021, 09:22
Vorläufige Version! Wird noch erweitert um mehr
Aufgaben!

1. Fachbegriffe „prompt“ und
   „cursor“ bitte merken:

2. Schleife/loop:
     >>> for i in range (5) :
             print ( ’ hello ! ’)

     Wenn du das richtig ein-
     tippst, sollte fünfmal hello!
     untereinander ausgege-
     ben werden. Beachte bei
der Eingabe, dass du nach
  print(’hello!’) zwei-
  mal auf die Return-Taste
  drücken musst, dabei ent-
  steht eine leere Zeile direkt
  unter print(’hello!’).

3. Das i im Loop-Beispiel heißt
   „Schleifenindex“ (loop in-
   dex). Er fängt hier bei Null
   an und hört bei 4 auf. Bei
   jedem Durchlauf der Schlei-
   fe wird das i um eins erhöht
   („inkrementiert/incremen-
   ted“):
   >>> for i in range (5) :
   print ( i )

  Wenn du das richtig einge-
  geben hast, solltest du das
  hier erhalten:
4. Probiere aus, was sich am
   letzten Beispiel ändert,
   wenn du print(i) ersetzt
   durch:

  a)   print(2*i)
  b)   print(2**i)
  c)   print(2-i)
  d)   print(i%2)
  e)   print(’i’)
  f)   print(’i=’,i)

5. Mache dir noch einmal klar,
   dass Python bei der Schlei-
   fe nach der Zeile mit for
   die Folgezeilen von selber
   einrückt. Diese Einrückung
   heißt im Englischen „in-
   dent“ bzw. „indentation“,
   bitte nicht mit „intention“
   verwechseln! Der indent ist
   sehr wichtig, du darfst vor
   dem Indent nicht einfach
   etwas weglöschen. Das pro-
   duziert nicht immer, aber
fast immer eine Fehlermel-
dung:

Python teilt dir hier mit,
dass es eigentlich einen
eingerückten Block erwar-
tet hat.

Um eine Einrückung einzu-
tippen, brauchst du norma-
lerweise die „TAB“-Taste, die
ist bei den meisten Compu-
tertastaturen links vom Q.
Die IDLE akzeptiert es un-
ter Umständen auch, wenn
man vier Leerzeichen statt
eines TABs eingibt. Das al-
les solltest du aber eigent-
lich nicht brauchen, es sei
denn, du hast versehentlich
einen Indent gelöscht.
6. Erinnerung: Wenn du einen
   Codeblock, den du bereits
   eingetippt hast, abwandeln
   willst und ihn aber nicht
   nochmal ganz eintippen
   möchtest, kannst du die
   Tastenkombination Alt+p
   verwenden, dann erscheint
   das zuletzt Eingegebene
   hinter dem Prompt.

7. Probiere aus, was folgender
   Code bewirkt:
   >>> for i in range (1 ,6) :
           print ( i )

8. Programmiere nach:
   >>> s = ’ hallo ␣ welt ’
   >>> for i in s :
              print ( i )

  Hier nimmt das i nicht
  ganzzahlige Werte von 0
  bis „irgendeine Zahl“ an,
sondern durchläuft der Rei-
      he nach die Buchstaben/-
      Zeichen des Strings s. Al-
      lerdings bewirkt der Print-
      Befehl jedesmal einen Zei-
      lenumbruch, was nicht im-
      mer gewünscht ist. Abhilfe
      folgt im nächsten Beispiel.

 9. Programmiere nach:
      >>> s = ’ hallo ␣ welt ’
      >>> for i in s :
                 print (i , end = ’ ’)

      Vorsicht: Nach end= folgen
      zwei Single Quotes, nicht
      ein Double Quote.

10. Wir haben bereits gelernt,
    wie man auf einzelne Zei-
    chen eines Strings zugrei-
    fen kann. Hierzu einige Bei-
    spiele zum Nachprogram-
    mieren:
 a)   >>> for i in range ( len ( s ) ) :
              print ( s [ i ])
Der Befehl len(s) gibt die
     „Länge“ des Strings na-
     mens s zurück, zählt also,
     aus wie vielen Zeichen (in-
     klusive Leerzeichen, Son-
     derzeichen etc.) der String
     besteht.
b)   >>> for i in range ( len ( s ) ) :
             print ( s [ - i ])

c)
>>> for i in range ( len ( s ) ) :
        print ( s [ -i -1] , end = ’ ’)

d)   >>> for i in range ( len ( s ) ) :
             print ( s [ i +1])

     Hier sollte dann diese Feh-
     lermeldung kommen:
Das Ende der Fehlermel-
dung „index out of range“
solltest du kennen, denn
diese Art von Fehler ma-
chen Anfänger sehr oft. Er-
klärung:

• Der String hallo welt
  besteht aus 10 Zeichen
  (9 Buchstaben und das
  Leerzeichen). Statt range
  (len(s)) hätte man
  genausogut range(10)
  schreiben können.

• Das (logisch) erste Zei-
  chen, also das h, be-
  kommt in der Schleife
von Python die Nummer
  NULL (i=0), das (logisch)
  letzte Zeichen, also das
  zehnte, bekommt die
  Nummer 9.

• Beim ersten Schleifen-
  durchlauf ist das i also
  gleich Null, dann ist i+1
  die 1, also druckt Python
  zuerst das Zeichen mit
  der Python-Nummer 1,
  also das logisch zweite
  Zeichen, also nicht das
  h, sondern das a.

• Beim letzten Schleifen-
  durchlauf ist das i dann
  gleich 9, dann ist i+1 die
  10, also soll Python den
  (logisch) zehnten Buch-
  staben der Zeichenkette
  drucken, das wäre dann
  der mit der Nummer 11.
• Da die Zeichenkette s
      jedoch kein Zeichen mit
      der Nummer 11 besitzt,
      erscheint diese Fehler-
      meldung.

e) Was bewirkt dieser Code?
>>> for i in range ( len ( s ) //2) :
        print ( s [2* i +1])
        print ( s [2* i ])

f) Warum funktioniert dieser
   Code nicht?
>>> for i in range ( len ( s ) /2) :
        print ( s [2* i +1])
        print ( s [2* i ])

g) ASCII
   >>> for i in s :
           print ( ord ( i ) )

h) ASCII binär:
   >>> for i in s :
           print ( bin ( ord ( i ) ) )
11. Wie bestimme ich den (de-
    zimalen) ASCII-Code eines
    Buchstabens?
    >>> ord ( ’a ’)
    97
    >>> ord ( ’A ’)
    65

12. Wie bestimme ich den Buch-
    staben, der zu einer Dezi-
    malzahl im ASCII gehört?
    >>> chr (97)
    ’a ’
    >>> chr (65)
    ’A ’

13. Erinnerung: Die „norma-
    len“ Zeichen belegen in der
    ASCII-Tabelle die Werte von
    32 bis 127, die deutschen
    Umlaute beispielsweise lie-
    gen im Bereich von 128 bis
    255. Probiere einmal aus,
    was passiert, wenn du den
    Befehl chr(Zahl) für eine
    Zahl kleiner als 32 oder
z. B. für die 127 auspro-
   bierst.

   Wenn chr(Zahl) für Zah-
   len größer als 255 auspro-
   bierst, klappt es auch. Pro-
   biere aus, was help(chr)
   liefert. Python druckt dann
   einen „Hilfetext“ aus, der
   den Fachbegriff „Unicode“
   enthält. Das führt allerdings
   zu weit, darauf gehen wir
   hier nicht ein.

14. Datentypen: Wiederhole die
    bereits bekannten Daten-
    typen: int, float, str und
    den Befehl type(...).

15. Datentyp „bool“

   Dieser Datentyp braucht
   intern nur ein Bit, denn
   „wahr“ bzw. „True“ ent-
   spricht der 1 und „falsch“
bzw. „False“ entspricht der
0:
>>> 1==2
False
>>> 1==1
True
>>> True + False
1
>>> False ==0
True
>>> ( False ==0) ==1
True
>>> ( False ==1) == False
True
>>> True ^ True
False
>>> type (1)
< class ’ int ’ >
>>> type ( True )
< class ’ bool ’ >
>>> type ( true ) # VORSICHT
     Gross - und
     K le in s ch r ei bu n g !!!
Traceback ( most recent call
       last ) :
   File " < pyshell #154 > " ,
     line 1 , in < module >
     type ( true )
NameError : name ’ true ’ is
     not defined
>>> 5%2==0
False
Die letzte Zeile prüft, ob 5
    eine gerade Zahl ist! Das
    brauchen wir bald wieder.

16. Datentyp „Liste“

    Eine Liste ist „etwas in ecki-
    gen Klammern, durch Kom-
    mas getrennt“:
    >>> l =[0 ,2 ,4 ,6 ,8]
    >>> l
    [0 , 2 , 4 , 6 , 8]

17. Listen kann man addieren
    und multiplizieren:
    >>> l =[0 ,2 ,4 ,6 ,8]
    >>> k =[10 ,12]
    >>> 2* k
    [10 , 12 , 10 , 12]
    >>> k + l
    [10 , 12 , 0 , 2 , 4 , 6 , 8]
    >>> l + k
    [0 , 2 , 4 , 6 , 8 , 10 , 12]

    Subtrahieren kann man Lis-
    ten nicht, l-k liefert einen
    Error.
18. Auf einzelne Listeneleme-
    te kann man zugreifen, so
    ähnlich wie bei Strings:
    >>> l [1]
    2
    >>> l [ -1] # letztes !
    8

    Erinnerung: Das Listenele-
    ment l[1] ist nicht das ers-
    te Element der Liste, son-
    dern das logisch zweite,
    also nicht die 0, sondern die
    2 für l=[0,2,4,6,8].

    Und das Doppelkreuz (engl.
    „hash“, auch „Nummer“
    bzw. Nummernzeichen) ist
    in Python das sog. Kom-
    mentarzeichen: alles, was
    dahintersteht, wird von
    Python überlesen, so als
    stünde es nicht da.

19. Weitere Listenbefehle:
>>> l
    [0 , 2 , 4 , 6 , 8]
    >>> l . append (10)
    >>> l
    [0 , 2 , 4 , 6 , 8 , 10]
    >>> l . extend ([12 ,14])
    >>> l
    [0 , 2 , 4 , 6 , 8 , 10 , 12 , 14]
    >>> l . insert (0 , -2)
    >>> l
    [ -2 , 0 , 2 , 4 , 6 , 8 , 10 , 12 ,
           14]
    >>> len ( l )
    9

20. Kompliziertere Listen:
    >>> l =[] # leere Liste
    >>> a =[0 ,1 ,2]
    >>> b =[1 ,2 ,3]
    >>> c =[ a , b ]
    >>> c
    [[0 , 1 , 3] , [1 , 2 , 3]] #
         Liste
    # aus zwei Listen

21. Zeichen eines Strings zei-
    chenweise in eine Liste
    schreiben:
    >>> s = ’ hallo ␣ welt ’
    >>> l =[]
    >>> for i in s :
l . append ( i )

    >>> l
    [ ’h ’ , ’a ’ , ’l ’ , ’l ’ , ’o ’ , ’
          ␣ ’ , ’w ’ , ’e ’ , ’l ’ , ’t ’]

    Hinweis: Der viereckige
    „Topf“ steht für ein Leerzei-
    chen. Das wird in der IDLE
    nicht angezeigt, nur hier im
    PDF.

22. Liste erzeugen, die die
    ACSII-Kodierung der Zei-
    chen eines Strings enthält:
    >>> s = ’ hallo ␣ welt ’
    >>> k =[]
    >>> for i in range ( len ( s ) ) :
               k . append ( ord ( s [ i ]) )

    >>> k
    [104 , 97 , 108 , 108 , 111 ,
         32 , 119 , 101 , 108 , 116]

23. Versuche ein Programm zu
    schreiben, dass für eine ge-
    gebene Liste von Dezimal-
    zahlen zwischen 0 und 255
das entsprechende ASCII-
    Wort (bzw. die Zeichenket-
    te) daraus macht.

©Behrendt for RGW
Sie können auch lesen