2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
2D1311 Programmeringsteknik med PBL
Programmeringsteknik
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Repetition inför provet
2D1311 Programmeringsteknik med PBL Föreläsning 7 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL Föreläsning 3 Skolan för Datavetenskap och kommunikation.
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL
Filhantering Grundprincipen för filhantering Öppna filen
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Föreläsning 4 Python: mera om funktioner och parametrar
2D1311 Programmeringsteknik med PBL Föreläsning 6 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL Föreläsning 7 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL Föreläsning 1 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Föreläsning 9 Sökning, sortering, grafikprogrammering.
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
1 Föreläsning 3 Datalogi för E1 / 2D1343 Repetition List List operationer Stränghantering For-slingor.
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Strömmar Vid läsning och skrivning används något som kallas strömmar.
Föreläsning 5.  Idag  Kap 7 i Dawson  Filer  Felhantering med try…except.
Programmeringsteknik
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmeringsteknik för Media1 & K1
William Sandqvist C:s minnesmodell.
Föreläsning 3 Programmeringsteknik och Matlab DD1312
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
DD1311 P ROGRAMMERINGSTEKNIK MED PBL Föreläsning 9 Skolan för Datavetenskap och kommunikation.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 2 Skolan för Datavetenskap och kommunikation.
Namnrum, räckvidd och rekursion Linda Mannila
Funktioner Linda Mannila Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Java paket och jar-filer
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Spelprogrammering med bilder och ljud
Programmeringsteknik Föreläsning 8 Skolan för Datavetenskap och kommunikation.
Föreläsning 7 Programmeringsteknik och Matlab DD1315 Kommandotolk parametrar Klass Instans Metod konstruktor.
2D1311 Programmeringsteknik med PBL Föreläsning 1 Skolan för Datavetenskap och kommunikation.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL
1 Föreläsning 8 Mer om klasser och objektorientering.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Programmeringsteknik
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 9 Sökning, sortering, grafiska gränssnitt (GUI)
Presentationens avskrift:

2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation

Kapitel 7 & 8 Filer Särfall (exceptions) Konservering (pickling) Klasser Objekt Attribut och metoder

Filer Enda sättet att spara data mellan programkörningar är att lagra på fil. Det här behöver man kunna: –Öppna filen för läsning eller skrivning: infil = open("bok.txt","r") –Läsa in från en fil rad = infil.readline() –Skriva ut på en fil utfil.write("Natten var mörk.") –Stänga filen utfil.close() "r" för läsning, "w" för skrivning

Fråga: Kan samma program både läsa från fil och skriva på fil?

Konservering För att lagra en hel datastruktur (t ex en lista) på fil kan man konservera den: import cPickle strumplista = ["röda","blåa","ylle"] konserv = open("strumpor.txt","w") cPickle.dump(strumplista,konserv) konserv.close() Den konserverade listan hämtas igen med metoden load konservera = pickle

Särfall När något blir fel i ett Python-program uppstår ett särfall, t ex NameError: >>> print sko Traceback (most recent call last): File " ", line 1, in -toplevel- print sko NameError: name 'sko' is not defined Man kan ta hand om särfall genom att införa try-except-else -satser för de delar i programmet som kan krascha. särfall=exception

Uppgift: Vilka fel har du fått när du kört Pythonprogram?

Tipsfrågor:data i filen –Frågans rubrik: –Frågan: –Fyra svarsalternativ: –Rätt svarsnummer: –Förklaring till svaret: Data (tipsfrågorna) finns på filen natur.txt Varje frågeblock består av åtta rader: Fladdermusen Hur sover en fladdermus? Bak-och-fram Ut-och-in Upp-och-ner Baklänges 3 Fladdermusen sover hängande i fötterna.

Tipsfrågor:data i programmet De åtta raderna i ett frågeblock lagras i strängar ( category, question,correct,explanation ). Svarsalternativen läggs i en lista ( answers ). En heltalsvariabel för poängen ( score ).

Tipsfrågor:algoritm 1.Öppna filen för läsning 2.Medan det finns frågor kvar i filen: Läs in nästa fråga Ställ frågan Om svaret är rätt: Ge beröm Öka poängen med ett 3.Stäng filen

Funktion i tipsfrågor.pyIndata (parametrar) Utdata (returvärde) open_file(file_name, mode) #Öppnar filen filens namn, öppningsmod filen next_line(the_file) #Läser in nästa rad filennästa rad från filen next_block(the_file) #Läser in nästa block filennästa 8-block från filen welcome(title) #Skriver ut titeln titeln på frågesporten -

# Michael Dawsons Trivia Challenge, kap 7, # modifierad av Linda - 11 februari 2007 def open_file(file_name, mode): """Öppna en fil säkert för läsning eller utskrift.""" try: the_file = open(file_name, mode) except(IOError), e: print "Kan inte öppna filen", file_name, "Avslutar\n",e raw_input("\n\nTryck retur för att stänga.") sys.exit() else: return the_file

def next_line(the_file): """Läs in och returnera nästa rad från filen.""" line = the_file.readline() line = line.replace("/", "\n") return line

def next_block(the_file): """Returnera nästa datablock från filen.""" category = next_line(the_file) question = next_line(the_file) answers = [] for i in range(4): answers.append(next_line(the_file)) correct = next_line(the_file) if correct: correct = correct[0] explanation = next_line(the_file) return category, question, answers, correct, explanation

def welcome(title): """Välkomnar spelaren och skriver ut frågesportstitel.""" print "\t\tVälkommen till frågesporten!\n" print "\t\t", title, "\n" def ask_a_question(question,answers): print question for i in range(4): print "\t", i + 1, "-", answers[i] def check_answer(answer,correct,score,explanation): if answer == correct: print "\nJavisst!", score = score + 1 else: print "\nFel.", print explanation print "Poäng:", score return score

Uppgift: Fyll i funktionstabellens sista tre rader!

def main(): trivia_file = open_file("natur.txt", "r") title = next_line(trivia_file) welcome(title) score = 0 category, question, answers, correct, explanation = \ next_block(trivia_file) while category: print category ask_a_question(question,answers) answer = raw_input("Vad svarar du? ") score = check_answer(answer,correct,score,explanation) category, question, answers, correct, explanation = \ next_block(trivia_file) trivia_file.close() print "Det var sista frågan!" print "Din totalpoäng blev:", score main() # Anropar main()-funktionen

Objekt Objekt är en datatyp som kan innehålla både data och funktioner. Data som tillhör objektet kallas attribut. En funktion som hör till objektet kallas metod. namn:"Pricken" lynne:"sur" hunger:5

Klasser För att skapa objekt behöver man en klass. En klass är en mall för ett objekt I klassen beskrivs attribut och metoder. Alla metoder har parametern self som används för att komma åt de egna attributen. Metoden __init__(self) kallas konstruktor och anropas automatiskt då ett objekt skapas.

# Demonstrerar en husdjursklass (som Critter i kapitel 8) import random class Husdjur(object): """ Ett virtuellt husdjur """ def __init__(self, namn): self.namn = namn self.lynne = random.choice(("sur","arg","ledsen")) self.hunger = 5 print "Hej, jag heter", self.namn def visa_status(self): print "Just nu är jag", self.lynne, if self.hunger > 0: print "och hungrig!" else: print "och mätt!" def mata(self, mat): self.hunger -= mat def leka(self): self.lynne = random.choice(("glad","sprallig","busig")) konstruktor metoder attribut

def main(): pricken = Husdjur("Pricken") svar = raw_input("Vill du mata mig eller leka? ") if svar[0]=="m": pricken.mata(5) else: pricken.leka() pricken.visa_status() main()

Uppgift: Om vi hade använt objekt för att representera frågeblocken i trivia-programmet - vilka attribut skulle objektet då haft?

Klassattribut och statiska metoder Attribut och metoder hör alltid till ett visst objekt (Pricken är sur och hungrig) Men ett klassattribut är en variabel som är gemensam för alla objekt ur klassen. En variabel som skapas utanför metoderna i en klassdefinition blir automatiskt ett klassattribut. En statisk metod är en metod som arbetar på klassen. Då måste man ange att den är statisk: welcome = staticmethod(welcome)