729G74 IT och programmering, grundkurs Tema 3. Föreläsning 2 Jody Foo, jody.foo@liu.se
Föreläsningsöversikt Repetition: syntax-quiz Fler for-loopar (över listor och dictionaries) range() Nästlade strukturer och nästlade loopar matris/2-dimensionell lista/array
Repetitionsquiz
Quiz Givet enbart nedanstående fristående kodrader, vad kommer Python att tolka nedanstående som och i vilka fall kommer fel att genereras? a) a b) "a" + "a" c) a + "a" d) "a" + a() e) (a + a) + "a" f) (a + a) + [a]
Operatorn in
Operatorer: repetition Exempel på operatorer: +, *, -, /, and, or, not Operatorer kan ses som funktioner plus(x, y) minus(x, y) Argument till operatorer kallas för operander Operatorer kan vara binära (tar exakt två argument), eller unära (tar exakt ett argument)
Operatorn in Operatorn in är en binär operator. Operanderna är ett värde och en sekvens Exempel på sekvenser är: strängar, listor, tupler, dictionaries (implicit dess nycklar) Operatorn returnerar True om värdet finns i sekvensen.
Exempel "h" in "hej" True "h" in ["hej", "hopp"] False "hej" in ["hej", "hopp"] True "hej" in [["hej"],"hopp"] False ["hej"] in [["hej"],"hopp"] True
Mer om for-loopen
for element in a_sequence: statement1 statement2 statement3...
Gå igenom en lista med for names = ["Adam", "Bethany", "Chris"] # gå igenom alla element i names. det aktuella elementet # refereras till via variabeln name i loopen. for name in names: # skriv ut det aktuella elementet i listan names print(name)
Summera tal med for numbers = [2000, 39, 596] sum = 0 # summera alla element i listan numbers for number in numbers: sum = sum + number print(sum)
range() range() skapar en "virtuell lista med heltal" (en generator) som man kan använda som en vanlig lista med heltal. range(stop): lista med heltal från 0 och som är stop lång range(start, stop): lista med heltal från start till stop-1 range(start, stop, step): lista med heltal från start till
range() >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(4,6)) [4, 5] >>> list(range(10, 101, 10)) [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] >>> list(range(10, 0, -1)) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
for med range() # Skriv ut siffrorna 0 till 9 (10 siffror) for i in range(10): print(str(i))
continue och break
Hoppa ur en loop for i in range(10): if i == 5: # för att avbryta en loop i förtid # används break break print(i)
Hoppa till nästa varv for i in range(10): if i == 5: # För att gå vidare till nästa varv i loopen # används continue continue print(i)
Repetition av dictionaries
Repetition från förra föreläsningen Ett dictionary har element precis som en lista, men istället för index, kommer man åt elementen (värdena) med via nycklar. Alla datatyper som är oföränderliga (immutable) kan användas som nycklar, t.ex. numeriska värden, strängar och tupler.
Skapa, läsa, lägga till och ändra värden i ett dictionary # skapa dictionary med innehåll dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } # plocka ut värde för en specifik nyckel i ett dictionary # kommer returnera strängen 'värde 1' dictionary1["nyckel1"] # kommer returnera strängen 'värde 2' dictionary1[345] # lägga till nya nycklar och värden till dictionaryt dictionary1["ny nyckel"] = "nytt värde" dictionary1["böcker"] = ["bok 1", "bok 2", "bok 3"] # hämtning av skapade nyckel-värdepar: 'nytt värde' resp. listan # ['bok 1', 'bok 2', ' bok 3'] dictionary1["ny nyckel"] dictionary1["böcker"]
Vi kan loopa genom nycklar i ett dictionary # loopa genom nycklar, explicit (ingen _bestämd_ ordning finns) for key in dictionary1.keys(): print("key: " + key) print("value: " + dictionary1[key]) # loopa genom nycklar, implicit (ingen _bestämd_ ordning finns) for key in dictionary1: print("key: " + key) print("value: " + dictionary1[key]) Vi kan komma åt alla nycklar antingen implicit eller explicit. Operatorn in kan också användas på nycklarna implicit: if key_i_am_looking_for in dictionary1:...
Vi kan loopa genom värden i ett dictionary # loopa genom värden, explicit (ingen _bestämd_ ordning finns) for value in dictionary1.values(): print("value: " + value) dict.values(), precis som dict.keys() ger en struktur (ett view objekt) som beter sig som en lista (men det är ingen riktig lista). Se https://docs.python.org/release/3.3.0/library/stdtypes.html#dict-views för mer information.
Vi kan loopa genom par av nycklar och värden # loopa genom par av nycklar och värden explicit (ingen _bestämd_ # ordning finns) for key, value in dictionary1.items(): print("key: " + key) print("value: " + value) # en lista av tupler med två element per tupel kan loopas igenom på # samma sätt list_of_tuples = [("ett", 1), ("två", 2), ("tre", 3)] for word, number in list_of_tuples: print("word: " + word) print("number" + str(number)) dict.items() returnerar en struktur som kan användas som en lista av tupler med två element per tupel.
Nästlade strukturer och loopar 2D-array/lista/matris Listor i dictionaries Loopa genom nästlade strukturer
Nästlade strukturer När man har flera "lager" av t.ex. listor eller dictionaries säger man att man har en nästlad struktur. Exempel [["ada", 11], ["bada", 22], ["cada", 33]] {"smaker": ["surt", "sött", "salt", "syrligt"], "former": ["rund", "fyrkantig", "oval", "flaskformad"] "färger": ["grön", "röd", "brun", "blå", "rosa", "gul"]}
Skriv ut alla element i en nästlad lista # exempel med enkel lista names = ["a", "b", "c"] for name in names: print(name) # exempel med listor med två element i en lista. observera mönstret i # namngivningen av listan och hjälpvariabeln i for-loopen contact = [["a", "013-123456"], ["b", "070-123456"], ["c", "+46 8 123456"]] for contact in contacts: print(contact[0]) print(contact[1]) # exampel med listor med två element i varje lista. for-loop istället för # två hårdkodade print-satser används för att skriva ut innehållet # i den inre listan contact = [["a", "013-123456"], ["b", "070-123456"], ["c", "+46 8 123456"]] for contact in contacts: for contact_value in contact: print(contact_value)