Python: Funksjoner og moduler Kapittel

Like dokumenter
Python: Funksjoner og moduler Kapittel

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

Læringsmål og pensum. Intro til returverdifunksjoner: Generering av tilfeldige tall 27/09/16

Auditorieøvingstider for alle linjer er postet på forsiden av wikien (under «Siste nytt»). Studenter som ikke kan møte til oppsatt tidspunkt, kan

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Øvingsforelesning 1 Python (TDT4110)

YouTube-kanal ITGK. Læringsmål og pensum

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Oppsummering fra sist

Øvingsforelesning i Python (TDT4110)

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Løse reelle problemer

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Løse reelle problemer

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

Læringsmål og pensum. if (be): else (not_to_be):

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Objektorientert programmering i Python

TDT4110 IT Grunnkurs Høst 2015

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Øvingsforelesning i Python (TDT4110)

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Informasjon Prøveeksamen i IN1000 høsten 2018

Steg 1: Rest etter divisjon

Hvordan løse problemer med programmering?

TDT4110 IT Grunnkurs Høst 2016

Mattespill Nybegynner Python PDF

TDT4110 IT Grunnkurs Høst 2016

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Kapittel 1 En oversikt over C-språket

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Del 1 En oversikt over C-programmering

Øvingsforelesning 5 Python (TDT4110)

Læringsmål og pensum. v=nkiu9yen5nc

Øvingsforelesning 5 Python (TDT4110)

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

TDT4105 IT Grunnkurs Høst 2016

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

Repetisjon Novice Videregående Python PDF

Utførelse av programmer, metoder og synlighet av variabler i JSP

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

MAT-INF 1100: Obligatorisk oppgave 1

IN1000 Obligatorisk innlevering 7

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Kanter, kanter, mange mangekanter

Informasjon Eksamen i IN1000 høsten 2017

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Python: Strenger 3. utgave: Kapittel 8

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Steg 1: Tekst på flere linjer

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

Øvingsforelesning i Python (TDT4110)

Skilpaddetekst. Steg 1: Tekst på flere linjer. Sjekkliste. Introduksjon

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

INF109 - Uke 1b

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

INF109 - Uke 1a

INF120: Oblig 3. Yngve Mardal Moe

Noen innebygde funksjoner - Vektorisering

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

2 Om statiske variable/konstanter og statiske metoder.

Noen innebygde funksjoner - Vektorisering

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Innleveringsoppgave 1

Løpende strekmann Erfaren Videregående Python PDF

Python: Filer og unntak Gaddis: Kapittel 6

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

UNIVERSITETET I OSLO

Finne ut om en løsning er helt riktig og korrigere ved behov

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Verden - Del 2. Intro. Skrevet av: Kine Gjerstad Eide

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Finne ut om en løsning er helt riktig og korrigere ved behov

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

Transkript:

Python: Funksjoner og moduler Kapittel 5.7-5.10 TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum Mål Kunne bruke bibliotek i Python, f.eks random og math Kunne lage og kalle egne funksjoner med returverdi Vite hvordan vi oppnår gjenbrukbare funksjoner Pensum Starting out with Python: Chapter 5.7-5.10 Value-Returning Functions and Modules

Bibliotek og import Kapittel 5.7, 5.9

Standard Library-funksjoner Funksjoner i Pythons standardbibliotek Kan brukes uten videre En ferdiglaget funksjon en svart boks Vi kan bruke funksjonen uten å se inn i boksen Vi har allerede brukt flere standardfunksjoner i Python, f.eks: input( ) int( ) print( ) format( ) Vi har ikke behøvd å vite hvordan disse er laget kan f.eks. bruke print() uten å skjønne dens 50+ kodelinjer 4

Funksjoner i andre bibliotek Funker også som svarte bokser, for eksempel: math.sqrt(x) # returnerer kvadratroten til x cmath.sqrt(x) # kvadratroten til x (også for x < 0) turtle.forward(p) # tegner en rett strek, p piksler lang random.random() # gir en tilfeldig float i intervallet [0.0,1.0 Må importere biblioteksmodulen før bruk import math import random as r x = 9 y = math.sqrt(x) z = math.sin(x) k = r.random() from math import sqrt, sin from random import random x = 9 y = sqrt(x) z = sin(x) k = random() from math import * from random import * x = 9 y = sqrt(x) z = sin(x) IKKE ANBEFALT! For mer om fordeler og ulemper, se http://stackoverflow.com/questions/710551/import-module-or-from-module-import 5

Modulen math - matematikk Innhold Funksjoner for å utføre matematiske beregninger Matematiske konstanter som pi og e Bruk av modulen: Importere, f.eks. import math Kalle funksjon, f.eks. y = math.sqrt(x) Bruke konstant, f.eks. omkr = 2 * math.pi * r Oversikt over modulens innhold Noen av funksjonene: Table 5-2 (p.237) i Gaddis-boka Komplett liste: https://docs.python.org/3/library/math.html 6

Modulen random tilfeldige tall Egentlig: pseudo-tilfeldige tall Diverse bruksområder, f.eks. Spill og simuleringer Statistiske analyser Autogenerert musikk og kunst Noen funksjoner: random.seed() # gi frøverdi (oftest ok uten) random.random() # tilfeldig flyttall [0.0,1.0 random.uniform(fra,til) # tilfeldig flyttall [fra, til random.randint(fra,til) # tilfeldig heltall [fra,til] random.choice(liste) # ett tilfeldig element fra liste random.randrange(fra,til,steg) # velger ett tall fra serien Komplett liste av funksjoner: https://docs.python.org/3/library/random.html [fra, fra+steg, fra+2*steg,, til NB! [ ] 7

Void- og returverdi-funksjoner Noen funksjoner i Python returnerer ikke verdier, f.eks. print() # skriver ut på skjermen turtle.forward() # tegner en strek random.seed() # gir frøverdi ( seed ) for random Slike funksjoner kalles på engelsk void Andre funksjoner returnerer verdier, f.eks. input() # returverdi: strengen som brukeren skrev turtle.position() # returverdi (float, float): markørposisjon random.randint(1,6) # returverdi int: en tilfeldig terningverdi 1-6 str.isdigit() # True hvis strengen str kun inneholder tall, # False hvis minst ett tegn er noe annet I Python oppgis ikke returtype ved definisjon av funksjon I mange andre språk (f.eks Java, C, C++) oppgis dette 8

Skrive egne funksjoner med returverdi Kapittel 5.8

Oppbygning av en funksjon Forelest forrige uke: Funksjonsdefinisjonen begynner med ordet def Parentes etter funksjonsnavnet har parametre Kodeblokka til funksjonen har innrykk Kan opprette lokale variable (for mellomregninger) Kan bruke (+endre) globale variable (NB: sjelden anbefalt!) Nytt denne uka Lage funksjoner som returnerer verdier I så fall må return inngå i kodeblokka Typisk siste (nederste) setning i funksjonen Kan stå andre / flere sted (f.eks. if-else- ) Når return utføres, hopper kjøring tilbake der funksjonen ble kalt fra def funksjonsnavn (para1, para2, para3): kode kode return uttrykk 10

Kan også returnere flere verdier Uttrykk bak return - hva som helst som gir en verdi Kan returnere int, float, bool, str, liste osv. Kan også returnere flere verdier Format: return uttrykk1, uttrykk2, (komma mellom hver) Antall variable i kallet må stemme, dvs. En variabel på venstresiden av = for hver returnert verdi: def get_name(): first_name = input("first name? ") last_name = input("last name? ") return first_name, last_name # skriptet, der vi kaller funksjonen: fornavn, etternavn = get_name() 11

Hvorfor trenger vi returverdier? Funksjoner: Bruke samme kode flere sted i programmet Eller i flere forskjellige programmer Funksjon må kommunisere med resten av programmet Tre mulige løsninger 1. Ingen vesentlig kommunikasjon Funksjonen leser selv sine inndata med input( ) Funksjonen skriver selv ut resultat med print( ) 2. Via globale variable Før kallet puttes inndata til funksjonen i en global variabel Funksjonen putter resultatet i en annen global variabel Programmet henter resultatet fra sistnevnte variabel og bruker det 3. Via parametre (inndata til funksjon) og returverdi (resultat) 12

Behovet for parametre og returverdier Funksjon må kommunisere med resten av programmet Tre mulige løsninger 1. Ingen vesentlig kommunikasjon Funksjonen leser selv sine inndata med input( ) Funksjonen skriver selv ut resultat med print( ) 2. Via globale variable DÅRLIG Før kallet puttes inndata til funksjonen i en global variabel Funksjonen putter beregnet resultat i en annen global variabel, programmet bruker denne verdien videre 3. Via parametre (inndata til funksjon) og returverdi (resultat) 13

Eksempel: dårlig vs. god Vi vil lage en funksjon som beregner absoluttverdi: x = x, hvis x >= 0, x = x, hvis x < 0 abs() fins allerede i standardbiblioteket men lager vår egen for illustrasjon Mulig bruk: Statistiske analyser Situasjoner der bare positive verdier gir mening Dårlig løsning 1: input() og print() i funksjonen Dårlig løsning 2: globale variable God løsning: parameter og return kode: abso_v0.py abso_v1.py abso_v2.py 14

Oppgave: Lag deres egen funksjon Standardbiblioteket inneholder funksjonen round() Ett argument: Avrunder til hele tall, round(2.87) 3 Argument nr 2: ønsket antall desimaler round(2.87, 1) 2.9 round(12345.678, 2) 12345.68 round(12345.678, 2) 12300 En fin funksjon, men følger ikke vanlige avrundingsregler round(2.5) 2 # skulle vært 3 round(2.55) 2.5 # skulle vært 2.6; round(2.75) 2.8 Vi vil lage en funksjon avrund() med vanlige regler 15

Oppgave avrl_v0.py avrm_v0.py avrv_v0.py LETTERE: MIDDELS: VANSKELIGERE: Lag funksjon avrund() som tar ett argument (et flyttall) og som returnerer nærmeste hele tall. Halve skal konsekvent rundes oppover, f.eks. 2.5 3, 3.50 4 Lag funksjon avrund() som tar to argumenter. Det første et flyttall som skal avrundes, det andre ønsket antall desimaler. Den andre parameteren skal ha defaultverdi 0 så funksjonen runder av til hele tall hvis det kun gis ett argument i kallet. HINT: int() gjør om flyttall til heltall, men bare kutter desimaldelen, runder aldri opp. Funksjonen må derfor gjøre litt i tillegg, enten en if-setning eller annet lite triks for at det rundes opp der dette er regelen. (a) I tillegg til MIDDELS, sørg for at avrund() også takler negative tall for det andre argumentet og kan avrunde grovere enn heltall, f.eks. avrund(12345.6, -2) skal gi 12300. (b) Søk på nettet og finn ut hvorfor round() gjør feilene (i) 2.5 2 og (ii) 2.55 2.5 NB: (i) og (ii) har ulike grunner, prøv om du klarer å forstå begge! 16

Lagre funksjoner i moduler Kapittel 5.10

Lagre funksjoner i moduler Modul : fil som inneholder Python-funksjoner Programmer kan importere modulene og kalle funksjonene import modulnavn Filnavn for modul skal slutte med.py Ikke nøkkeluttrykk i Python (if.py, while.py, ) Hvorfor moduler?: gruppere relaterte funksjoner program blir lettere å forstå, teste og vedlikeholde nyttige funksjoner kan brukes i mange program EKSEMPEL: avrund() som vi nettopp lagde generell bruksverdi, la oss putte den i en modul! NB! For at kodeeksemplene under skal virke, må fila avrunding.py ligge på samme katalog som ost.py, bank.py og skole.py når du kjører kode: avrunding.py bruk: ost.py, bank.py, skole.py 18

Oppsummering (1) Dette kapittelet dekket: Returverdifunksjoner, inkludert Å skrive returverdifunksjoner Å bruke returverdifunksjoner Å returnere flere verdier fra en funksjon Å bruke bibliotekfunksjoner og import-uttrykket Moduler, inkludert Modulene random og math Å gruppere dine egne funksjoner i moduler 19

Oppsummering (2), mange slags funksjoner Uten returverdi - eksempel: - hvordan kalle? Tilsvarer hel setning Med returverdi - eksempel: - hvordan kalle? Tilsvarer en verdi Hva må skrives lenger oppe i programmet? Innebygde I bibliotek Egendefinerte print( ) color() abso_v0() print( Hei! ) turtle.color( red ) abso_v0() abs() input() a=input( Tall? ) print(abs(a)) ingenting random() sin() x=random.random() y=math.sin(x)/2 import turtle import random import math eller from import (slippe prefiks ved kall) abso_v2() x=abso_v2(-5.1) def funknavn(par): setninger. #hvis returverdi return verdi 20

Ekstraoppgave, del 1 Lag funksjonen overlapp_intervall(a,b,c,d) Gitt intervallene (a,b) og (c,d): overlapper de hverandre? Returnere True hvis overlapp, ellers False Om ett begynner der det andre slutter: ikke overlapp Bruk parametre og returverdi IKKE global variabel, IKKE input og print i funksjonen kode: overlapp_intervall_v1.py v2 v3 c d a True b True True False 21

Ekstraoppgave, del 2 Gitt to rektangler parallelle med x- og y-aksen: Overlapper de? Lag en funksjon som sjekker dette! 8 parametre, x1,y1, x2,y2, x3,y3, x4,y4 (x1,y1) og (x2,y2) er koordinatene for nedre venstre og øvre høyre hjørne i ett rektangel (x3,y3) og (x4,y4) er tilsvarende koordinater for det andre rektanglet Dette er ganske tricky! Ligner på oppgave 2d, eksamen i TDT4102 (C++), juni 2015 Potensielt jobbintervjuspørsmål Blir vesentlig enklere med gjenbruk av overlapp_intervall( ) Bare vi skjønner hvordan vi skal bruke den kode: overlapp_rektangel_halvferdig.py _ferdig.py ; _import.py 22