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

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

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?

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

DD1314 Programmeringsteknik

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

Pythons standardbibliotek

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

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

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

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

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

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

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

Pascal... Pascal. Pascal... Pascal...

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

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

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

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

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 2 Programmeringsteknik och C DD1316

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Tentamen i Introduktion till programmering

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

Grundläggande datalogi - Övning 1

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

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

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

TDIU01 - Programmering i C++, grundkurs

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tilpro Övning 1. Per-Anders Staav (föredrar att kallas Pa) Kan nås via epost: (fast de flesta frågor besvaras nog bäst av Alexander)

Grundläggande Datalogi

Objektorienterad Programmering (TDDC77)

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.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

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

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

F4. programmeringsteknik och Matlab

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Variabler och konstanter

Uppgifter teknik HT17 (uppdaterad v. 40)

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Laboration: Whitebox- och blackboxtesting

DD1361 Programmeringsparadigm. Carina Edlund

729G04 Programmering och diskret matematik. Python 3: Loopar

Grundläggande databehandling ht 2005

Ordlistor, filhantering och ut på webben. Linda Mannila

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

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

TDP002 - Imperativ programmering

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

Användarhandledning Version 1.2

TDP002 - Imperativ programmering

Program. Kapitel make Program Interpreterande och kompilerande program

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Sätt att skriva ut binärträd

TDDC77 Objektorienterad Programmering

TDP002 - Imperativ programmering

Planering Programmering grundkurs HI1024 HT 2014

Inledande programmering med C# (1DV402) Summera med while"-satsen

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

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

TDP002 Imperativ programmering

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

Tilpro Övning Per-Anders Staav (vikarierande) (föredrar att kallas Pa) Kan nås via epost:

Datalogi, grundkurs 1

SMD 134 Objektorienterad programmering

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

Enkla datatyper minne

C++ - En introduktion

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Några saker till och lite om snabbare sortering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Datalogi för E Övning 3

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

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

TDP002 - Imperativ programmering

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Fly me to the moon. Laboration om relationer, TDDC75 Diskreta strukturer. Mikael Asplund. 5 september 2017

Objektorienterad programmering Föreläsning 4

Imperativ programmering. Föreläsning 2

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

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Föreläsning 1 & 2 INTRODUKTION

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

TDDE44 Programmering, grundkurs

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

En kort text om programmering i C.

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

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

Transkript:

är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar översätts istället hela programmet till ett ekvivalent program i maskinens eget språk. Vi kommer inte kompilera våra program, men jag ber er lägga skillnaden på minnet. Vi kommer att använda version 3 av, men de vanligaste är (fortfarande) versionerna 2.5-2.7. Det finns program som konverterar mellan de olika versionerna. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 1 / 22

... är ett dynamiskt typat, imperativt språk DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 2 / 22

... är ett dynamiskt typat, imperativt språk Värden har typ (som i Scheme) men variabler har en typ endast om det finns ett värde bundet till variabeln. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 2 / 22

... är ett dynamiskt typat, imperativt språk Värden har typ (som i Scheme) men variabler har en typ endast om det finns ett värde bundet till variabeln. Ett fullständigt (men ganska meningslöst) program: HELLO = "Hej hej!" print (HELLO) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 2 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py Man kan, på Unix, Linux och MacOSX börja sitt program med ett direktiv #!/usr/bin/python3 DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py Man kan, på Unix, Linux och MacOSX börja sitt program med ett direktiv #!/usr/bin/python3 Då kan man starta programmet med bara namnet på filen (test.py) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py Man kan, på Unix, Linux och MacOSX börja sitt program med ett direktiv #!/usr/bin/python3 Då kan man starta programmet med bara namnet på filen (test.py) Eller möjligen (./test.py) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py Man kan, på Unix, Linux och MacOSX börja sitt program med ett direktiv #!/usr/bin/python3 Då kan man starta programmet med bara namnet på filen (test.py) Eller möjligen (./test.py) Men först måste man göra så att OS:et förstår att filen kan köras som ett program chmod +x test.py DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Programmet skrivs i en texteditor, spars på en fil under ett namn t.ex. test.py (.py för att tala om för alla (program) att filen innehåller ett program) För att köra programmet kan man skriva: python3 test.py Man kan, på Unix, Linux och MacOSX börja sitt program med ett direktiv #!/usr/bin/python3 Då kan man starta programmet med bara namnet på filen (test.py) Eller möjligen (./test.py) Men först måste man göra så att OS:et förstår att filen kan köras som ett program chmod +x test.py Då kan man kalla filen vad som helst och utelämna.py DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 3 / 22

... Man kan också använda en python-editor. Det finns flera, en kallas IDLE och levereras med python (var noga med att använda den för python 3 eller python 3.X). En annan, vanligtvis kommersiell som vi har i undervisningsversion, kallad Wing IDE, kan man också använda. Båda kommer att demonstreras ingående. Då kan man editera sina program i ett fönster och få dem utförda i ett annat. Jag kommer använda båda omväxlande men IDLE följer med python vid installationen. Wing IDE är bara en av många integrerade utvecklingsmiljöer för (3). Se länkarna på kurshemsidorna. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 4 / 22

... För att få något (vettigt?) gjort måste man ha med funktioner samt andra satser: def square(x): return x * x print(square(4)) # Funktionshuvud # Funktionskropp, obs! indenteringen # Huvudprogram DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 5 / 22

Inmatning och utmatning # -*- coding: utf-8 -*- # Med ett direktiv som ovan på rad 1 eller 2 # kan man tala om för både editorer och # för vilken teckenkodning man använder def main(): # vanligt att man använder en funktion # som huvudprogram # OBS att input ger en sträng # som måste konverteras till int x = int(input( Mata in ett tal: )) print("kvadraten på", x, "=", square(x)) def square(x): return x * x main() # Funktionshuvud # Funktionskropp # Starta huvudprogrammet DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 6 / 22

Grundläggande typer int (heltal) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) chr (tecken ur kodtabellen för UTF-8) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) chr (tecken ur kodtabellen för UTF-8) str (teckensträng) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) chr (tecken ur kodtabellen för UTF-8) str (teckensträng) list (lista med vad som helst i) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) chr (tecken ur kodtabellen för UTF-8) str (teckensträng) list (lista med vad som helst i) dict (dictionary lista med nyckel:värde-par) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Grundläggande typer int (heltal) float (reella tal) bool (sanningsvärden true & false) chr (tecken ur kodtabellen för UTF-8) str (teckensträng) list (lista med vad som helst i) dict (dictionary lista med nyckel:värde-par) set (mängd oordnad lista utan dubletter) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 7 / 22

Inmatning... x = int(input( Mata in ett tal: )) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x Men egentligen får man en teckensträng som försöker omvandla till ett heltal DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x Men egentligen får man en teckensträng som försöker omvandla till ett heltal Matar man in något annat får man ett fel och programavbrott. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x Men egentligen får man en teckensträng som försöker omvandla till ett heltal Matar man in något annat får man ett fel och programavbrott. xstr = input( Mata in ett tal: ) så hamnar den inmatade strängen i xstr DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x Men egentligen får man en teckensträng som försöker omvandla till ett heltal Matar man in något annat får man ett fel och programavbrott. xstr = input( Mata in ett tal: ) så hamnar den inmatade strängen i xstr Sedan kan inmatningen omvandlas till ett tal med kontroll av att man fått något som kan tolkas som ett tal DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... x = int(input( Mata in ett tal: )) läs in ett heltal till vaiabeln x Men egentligen får man en teckensträng som försöker omvandla till ett heltal Matar man in något annat får man ett fel och programavbrott. xstr = input( Mata in ett tal: ) så hamnar den inmatade strängen i xstr Sedan kan inmatningen omvandlas till ett tal med kontroll av att man fått något som kan tolkas som ett tal men det blir rätt bara om hela inmatningen kan tolkas som den önskade datatypen DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 8 / 22

Inmatning... def main(): # vanligt att man använder en funktion # som huvudprogram xstr = input( Mata in ett tal: ) try: x = int(xstr) except ValueError: print(xstr, "är inte ett tal!") else: print("kvadraten på", x, "=", square(x)) # slut på huvudprogrammet def square(x): return x * x main() # Funktionshuvud # Funktionskropp # Starta huvudprogrammet DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 9 / 22

Utmatning... För så här enkla program duger print utmärkt. Det räcker ganska långt. Man har en hel del möjligheter att formatera utskriften. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 10 / 22

Utmatning... För så här enkla program duger print utmärkt. Det räcker ganska långt. Man har en hel del möjligheter att formatera utskriften. print(xstr, "är inte ett tal!") skriver värdet på xstr och sedan teckensträngen "är inte ett tal!" separerade med en blank. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 10 / 22

Utmatning... För så här enkla program duger print utmärkt. Det räcker ganska långt. Man har en hel del möjligheter att formatera utskriften. print(xstr, "är inte ett tal!") skriver värdet på xstr och sedan teckensträngen "är inte ett tal!" separerade med en blank. Vill vi omge xstr med apostrofer kan vi skriva print(" ", xstr, " är inte ett tal!") men då får vi blanka kring värdet på xstr. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 10 / 22

Utmatning... För så här enkla program duger print utmärkt. Det räcker ganska långt. Man har en hel del möjligheter att formatera utskriften. print(xstr, "är inte ett tal!") skriver värdet på xstr och sedan teckensträngen "är inte ett tal!" separerade med en blank. Vill vi omge xstr med apostrofer kan vi skriva print(" ", xstr, " är inte ett tal!") men då får vi blanka kring värdet på xstr. Vi har flera alternativ för att komma runt det. xstr är av typen str (teckensträng) så man kan använda strängkonkatenering: print(" " + xstr + " är inte ett tal!") DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 10 / 22

Utmatning... För så här enkla program duger print utmärkt. Det räcker ganska långt. Man har en hel del möjligheter att formatera utskriften. print(xstr, "är inte ett tal!") skriver värdet på xstr och sedan teckensträngen "är inte ett tal!" separerade med en blank. Vill vi omge xstr med apostrofer kan vi skriva print(" ", xstr, " är inte ett tal!") men då får vi blanka kring värdet på xstr. Vi har flera alternativ för att komma runt det. xstr är av typen str (teckensträng) så man kan använda strängkonkatenering: print(" " + xstr + " är inte ett tal!") Men man kan också använda formateringsmöjligheterna som print erbjuder: print([object,...], sep=, end= \n, file=sys.stdout) Det finns alltså ett antal parametrar som, om de inte skickas med, får defaultvärde, en egenskap man kan utnyttja i programmeringen. Vi kan sätta sep= för att undertrycka mellanrummen, vi kan se till att radbrytning inte sker, vi kan skriva på en fil. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 10 / 22

OBS Namn måste börja på en bokstav eller understrykningstecken ( ) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 11 / 22

OBS Namn måste börja på en bokstav eller understrykningstecken ( ) (bokstav är alla unicode-tecken som räknas som bokstav i något alfabet) DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 11 / 22

OBS Namn måste börja på en bokstav eller understrykningstecken ( ) (bokstav är alla unicode-tecken som räknas som bokstav i något alfabet) Alltså går det bra med svenska tecken, men editorerna brukar inte hänga med. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 11 / 22

OBS Namn måste börja på en bokstav eller understrykningstecken ( ) (bokstav är alla unicode-tecken som räknas som bokstav i något alfabet) Alltså går det bra med svenska tecken, men editorerna brukar inte hänga med. Man kan ha lokala funktioner i funktioner, precis som i Scheme, och ordningen spelar ingen roll DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 11 / 22

OBS Namn måste börja på en bokstav eller understrykningstecken ( ) (bokstav är alla unicode-tecken som räknas som bokstav i något alfabet) Alltså går det bra med svenska tecken, men editorerna brukar inte hänga med. Man kan ha lokala funktioner i funktioner, precis som i Scheme, och ordningen spelar ingen roll Det finns en mängd reserverade ord False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 11 / 22

Styrstrukturer Alla tekniker vi använt i Scheme fungerar i men känner inte igen svansrekursion. def fac(n): def iterfac(n, res): if n == 0: return res else: return iterfac(n - 1, n * res) return iterfac(n, 1) try: x = input ("mata in ett heltal: ") n = int(x) except: print(" " + x + " är inte ett heltal!") else: print(fac(n)) Det innebär att programmet kraschar då man gjort för många rekursiva anrop. Gränsen är satt till högst 1000 anrop (totalt i en anropskedja), den kan ändras. DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 12 / 22

Styrstrukturer... Man behöver andra sturstrukturer så att även komplicerade algoritmer kan utföras. Vi avvecklar den inre funktionen och gör res till en lokal variabel men låter huvudprogrammet vara def fac(n): res = 1 # anropsvärdet från iterfac(n, 1) while n > 0: res *= n # samma som res = res * n n -= 1 # n = n - 1 return res DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 13 / 22

Styrstrukturer... Några varianter, kan göra samtidiga tilldelningar i tupler (sekvenser av värden) def fac(n): res = 1 while n > 0: res, n = res * n, n - 1 ## res = res * n och n = n - 1 samtidigt return res DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 14 / 22

Styrstrukturer... Vet man hur många gånger man ska gör något kan man använda for def fac(n): res = 1 for m in range (n): # Låt m gå från 0 till n - 1 res *= (m + 1) return res DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 15 / 22

Styrstrukturer... Eller: def fac(n): res = 1 for m in range (1, n + 1): res *= m return res # Låt m gå från 1 till n DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 16 / 22

Styrstrukturer... Det är vanligt att man börjar med att definiera konstanter, men eftersom inte har begreppet konstant annat än för fördefinierade objekt har man istället konventionen att skriva variable vars värden inte ska ändras med VERSALER. Det är också vanligt att låta huvudprogrammet representeras av en funktion PROMPT = Mata in ett tal: ERRTXT = " är inte ett tal!" def fac(n): res = 1 for m in range (1, n+1): res *= m return res def main(): x = input (PROMPT) n = int(x) print(fac(n)) main() DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 17 / 22

Styrstrukturer... Ordningen spelar ingen roll PROMPT = Mata in ett tal: ERRTXT = " är inte ett tal!" def main(): x = input (PROMPT) n = int(x) print(fac(n)) def fac(n): res = 1 for m in range (1, n+1): res *= m return res main() DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 18 / 22

Köra programfiler som kommandon #!/usr/bin/python3 import sys ERRTXT = " är inte ett tal!" def fac(n): res = 1 for m in range (1, n+1): res *= m return res def main(): try: x = sys.argv[1] n = int(x) except: print("använd./fac6.py <tal>.", " " + x + ERRTXT) else: print(fac(n)) main() DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 19 / 22

Enkel kommandotolk cmds = [ addera, subtrahera, sluta ] ## lista med tillåtna kommandon def main(): cmd = None ## initiera till inget kommando while not cmd: cmd = input( Kommando: ) if cmd in cmds: if cmd == addera : print("kommandot är addera ") elif cmd == subtrahera : print("kommandot är subtrahera ") elif cmd == sluta : print("kommandot är sluta, hejdå!") else: print("det finns inget " + cmd + " -kommando!") main() DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 20 / 22

Enkel kommandotolk... cmds = [ addera, subtrahera, sluta ] cmd = None count = 0 # felräknare while cmd!= sluta : cmd = input( Kommando: ) if cmd in cmds: if cmd == addera : print("kommandot är addera ") elif cmd == subtrahera : print("kommandot är subtrahera ") elif cmd == sluta : print("kommandot är sluta, hejdå!") elif count >= 2: print("efter 3 ogilitga kommandon avslutas programmet") cmd = sluta else: print("det finns inget " + cmd + " -kommando!") count += 1 DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 21 / 22

Enkel kommandotolk... cmd = None count = 0 # felräknare while cmd!= sluta : cmd = input( Kommando: ) if cmd == addera : print("kommandot är addera ") count = 0 elif cmd == subtrahera : print("kommandot är subtrahera ") count = 0 elif cmd == sluta : print("kommandot är sluta, hejdå!") count = 0 elif count < 2: print("det finns inget " + cmd + " -kommando!") count += 1 else: print("efter 3 ogilitga kommandon avslutas programmet") cmd = sluta DA2001 (Föreläsning 10) Datalogi 1 Hösten 2011 22 / 22