TDP002 - Imperativ programmering

Relevanta dokument
Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

TDP002 - Imperativ programmering

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Språket Python - Del 2 Grundkurs i programmering med Python

TDP002 - Imperativ programmering

TDP002 Imperativ programmering

Selektion och iteration

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

Grundläggande datalogi - Övning 1

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering

Den klassiska programmodellen. Introduktion till programmering D0009E. Föreläsning 11: Filer och undantag. Filsystem. Interaktiva program.

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

PROGRAMMERINGSTEKNIK FÖRELÄSNING 5

Laboration: Whitebox- och blackboxtesting

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Ordlistor, filhantering och ut på webben. Linda Mannila

Att skriva till och läsa från terminalfönstret

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

Funktioner. Linda Mannila

Tentamen i Introduktion till programmering

TDP002 - Imperativ programmering

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Skapa hashtabell. En hashtabell kan ses som en lista där programmeraren associerar egna nycklar (index) till varje element som ska läggas i tabellen :

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

729G04 Programmering och diskret matematik. Föreläsning 7

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Omprov 11/11. på förmiddagen.

TDP Regler

Några saker till och lite om snabbare sortering

Datalogi för E Övning 3

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Introduktion till programmering SMD180. Föreläsning 11: Filer och undantag

Övning 0. Python för den som kan MATLAB. Lättare att läsa färdig kod än att skriva själv Det krävs övning för att automatiskt få detaljerna rätt:

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

TDP Regler

Föreläsning 6 Programmeringsteknik och Matlab DD1312

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Tutorial: Python på 90 minuter

DD1311 Programmeringsteknik för S1 Laborationer läsåret

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Språket Python - Del 1 Grundkurs i programmering med Python

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Sekvensdatatyper, ASCII och chiffer. Linda Mannila

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Metoder. Inledande programmering med C# (1DV402)

Felhantering TDDD78, TDDE30, 729A

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

DD1314 Programmeringsteknik

Grundläggande datalogi - Övning 2

TDDC76 - Programmering och Datastrukturer

Problemlösning och funktioner Grundkurs i programmering med Python

Objektorienterad Programmering (TDDC77)

TDIU01 - Programmering i C++, grundkurs

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

DD1311 Programmeringsteknik för CL1 Laborationer läsåret

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Repetition av filer Grundkurs i programmering med Python

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Datalogi, grundkurs 1

Föreläsnings 9 - Exceptions, I/O

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

JAVASCRIPT-POWERED LOADRUNNER CHRISTIAN GERDES PERFORMANCE ENGINEER LIGHTS IN LINE AB

Regler. Betygssättning

Pythons standardbibliotek

Introduktion till programmering och Python Grundkurs i programmering med Python

TDIU01 - Programmering i C++, grundkurs

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Programmeringsteknik med C och Matlab

TDP002 - Datortenta (DAT1)

BASH. Bourne-Again SHell. Eric Elfving Institutionen för datavetenskap (IDA)

Chapter 3: Using Classes and Objects

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

Introduktion till Unix och Linux

Besiktningsprotokollet

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Planering av ett större program, del 2 - for och listor. Linda Mannila

Instruktioner för att kunna programmera på skolans datorer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Tips och tricks. Några bra tips. Lägg till sökvägar

Programmering grundkurs

Transkript:

TDP002 - Imperativ programmering Pythons standardbibliotek Pontus Haglund Institutionen för datavetenskap Anpassat från amterial ursprungligen av: Eric Elfving

1 Felhantering 2 Standardbiblioteket Slump Datum och tid Datalagring Konfigurationsdata Kommandoraden Lösenordsinmatning Operativsystem Http Loggning

1 Felhantering 2 Standardbiblioteket Slump Datum och tid Datalagring Konfigurationsdata Kommandoraden Lösenordsinmatning Operativsystem Http Loggning

3 / 33 Felhantering Python baseras på "Duck Typing". When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.

4 / 33 Felhantering Detta leder till att vi kommer få fel som måste hanteras. >>> int('fem') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'Fem' Här ser vi exempel på undantag (exceptions) Direkt ett undantag kastas avbryts nuvarande körning och vi hoppar till närmsta hanterare Finns ingen hanterare avbryts programmet (programmet "krashar")

5 / 33 Felhantering En hanterare introduceras med ett try-block try: val=int(input('mata in ett tal: ')) except: print('skulle vara ett heltal!')

6 / 33 Felhantering Vi kan hantera olika fel på olika sätt. try: 1/a except TypeError: print('a har fel typ!') except NameError: print('a finns inte!') except ZeroDivisionError: print('kan inte dela med 0!') except: print('annat fel') Likt if-satsen är det den första som stämmer som vi går in i.

7 / 33 Felhantering Vi kan hantera flera olika fel på samma sätt. try: 1/a except (TypeError, NameError): print('a är dålig!') except ZeroDivisionError: print('kan inte dela med 0!') except: print('annat fel')

8 / 33 Felhantering Vi kan kasta undantag. >>> raise NameError('Hejsan') Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: Hejsan

9 / 33 Felhantering Mer läsning: https://docs.python.org/3/tutorial/errors.html

1 Felhantering 2 Standardbiblioteket Slump Datum och tid Datalagring Konfigurationsdata Kommandoraden Lösenordsinmatning Operativsystem Http Loggning

11 / 33 Slumphantering Ibland vill man få kod att uppföra sig slumpmässigt Datorer har svårt att ge riktig slump men många språk har pseudo-slump (en algoritm beräknar ett "slumpat'' värde) Självklart finns det även i Python - modulen random

http://docs.python.org/3/library/random.html 12 / 33

13 / 33 Datumhantering Med hjälp av modulen datetime kan man på ett enkelt sätt hantera datum och tider i Python. Det finns tre huvudtyper i modulen: date, time och datetime (finns även typer för tidsskillnader och tidszoner)

http://docs.python.org/3/library/datetime.html 14 / 33

15 / 33 Lagring av data Textfiler är bra för att lagra data mellan körningar Det kan dock ställa till med problem Hur ska jag formatera datat? Vad händer om något är felformaterat? Med hjälp av pickle kan man på ett enkelt sätt dumpa data till en fil för att sedan läsa in det igen

16 / 33 res = {'Kalle': 4, 'Anna': 5} file_name = 'resultat' with open(file_name, 'wb') as f: pickle.dump(res, f) http://docs.python.org/3/library/pickle.html

17 / 33 Lagring av data pickle går inte alltid att lita på... Använd endast data som du själv sparat ner eller från någon du litar på! Warning: The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source.

18 / 33 Lagring av data CSV Comma Separated Values Används ofta för att exportera tabelldata i flera olika program Har tyvärr ingen generell standard men kolumnvärden lagras ofta separerat med en specifik separator (ofta komma) import csv with open('fil.csv') as f: reader = csv.reader(f) for row in reader: print(row) 1, 3, 6 12, 7, 6 Listing 1: fil.csv http://docs.python.org/3/library/csv.html

19 / 33 Lagring av data json JavaScript Object Notation Ett transportformat baserat på javascript Används väldigt mycket på www Modulen json har ett gränssnitt som liknar pickle

20 / 33 Lagring av data json http://docs.python.org/3/library/json.html

21 / 33 Konfigurationsfiler Med hjälp av konfigurationsfiler kan användare ändra på ditt programs funktionalitet utan att ändra i källkoden Modulen configparser kan läsa filer på INI-formatet Skapa en fil: http://docs.python.org/3/library/configparser.html

22 / 33 Konfigurationsfiler http://docs.python.org/3/library/configparser.html

23 / 33 Kommandoradsargument I de flesta programmeringsspråk kan man skicka värden till programmet när man startar det. Detta kallas kommandoradsargument. Det "lättaste" sättet att få reda på kommandoradsargumenten är med hjälp av sys.argv. Det är en lista där varje element motsvarar ett argument.

24 / 33 Kommandoradsargument #! /usr/bin/env python3 # * coding: utf 8 * import sys for arg in sys.argv: print(arg) $ chmod +x args.py $ python3 args.py args.py $./args.py Hej mitt lilla program!./args.py Hej mitt lilla program!

25 / 33 Kommandoradsargument argparse Man kan även använda sig av modulen argparse Med argparse väljer man vilka flaggor och argument man väntar sig och sedan sköter modulen tolkningen - man slipper kontrollera och konvertera listelementen! http://docs.python.org/3/library/argparse.html

26 / 33 Kommandoradsargument argparse

27 / 33 Lösenordshantering Ibland vill man be användare mata in lösenord Vanligtvis använder vi input för indata men då kan ju andra se vad jag matar in Modulen getpass är bra Likt input kan man ge en ledtext (normalt sätt skrivs 'Password: ' ut) import getpass pwd = getpass.getpass() Det finns även en funktion getuser som tar reda på vem man är inloggad som http://docs.python.org/3/library/getpass.html

28 / 33 Operativsystemsanrop subprocess Ett anrop till ett systemkommando (eller ett annat program) kan göras med subprocess.call. Vi får ett returvärde som bör vara 0 om det gått bra. Som parameter tar call en lista som liknar sys.argv >>> subprocess.call(["ls", " l"]) 0 >>> subprocess.call(["cat", "fil_som_inte_finns"]) 1 Vill vi komma åt utskrifter från program kan man använda sig av check_output >>> subprocess.check_output(["echo", "Hello World"]) b'hello World\n'

29 / 33 Modulen os Modulen os har operativsystemsspecifika funktioner Vissa av funktionerna fungerar endast för specifika operativsystem men de flesta fungerar lika oberoende av operativsystem Några bra funktioner: os.environ En dict-liknande typ som innehåller Pythons miljövariabler os.listdir(path) Utför ls i mappen path, ger en lista som resultat os.mkdir Skapar mapp http://docs.python.org/3/library/os.html

30 / 33 os.path os.path är en undermodul med funktioner för att hantera filnamn på ett generellt sätt. Exempel: os.path.join(p1,p2) som slår samman sökvägarna p1 och p2 med ett för nuvarande operativsystems bra sätt (med avsende på separator, '/' i Linux och '\' i windows) os.path.isfile(f) kontrollerar om f är en fil os.path.abspath(path) gör om path till en absolut sökväg http://docs.python.org/3/library/os.path.html

31 / 33 Webåtkomst urllib Med urllib kan man komma åt information från webben I modulen urllib.request finns en funktion urlopen som laddar en sida och ger ett fil-liknande värde som kan hanteras som en textfil http://docs.python.org/3/library/urllib.html

32 / 33 Webåtkomst import urllib.request url="http://www.ida.liu.se" with urllib.request.urlopen(url) as page: for line in page: if '<title>' in line: title = line.split('<title>') title = title[1].split('</') title = title[0] print(line) break... <title>ida > Home</title>... IDA > Home

33 / 33 Loggning logging Med logging kan man på ett enkelt sätt logga information om sin körning till fil import logging logging.basicconfig(filename='example.log', level=logging.info) logging.debug('this does not go to the log file') logging.info('but this should') logging.warning('and this, too') INFO:root:But this should WARNING:root:And this, too Finns stöd för eget format (t.ex. tidsstämplar) http://docs.python.org/3/library/logging.html

www.liu.se