Pseudoslumptal / slumptal. Pseudoslumptal... Slumptal exempel. Slumptal exempel

Relevanta dokument
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.

Pythons standardbibliotek

729G04 Programmering och diskret matematik. Python 3: Loopar

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

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

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

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?

Datalogi för E Övning 3

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

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Erfarenheter från labben

Föreläsning 4 Programmeringsteknik och Matlab DD1312. Logiska operatorer. Listor. Listor, tupler, strängar och forslingor

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

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

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

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

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

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

Ordlistor, filhantering och ut på webben. Linda Mannila

Föreläsning 2 Programmeringsteknik och C DD1316

TDP002 - Imperativ programmering

TDDE44 Programmering, grundkurs

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

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Grundläggande datalogi - Övning 1

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

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

Övning 1 - Abstrakta datatyper

Introduktion till programmering SMD180. Föreläsning 7: Strängar

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

DD1314 Programmeringsteknik

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

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

Introduktion till programmering SMD180. Föreläsning 8: Listor

Övningsuppgifter kapitel 8

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Använda Python Laboration 1 GruDat, DD1344

Grundläggande databehandling ht 2005

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Tentamen i Introduktion till programmering

Några saker till och lite om snabbare sortering

Grundläggande Datalogi

Föreläsning 18 Filer och avbildningar

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Laboration: Whitebox- och blackboxtesting

Datalogi, grundkurs 1

Introduktion till programmering D0009E. Föreläsning 9: Tupler och dictionaries

TDIU01 - Programmering i C++, grundkurs

Installera Anaconda Python

Föreläsning 6: Introduktion av listor

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

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

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

Teori: Variabler En variabel har fyra grundläggande egenskaper: Namn, Typ, Värde och Synlighet.

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

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

Klasser och objekt, referenser Grundkurs i programmering med Python

Text och strängindexerade fält Grundkurs i programmering med Python

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

Övning 6. Ali Tofigh 24 Oktober, 2006

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 3 Programmeringsteknik och Matlab DD1315. Importering av moduler. randrange

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

Grundläggande datalogi - Övning 4

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Chapter 3: Using Classes and Objects

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 7 augusti 2015, kl 08:00-12:00

Hashing Bakom kulisserna på Pythons dictionary

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

Planering Programmering grundkurs HI1024 HT data

C++ Slumptalsfunktioner + switch-satsen

Introduktion till Jasmine 1.2 ODQL

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Grundläggande datalogi - Övning 2

TDIU01 - Programmering i C++, grundkurs

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

Planering Programmering grundkurs HI1024 HT 2014

Tentamen i Grundläggande Programvaruutveckling, TDA548

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Föreläsning 13 Testning och strängar

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Sekvensdatatyper, ASCII och chiffer. Linda Mannila

Föreläsning 13 Datalogi 1 DA2001

729G04 Programmering och diskret matematik

Datastrukturer. föreläsning 6. Maps 1

Transkript:

Pseudoslumptal / slumptal Pseudoslumptal... Slump existerar inte i datorns välordnade miljö så slumpartade tal finns naturligtvis inte heller Men man behöver slump i vissa försök och i simuleringar så man har något som verkar slumpmässigt nog, pseudoslumptal Man måste kunna återupprepa försök så det är nödvändigt med någon metod för att göra om försök med samma resultat som föregående försökstillfälle har ett antal olika funktioner för att generera pseudoslumptal och en metod för att säkerställa att man får samma talserie vid flera tillfällen Man börjar sitt program med att importera modulen random och i sitt program anropar man modulens funktioner med hjälp av prefixet random Den grundläggande funktionen är random.random() som ger ett tal x sådant att 0.0 x < 1.0 rektangelfördelat (= alla värden lika sannolika) men oftast använder man andra funktioner (som använder random.random() internt) random.uniform(1, 10) ger ett tal x sådant att 1.0 x < 10.0 rektangelfördelat random.randrange(6) ger 0, 1, 2, 3, 4 eller 5 med samma sannolikhet random.randint(a, b) ger ett heltal i sådant att a i b random.choice( abcdefghij ) väljer ett godtyckligt element ur texten eller ur en lista (eller ur någon uppräkningsbar datastruktur) random.shuffle(items) blandar items, som ska vara en lista. Ett sätt att skapa permutationer, m.a.o. random.sample([1, 2, 3, 4, 5], 3) väljer tre ur listan (inte samma flera gånger) För att starta en ny slumptalsserie använder man random.seed() För att starta samma slumptalsserie om och om igen använder man random.seed(n) där man väljer ett tal n som man inte ändrar mellan programkörningar. DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 1 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 2 / 20 Slumptal exempel Slumptal exempel Kasta tärning 10000 gånger och se om det blir ungefär lika stort utfall för varje sida på tärningen info = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0} for i in range(10000): info[random.randint(1, 6)] += 1 for i in info: print (i, :, info[i]) eller info = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0} for i in range(10000): info[random.choice([1, 2, 3, 4, 5, 6])] += 1 Ur en liten grupp med personer (9 st) ska man ta ut två lag på 3 personer vardera helt slumpmässigt. Ett sätt att göra det på är slumpa fram 3 namn ur gruppen och sedan tre till, som inte ingår i den först utvalda gruppen. folk = [ Kalle, Eva, Lisa, Johan, Johanna, Anders, Jessica, Per, Leo ] rest = [] lag1 = random.sample(folk, 3) for i in folk: if i not in lag1: rest.append(i) lag2 = random.sample(rest, 3) print( lag 1:, lag1) print( lag 2:, lag2) DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 3 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 4 / 20

Tupler Mängder Vi har ganska fritt använt en del datatyper i programmen men behöver veta mer om dem (och andra) för att bli effektiva som programmerare. Tupler är datasamlingar. Skapas med komma (, ). T.ex: 2, 3 eller inom parentes (2, 3). Tupler kan innehålla vad som helst och är ordnade uppräkningar av värden eller variabler. OBS! skillnaden mot listor [2, hej ] är en lista medan 2, hej eller (2, hej ) utgör en tupel. Vi har redan använt tupler: m, res = m+1, res * m för att åstadkomma komplicerade uppdateringar av flera variabler samtidigt I finns även datatypen set (= mängd) med en mängd mängdteoretiska operationer. Trots att mängder omges av {} så måste man skapa en tom mängd med set() eftersom {} används som konstruktor både för mängder och lexikon (dict) och konstruktorn utan argument skapar ett tomt lexikon. Konstruktorn {} kan användas för att skapa en mängd från en kommaseparerad lista, ex: a, b, c Det finns två typer av mängder. Det som vi vanligtvis menar med en mängd, datatypen set, kan uppdateras, man kan lägga till och ta bort element, medan mängder av datatypen frozenset utgör mängdkonstanter, d.v.s. mängder som, när de en gång skapats, inte kan ändras. DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 5 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 6 / 20 Mängder tester... Mängder mängdoperationer... Antag att vi har två mängder, A och B samt ett element x len(a) antalet element i A x in A True om x är ett element i A x not in A True om x inte är ett element i A A.isdisjoint(B) True om A inte har några element gemensamma med B A.issubset(B) True om A B A <= B A < B True om A B A.issuperset(B) True om A B A >= B A > B True om A B A.union(B [,...]) A B... A B [...] A.intersection(B [,...]) A B... A & B [ &...] A.difference(B [,...]) A \ B... A - B [ -...] A.symmetric_difference(B) A B = (A B) \ (A B) Det finns en hake med infix-operatorerna. kräver datatypen set eller frozenset för att de ska fungera. Med de andra räcker det att operatorn B (o.s.v.) kan tolkas som något som kan vara argument till mängd-konstruktorn DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 7 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 8 / 20

Mängder några nyttiga operationer... Lexikon (dictionary dict) A = B.copy() A.add(x) A.remove(x) A.discard(x) A.pop() A.clear() Låt A bli en kopia av B Lägger till elementet x till mängden A Tar bort x från mängden A ger ett KeyError om A inte innehåller x Tar bort x från mängden A om x finns i A Tar bort ett godtyckligt element från mängden A Tömmer mängden A Ett lexikon skapas med dict() eller med konstruktorn {}. Det består av ett antal par nyckel:värde där nyckelvärdet är unikt i ett lexikon och det fungerar som en funktion med punktvis definierad indatadomän. Ex.: d = dict({ hej : hi, hejdå : goodbye }) som ger samma resultat som någon av satserna nedan d = { hej : hi, hejdå : goodbye } d = dict(hej= hi, hejdå= goodbye ) d = dict([[ hej, hi ], [ hejdå, goodbye ]]) DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 9 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 10 / 20 Lexikon... Textsträngar De viktigaste operationerna på dict(): dict([arg]) Skapa ett lexikon där arg (om det finns) är på någon av formerna på förra bilden len(d) ger antalet par i lexikonet d d[nyckel] ger värdet för nyckel nyckel eller KeyError om nyckeln inte finns i d d[nyckel] = x uppdaterar värdet för nyckel nyckel i d eller sätter in ett nytt par nyckel:x del d[nyckel] tar bort paret med nyckel nyckel från d eller KeyError om nyckeln inte finns i d nyckel in d True on nyckeln nyckel nyckel finns i d nyckel not in d True on nyckeln nyckel nyckel inte finns i d not nyckel in d True on nyckeln nyckel nyckel inte finns i d Flera operationer finns (men de ovan är vad jag hittills använt) All slags inmatning med funktionen input ger en textsträng (av typen str) till resultat. Det innebär att vi måste kunna hantera textsträngar effektivt. En textsträng omsluts antingen av apostrofer ( ) eller citattecken (") Så det går bra att få med båda dessa i strängar: >>> s = "It is", he said + "but it wasn t" >>> print(s) "It is", he said but it wasn t Här ser vi också ett exempel på strängkonkatenering DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 11 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 12 / 20

Textsträngar... Textsträngar, enkel manipulation... Eftersom textsträngar är viktiga finns en uppsjö funktioner för att hantera dem. Alla funktioner som generellt fungerar på sekvenser (i s mening), av vilka vi har tittat lite på list, tuple, range fungerar också på textsträngar Vi tittar på några, men kolla själva på 3 tutorial, kap 3.1.2 http://docs.python.org/py3k/tutorial/introduction.html#strings 3:s standard bibliotek, kap 4.6: http://docs.python.org/py3k/library/stdtypes.html Där finns alla funktioner som fungerar med textsträngar x in s x not in s s + t s * n n * s s[i] s[i:j] s[i:j:k] len(s) min(s) max(s) s.index(x) s.count(x) True om det finns en delsträng x i s False om det finns en delsträng x i s annars True konkatenera s och t en sträng med n kopior av s konkatenerade en sträng med n kopior av s konkatenerade i:te elementet i s (första är nollte elementet elementen i s från och med index i till index j elementen i s från och med index i till index j med steget k s längd minsta elementet i s största elementet i s index för första förekomsten av x i s antalet förekomster av x i s DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 13 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 14 / 20 Några nyttiga textstränghanterande funktioner... Mera om textsträngar... s.endswith(suffix) s.startswith(prefix) s.lower() s.upper() s.partition(sep) s.split(sep) s.strip() s.strip(t) Några variationer på funktionerna True om s slutar med strängen suffix True om s börjar med strängen prefix gör alla versaler till gemener i s gör alla gemener till versaler i s dela s i tre delar, det före sep, sep och det efter sep dela s i en lista med delar där sep är delare ex: 1 2 3.split( ) ger [ 1, 2, 3 ] ta bort inledande och avslutande tab och blank från s ta bort alla tecken i t från början och slutet av s ex: tecknet.strip( te ) ckn s.endswith(suffix, start, end) True om s[start:end] slutar med strängen suffix s.startswith(prefix, start, end) True om s[start:end] börjar med strängen prefix Man kan testa sina textsträngar för att se om de är alfanumeriska, kan representera ett tal, fungerar som identifierare enligt m.m. Se http://docs.python.org/py3k/library/stdtypes.html DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 15 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 16 / 20

Exempel konvertera hexadecimala tal En filterfunktion hex_to_dec för översättning av en hexadecimal symbol till dess decimala värde: def hex_to_dec(hexstring): figures = 0123456789 hexchar = ABCDEF hexlochar = abcdef dec = 0 for c in hexstring: dec *= 16 if c in figures: dec += (ord(c) - ord( 0 )) elif c in hexchar: dec += (ord(c) - ord( A ) + 10) elif c in hexlochar: dec += (ord(c) - ord( a ) + 10) return None return dec Exempel konvertera hexadecimala tal... och ett litet huvudprogram: def main(): PROMPT = ange ett positivt hexadecimalt tal: print( Avsluta med något icke hexadecimalt! ) inp = input(prompt) while True: num = hex_to_dec(inp.strip()) if num == None: print(" "+inp+" är inte ett hexadecimalt tal!") break print(num) inp = input(prompt) main() print("bye, bye!") DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 17 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 18 / 20 Exempel en liten kommandotolk En kommandotolk som accepterar förkortningar av kommandon: commands = set([ sluta, fortsätt, stopp, stanna, hjälp, quit ]) def main(): cmd = while cmd not in [ sluta, quit ] : cmdlst = list() cmd = input( Kommando: ).lower() try: infloat = float(cmd) print( push, infloat) except: for c in commands: if c.startswith(cmd): cmdlst.append(c) if len(cmdlst) == 1: cmd = cmdlst.pop() utför_kommando(cmd) elif len(cmdlst) == 0: okänt_kommando(cmd) tvetydigt_kommando(cmdlst) Exempel en liten kommandotolk... def utför_kommando(cmdo): print("kommando = " + cmdo + " ") def okänt_kommando(cmdo): print("okänt kommando: " + cmdo + "!") def tvetydigt_kommando(clst): print("tvetydigt, kan vara något av:", end= ) clst.sort() while len(clst) > 0: c = clst.pop(0) if len(clst) == 0: print(" " + c + " ") elif len(clst) == 1: print(" " + c + " ", end= eller ) print(" " + c + " ", end=, ) DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 19 / 20 DA2001 (Föreläsning 13) Datalogi 1 Hösten 2011 20 / 20