Aufgaben zu Session 03 vom 12.03.2021 - k*.net
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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