tisdag 23 oktober 2012

Eclipse och PyDev

Installera Eclipse

Eclipse är ett professionellt utvecklarverktyg, även kallat IDE - Integrated Development Environment, som används vid programmering i många olika språk. Eclipse är opensource-programvara och fritt att använda.

Ladda ner och installera Eclipse
Du finner Eclipse i många olika versioner beroende på viket språk det i huvudsak är förberett för. Dock kan nya språk läggas till i efterhand vilket vi kommer att göra med Python. Jag rekommenderar att du laddar ner och installerar Eclipse IDE for Java Developers (32 bit).
  • Följ denna instruktion för installation på Mac punkt 1-7
  • Punkt 8 i instruktionen: När programmet första gången startar får du uppmaning att ange "workspace".  Huvudmappen för de filer du skapar i programmet. Ange samma mapp som du redan har dina programmeringsfiler i.
  • Fortsätt med punkt 9-11


Installera PyDev och konfigurera Python

För att programmera Python i Eclipse behöver du installera Python-perspektivet PyDev. Detta görs direkt i Eclipse. Följ instruktionerna på PyDevs hemsida under rubriken Installing with the update site.  Några förtydliganden:
  • Välj som på bilden  http://pydev.org/updates som uppdateringsställe.
  • I fönstret Available Software bockar du för PyDev
  • Så som beskrivs skall du i samma fönster avbocka: Contact all update sites during install to find required software.
Om inget fel uppstår skall du nu ha PyDev installerat

Konfigurera Python
Nu är det dags att konfigurera PyDev så det använder den interpreter du har för Python. (Den du tidigare använt för att köra dina program).
  • I Eclipse väljer du Preferences i menyn Window. Sedan PyDev, Interpreter  - Python.  Samt trycker på New...
  • I dialogrutan som kommer upp skriver du in ett lämpligt namn tex: Python3.2 Sedan trycker du på Browse...
  • På Mac hittar du interpretern här: (Se även denna instruktion)
  • Du bör ha ett fönster som liknar nedanstående efter dessa steg:
  • Tryck Ok
Eclipse ska nu vara färdig för att programmera i Python

Välj PyDev perspektivet
  •  I menyn Window väljer du Open perspective och Other...

  • Tryck Ok och du ska vara klar för att programmera.

Projekt och ett första program

 Då större program består av många filer skapar man projekt där filerna samlas. Skapa ett nytt projekt där du samlar filer du gör i Programmering 1.
  • Tryck på knappen New  och välj PyDev projekt. Se nedan. Tryck Next.
  
  •  Fyll i enligt nedanstående bild och tryck Finish.
  

Nu har du skapat Projektet Programmering 1 och de källkodsfiler (moduler) du skapar kommer att finnas i en undermapp kallad src.

Ett första program
Dags att testa att programmera i Eclipse
  • Högerklicka på ditt projekt (Programmering1) i fönstret till vänster. Välj New och PyDev Module.
  • Fyll i ett namn på modulen, tex: test, och tryck Finish
  • Nu öppnas filen redo för programmering med endast en inledande kommentar inskriven. Kommentaren är av typ docstring, en typ av kommentar som läses av automatiska verktyg som hjälper programmeraren att dokumentera arbetet. Låt den gärna stå kvar.
  •  Under kommentaren skriver du något enkelt program och trycker sedan på pilen i den gröna cirkeln. (Se även bild nedan)
  • Tryck OK i dialogrutan som kommer upp. Du vill köra Python Run alltså vanlig programkörning.
  • Du kan bocka för att automatiskt spara filer före körning så slipper du svara på denna fråga varje gång.
Förhoppningsvis fungerar allt och du får ett resultat som detta:

Slut.

torsdag 18 oktober 2012

Lösningsförslag repetitionsuppgifter del 1

Nedanstående är förslag på lösningar till repetitionsuppgifterna 1.1-1.10.

Rep 1.1

#Summan av två kastade tärningar
import random

t1=random.randint(1,6)
t2=random.randint(1,6)
print("Ögonsumman blir " + str(t1+t2))


Rep 1.2

#Medlet av inmatade tal
summa=0
antal=0

while True :
    try:
        n=float(input("n="))
        if (n == -1) : break
        summa=summa+n
        antal=antal+1
        print("Medlet=" + str(summa/antal))
    except ValueError:
        print("Felaktig inmatning")
print("Slut")

Rep 1.3

#Största av inskrivna positiva tal
storst=-1

while True :
    try:
        n=float(input("n="))
        if (n == -1) : break
        if storst < n : storst=n
        print("Medlet=" + str(summa/antal))
    except ValueError:
        print("Felaktig inmatning")
print("Största talet var: " + str(storst))



Rep 1.4

(x > 100 or x < 50) and x != 20

Rep 1.5

#Skriver ut talet, kvadraten och kuben för 1-20 i kolumner
for x in range(1, 21) :
    print("{:4d}{:6d}{:6d}".format(x, x*x, x*x*x))

Rep 1.6

#Skriver ut positionssiffrorna för ett heltal

tal = input("Skriv ett heltal: ")
nollor=len(tal)-1

#Går igenom tecken för tecken. Lägger till nollor enligt
#position från slutet för att skriva ut vilken plats siffran står på.
for s in tal :
    print("1"+"0"*nollor+"-talssiffran är "+str(s))
    nollor=nollor-1

Rep 1.7
Uttrycket not (not a and not b) ger samma resultat som a or b

Rep 1.8

#Kontrollerar om ett heltal är ett primtal
import math

a=int(input("Skriv ett positivt heltal: "))
rot=int(math.sqrt(a)) + 1
primtal=True

#Testar att dividera med alla tal upp till roten ur det
#inskrivna talet. Sätter primtal till falskt och hoppar ur om delbart.
for i in range(2, rot) :
    if a % i == 0 :
        primtal = False
        break

#Om primtal fortfarande är sant så har inget tal varit delare.
if primtal : print( str(a) + " är ett primtal")
else : print( str(a) + " är inte ett primtal")

Rep 1.9

#Simulerar sönderfall genom kast av många tärningar.
import random

n = 1000
k = 0

print("Kast  Antal")

#Loopar tills tärningarna är slut
while n > 0 :
    print("{:3d}{:8d}".format(k, n))
    #Kastar alla tärningar som är kvar efter förra omgången
    #Tar bort de som slår 6.
    for i in range(n) :
        if random.randint(1, 6) == 6 :
            n=n-1
    k = k +1

Rep 1.10
XOR kan skrivas som tex:

(a or b) and not (a and b) 

men det snyggaste sättet är:

a != b


Rep 1.11

#Hästkapplöpning med tärningskast. Först till 100
#Version med sammansatta logiska-satser
import random

hast1_position = 0
hast2_position = 0
vinnare=0

#Spelaren väljer häst
while True :
    try :
        val=int(input("Satsa på häst 1 eller 2: "))
        break
    except ValueError :
        print("Välj 1 eller 2 ")

#Här springer hästarna
print("Tryck enter för nytt tärningskast")
while hast1_position < 100 and hast2_position < 100 :
    print("Häst 1 har nått: " + str(hast1_position))
    print("Häst 2 har nått: " + str(hast2_position))
    hast1_position=hast1_position+random.randint(1,6)
    hast2_position=hast2_position+random.randint(1,6)
    input() #Tryck enter för varje "tärningskast"

#Vilken häst vann?
if hast1_position < 100 :
    vinnare=2
    print("Häst 2 vann")
elif hast2_position < 100 :
    vinnare=1
    print("Häst 1 vann")
else :
    print("Lika!")

#Vann spelaren?    
if (val == vinnare) :
    print("Du vann!")
else :
    print("Du förlorade")

tisdag 16 oktober 2012

Mer om kodning samt repetitionsuppgifter 1.2

Funktioner i funktioner

Redan i början av kursen introducerades en funktion som var innuti en annan funktion, så kallade nästlade funktioner. Nämligen:
 
vinkeln=float(input("vinkeln="))
 
Där funktionen input körs först och svaret direkt hanteras av funktionen float. Denna typ av skrivning är mycket vanlig för att slippa onödiga variabler. Alternativet skulle varit att först skapa en strängvariabel med input och sedan på en ny rad göra om den till ett tal:

s=input("vinkeln=")
vinkeln=float(s)

Något som ju är klumpigare både för programmeraren och datorn. Fram över kommer vi i högre utsträckning ha användning för denna typ av skrivning.

Metoder efter metoder

På liknande sätt som funktioner kan nästlas kan metoder skrivas efter varandra med punkt mellan. Nedanstående följd av metoder skriver ut "STOP" från texten "stopp":

"stopp".upper().replace("STOPP", "STOP")

Övning 1.39
Testa ovanstående i interaktiva skalet.

Funktioner i villkor

Det går även att använda funktioner som input direkt i ett villkor.

Övning 1.40
Använd interaktiva skalet och testa detta:
while input("Sluta? ") !="J" : print("Ett varv till")

Nyckel ordet pass

Det finns situationer då språket kräver att en sats finns men du inte vill att någon åtgärd görs. Då kan pass komma till användning. Ex:

while True :
    try:
        x=float(input("Skriv ett tal "))
        break
    except ValueError :
        pass

En annan användning av pass är som platshållare för icke implementerade delar av programmet medan du programmerar:

if slut_pengar :
    pass #Här ska något fiffigt göras

Bra kodstil

Alla språk har en praxis för hur man bör skriva koden. Att följa denna hjälper dig själv och andra att läsa din kod. Här följer bra praxis för Python:
  • Använd 4 mellanslag för indrag, inte tab.
  • Använd radbrytning så att raderna inte blir längre än 79 tecken. Detta underlättar läsning och man kan ha flera filer kod bredvid varandra på skärmen.
  • Använd blankrader för att separera kod i stycken. Dela efter sammanhängande innehåll.
  • Initiera variabler och konstanter i början av den kod där de används när så är möjligt.
  • Sätt i första hand kommentarer på en egen rad. Undvik placeringar i slutet av längre kodrader.
  • Använd dokumentationssträngar. Vi återkommer till dem och mer om koddokumentation senare i kursen.
  • Använd mellanslag runt operatorer och efter komma, men inte direkt efter eller före parenteser. Ex: a = f(1, 2) + g(3, 4).
  • Namnge variabler, funktioner mm. så att dess syfte och funktion framgår.
  • Namnge variabler, funktioner och klasser på ett konsistent sätt. Variabler, funktioner och metoder skrivs med sma_bokstaver_och_streck_mellan_orden.  Klasser skrivs MedStorForstaBokstav och ihopskrivna ord.
  • Använd self som namn på det första metodargumentet. Vi återkommer till detta.
  • Använd inte udda tecken i koden. För namn på variabler mm bör du hålla dig till Aa-Zz samt 0-9

Repetitionsuppgifter 1.2


Rep 1.4
Skriv ett logiskt uttryck i Python som returnerar True om talet x är: Större än 100 eller mindre än 50 men inte 20.

Rep 1.5
Skriv ett program som gör en tabell med kolumner för talet, talets kvadrat och kub (upphöjt till tre) för talen 1 till och med 20.

Rep 1.6
Skriv ett program som talar om värdesiffrorna i ett heltal som användaren matar in.
Exempel på utskrift:
Skriv ett heltal 1234
1000-talssiffran är 1
100-talssiffran är  2
10-talssiffran är 3
1-talssiffran 4

Tips: Behandla talet som en sträng

Rep 1.7
Använd interaktiva skalet och testa följande logiska uttryck: not (not a and not b)
Sätt in olika kombinationer av True och False i stället för a respektive b.
Påminner resultaten om något annat logiskt uttryck?

Rep 1.8
Skriv ett program som talar om om ett inmatat tal är ett primtal. Se nedanstående pseudokod för programmeringstips.

input tal
beräkna roten ur talet avrundat till närmaste högre heltal
Sätt primtal=True
för alla tal mellan 2 och roten ur talet :
    om delbart sätt primtal=False och hoppa ur loopen
skriv ut om det är ett primtal eller inte

Rep 1.9
För att simulera radioaktivt sönderfall brukar man kasta ett större antal tärningar i flera omgångar och efter varje kast plocka bort sexorna och räknar hur många tärningar som är kvar. Skriv ett program som gör motsvarande simulering. Se pseudokoden nedan:

sätt antal tärningar till 1000
sätt antal kast till noll
medan det finns tärningar kvar:
    skriv ut antal gjorda kast och antal tärningar som är kvar
    för varje tärning som är kvar:
         slumpa ett heltal 1 till och med 6 och om det blir 6 ta bort en tärning.
    öka antal kast med ett


Rep 1.10
Inom logik används ibland a XOR b. Där XOR är förkortning för exlusive or. Denna operation returnerar sant om antingen a är sant eller  b är sant men inte om båda är sanna. Skriv ett logiskt uttryck i Python som motsvarar XOR.
Tips: Det finns ett fiffigt sätt!

Rep 1.11
Skriv ett program där två "hästar" tävlar mot varandra genom att ta slumpade steg som i uppgift 1.3. Användaren satsar på en av hästarna före start och får sedan reda på om hen vann eller förlorade när "hästarna gått i mål. 

Resultat av Rep 1.9 plottat med GNUplot

onsdag 10 oktober 2012

for-loopen

En annan viktig loop är for-loopen. Den används när man vill upprepa en loop ett bestämt antal gånger eller gå igenom en uppsättning data. Vi tittar på några varianter av denna.

Övning 1.33
Testa denna variant av for-loop:
Tips: Om du vill kan du använda interaktiva skalet och skriva hela loopen på en rad. 
 
for i in range(5) :
    print(i)


Hur det fungerar:
  • Funktionen range(5) skapar en lista med fem heltal [0, 1, 2, 3, 4]. Notera att det första talet är 0 och det sista 4.
  • Variabeln i sätts lika med första värdet i listan, alltså 0.
  • Satsen i loopen utförs.
  • Variabeln i sätts till lika med nästa värde i listan och loopen börjar om tills listan är slut.
 Notera: Precis som i while-loopar kan break användas för att hoppa ur en for-loop.

 Varianter på range()

  • range(a) skapar en lista heltal från och med 0 till och med a-1
  • range(a, b) skapar en lista heltal från och med a till och med b-1
  • range(a, b, c) skapar en lista heltal från och med a till b med steg c
Övning 1.34
Gör om övning 33 men ange:
a) range(-5, 5)
b) range(20,  200, 50)
c) range(10, 0, -1)

Uppgift 1.10
Skriv ett program som talar om vilka tal ett givet heltal är jämnt delbart med.
Tips: Ett tal kan endast vara jämnt delbart med tal mindre än eller lika halva talet. Du behöver bara testa upp till hälften (avrundat uppåt).

Loop i loop

Det går utmärkt att sätta loopar inuti andra loopar. Nedanstående visar hur man kan få fram en multiplikationstabell genom denna metod.

Övning 1.35
Skriv och testa. Tänk efter ordentligt så du säkert förstår vad som händer.

#Multiplikationstabell

for i in range(1,11) : # yttre for-loop för vänstra talet i mult.
    for j in range(1,11) : # inre for-loop för högra talet i mult.
        print("{:0d}*{:0d}={:0d}".format(i,j,i*j), end="\t")
    print() # Ny rad
    print() # Tomrad mellan varje nytt vänstertal

Notera: I vanliga fall blir det automatiskt ny rad efter en print-sats. Detta kan vara opraktiskt när man vill skriva ut listor. Det går att göra så att detta inte sker genom att använda en variant av print där man anger vad som ska vara avslutning av utskriften. Satsen print( "xxx", end="\t") skriver ut xxx men avslutar med tab istället för ny rad. För att få ny rad kan ett tomt print() användas.

Nyckelordet continue

Vi har tidigare lärt oss satsen break som hoppar ur en loop. Ett användbart alternativ till break är continue som gör att programmet går vidare direkt till nästa varv i loopen. Se nedanstående övning:

Övning 1.36
Skriv och testa

for num in range(2, 10):
    if num % 2 == 0:
        print("Fann ett jämnt tal ", num)
        continue
    print("Fann ett ojämnt tal ", num)

Notera: continue går även att använda i while-loopar


Inlämningsuppgift 1.4
Ändra uppgift 1.10 så att den skriver ut delbarheten för alla talen 1 till och med 20.

Forsatsen med texter

I Python och flera andra språk kan for-satser användas för att iterera över inte bara en lista med tal utan också andra följder. Till exempel kan for användas för att stega sig genom en sträng. Ex:

for s in "Python" : print(s)

Övning 1.37
Skriv ett program med for-sats som sätter punkt efter varje bokstav i en inmatad sträng och skriver ut resultatet. Ex: "SWAT" blir "S.W.A.T."

Itereringen över en sträng går alltid från första till sista tecknet. Om du vill iterera i en annan ordning, över delar av strängen eller behöver få reda på index för tecknen så får du skapa en range-funktion enligt nedastående övning.

Övning 1.38
Följande skriver ut en inmatad text baklänges

text = input("Skriv en text: ")
for i in range(len(text), 0, -1) :
    print(text[i-1], end="")


Notera:
Stegningen -1 i range-funktionen för att gå från högre till lägre index.
Användningen av i-1 då range går från och med len(text) till 0 medan index går från och med 0 till och med len(text)-1.
Tillägget end="" i print-satsen för att undvika ny rad mellan tecknen.

tisdag 2 oktober 2012

Backslash på Mac i IDLE

Se instruktion av Malin Christersson:

Hur man skriver backslash "\" i IDLE med ett icke-amerikanskt Mac-tangentbord

Den vanliga knapp-kombinationen Alt+Shift/ resulterar troligen inte i någonting om man skriver den i IDLE på ett icke-amerikanskt Mac-tangentbord. För att få backslash att fungera måste man göra följande:
Välj IDLE->Preferences... och markera Keys-fliken. Gå ner till "expand-word"-raden och klicka på "Get New Keys for Selection"-knappen.
image
Välj några nya tangenttryckningar för "expand-word" och klicka Ok.
image
Skriv in ett namn för en ny "Custom Key Set".
image

Strängar

Variabeltypen string används för att lagra och manipulera text och textliknande teckenföljder.

En sträng anges omgiven av "-tecken eller '-tecken:
a="Hej!"
b='Hej!'

Speciella tecken

Tecknet \ ("backslash") är en så kallad escape character som används för att skriva tecken som annars skulle vålla problem då de krockar med hur koden normalt läses av programmet ex:
\"     ett "-tecken inuti en sträng omgiven av "-tecken
\'      ett '-tecken inuti en sträng omgiven av '-tecken
\n    ny rad
\t     tabulering

Hur skrivs då \  i en sträng? Jo som \\

Övning 1.23
Använd det interaktiva skalet och testa följande:
a) print("C:\\kalle\\Python")
b) print("Lars kallas \"Lasse\"")
c) print("Kalle\t200\nLisa\t1200")

Långa rader i koden

Det är  rekommenderat att ha radlängder på max 79 tecken i koden för att förenkla för den som ska läsa och klara alla editorer. Därför kan det finnas behov av att dela upp en sats eller en sträng i flera rader.
  • För uttryck som inte är strängar och som omges av (), [] eller {} görs radbyte genom ENTER
  • För att byta rad i strängar eller uttryck utan omgivande parenteser används \
Övning 1.24
Testa exemplet:

lang_text="Detta är en låg text så jag byter \
rad i koden trots att det är en rad utskriven."
print(lang_text)
print()
print( "Och nu blev den ännu längre: " +
       lang_text + " Så den inte får plats på en rad")

Manipulera strängar

Strängar (eng. strings) kan ses som en rad tecken efter varandra. I Python är tecknen numrerade från noll och uppåt till sista tecknet. Positionen för ett tecken kallas index. Sista tecknet i en sträng har index som är 1 mindre än strängens längd.

Funktionen len(s) ger längden på en sträng.

 För att komma åt delar av en sträng används:
Uttryck Beskrivning
s[i] Returnerar tecknet med index i
s[i:j] Returnerar strängen från och med i till (men ej lika med!) j
s[i:] Returnerar strängen från och med i
s[:i] Returnerar strängen till i
s[-j] Motsvarar s[len(s)-j]. Alltså tecknet j från slutet
s[-j:] Returnerar resten av strängen från och med tecknet j från slutet
s[:-j] Returnerar strängen fram till tecknet j från slutet


Obs! Att använda negativa index som i de tre sista varianterna är en indexering som många språk saknar. Det finns tex. varken i C, C++ eller Java.

Övning 1.25
Skriv och testa nedanstående program.

text="ABCDEFGHIJK"
print(text+"\tLängd="+str(len(text)))
print(text[2])
print(text[len(text)-1])
print(text[2:6])
print(text[2:])
print(text[:6])
print(text[-2])
print(text[-2:])
print(text[:-6])

Concatenering, att lägga ihop strängar

Att lägga strängar efter varandra till en ny längre sträng kallas concatenring (eng. concatenate) och görs med + så som du sett. Det går också att skapa en upprepad sträng med *-tecken.

Övning 1.26
Använd interaktiva skalet och testa följande:
a) print("husvagn"[:3]+"lastbåt"[-3:])
b) print("Ha"*5)

Du kan inte ändra i en sträng

Det går inte att ändra i en sträng, lägga till eller ta bort tecken efter att den skapats. Utan du måste skapa en ny sträng för detta  och tilldela den till den ursprungliga. Ex:

Lägga till sträng t först till s
s=t+s


Lägga till sträng t sist till s
s=s+t

Lägga till t vid index j
s=s[:j]+t+ s[j:]

Ta bort en del av s från och med index i till j
s=s[:i]+s[j:]

Uppgift 8
Skriv ett program som testar ovanstående strängmanipulationer. Välj själv lämpliga strängar för t och s.

Jämförelse av strängar och några bra strängmetoder

Att jämföra strängar i Python påminner om jämförelser mellan tal. Här följer de mest användbara jämförelserna:
Uttryck Beskrivning
s == t Sant om s är exakt lika som t
s != t Sant om något skiljer mellan s och t
s in t Sant om strängen s återfinns någonstans i t
s not in t Sant om strängen s inte återfinns någonstans i t


Notera: Det är skillnad på stora och små bokstäver när jämförelser sker.

Strängar är lite av både fågel och fisk i Python, och flera andra språk. De fungerar som vanliga variabler men de är också objekt. (Vi kommer att tala mycket mer om objekt senare i kursen.)

Så som objekt har strängar metoder som kan användas för att utföra olika åtgärder. För att använda en metod skrivs strängen eller strängvariabeln följt av . och sedan metoden. Ex:
"Hej".lower()
s.lower()
Den övre raden ändrar strängen "Hej" till "hej" den nedre gör motsvarande för innehållet i strängen s.

Följande strängmetoder är ofta användbara:
metod Beskrivning
lower() Returnerar en sträng där alla bokstäver ändrats till gemener
upper() Returnerar en sträng där alla bokstäver ändrats till versaler
find(t)     Returnerar första index då strängen t återfinns. Om ingen hittas returneras -1.
count(t)     Returnera hur många gånger strängen t återfinns.
replace(s, t) Returnerar en sträng där alla förekomster av av strängen s bytts ut mot strängen t
strip() Returnerar en sträng där eventuella mellanslag först eller sist är borttagna
zfill(x); Returnerar en sträng där nollor fyller ut  till vänster om texten tills längden är x. Ex. "23".zfill(4) ger "0023"
format(a, ka) Strängformatering. a och ka är argument som används vid formateringen.

split(t)
Skapar en lista av strängar från den ursprungliga strängen. Uppdelade där strängen t förkommer. Mer om detta senare i kursen.


Överkurs: Detta är endast ett litet urval metoder och varianter på metoder. Läs mer här.

Övning 1.27
Testa följande program

s="IKEA"
t=s.lower()
print("s är: "+ s+"\nt är: "+t)

Notera att s behåller sitt värde "IKEA" .
Ändra programmet så att det byter "IKEA" i s till "ikea" istället för att skapa den nya variabeln t.


Övning 1.28
Ett program som summerar inskrivna tal och avslutas när man skriver n eller N. Skriv och testa.

sum=0

while True :
        try: 
            s=input("Skriv in ett tal. (n för att sluta) ")
            if s == "n" or s == "N": break
            sum=sum+float(s)
        except ValueError:
            print("Felaktig inmatning. Försök igen") 

print("Summan blir:" + str(sum))

Övning 1.29
Skriv ett program som returnerar första ordet ur en inskriven text.

Övning 1.30
Skriv ett program som skriver ut en inmatad sträng enligt nedanstående exempel:
Inmatad text: Hej alla glada
Utskrift:
H
He
Hej
Hej 
Hej a
... osv ...
Hej alla glad
Hej alla glada

Notera: Kontrollera så att programmet klarar strängar med ett tecken och att du inte får tomrad först i utskriften.

Övning 1.31
Skriv ett program som byter ut alla förekomster av hon och han till hen i en inmatad text.

Uppgift 1.8
Skriv ett program som skriver ut varje ord i en inmatad sträng på en egen rad.

Strängformatering

Det finns en mängd möjliga formateringar med hjälp av format-metoden. Vi ska titta på några. Syntaxen för strängformatering visas i följande exempel:

"Här är ett tal {0:0.2f} och här är ett tal {1:0.5e}".format(3454564, 3555564)

Resultatet blir (vilket du kan kontrollera med interaktiva skalet):

Här är ett tal 3454564.00 och här är ett tal 3.55556e+06

Klamrarna {} är platshållare som fylls i med innehållet från parentesen efter format.
Texten i klamrarna är en kod som talar om hur formateringen ska ske. Se nedanstående bild som visar vad de olika delarna betyder:

Notera: koden ovan är inte fullständig. Det finns ytterligare positioner som kan användas. Den täcker dock det viktigaste.
  • Index i formatlistan: Anger vilken position i parentesen, räknat från noll, som innehållet ska hämtas ur. Kan utelämnas. Om det utelämnas hämtas innehållet i ordningen de står i format-parentesen så att första klamern fylls med första innehållet, andra med andra osv.
  • Minimal längd: Anger det minsta antal tecken som innehållet ska ta upp. Om det blir tecken över fylls de med mellanslag. Kan utelämnas.
  • Precision: Anger antal decimaler eller värdesiffror för tal. Kan utelämnas.
  • Formateringstyp: Ytterligare information om formateringen för tal. Se nedanstående tabell för exempel.
Tecken Beskrivning
b För heltal: Binär form
d Heltal: Basen 10
f Flyttal: Bestämt antal decimaler och utan tiopotens
g Flyttal: Automatiskt byte till grundpotes för stora  eller små tal. När g används anger siffran bakom punkten antalet värdesiffror.
e Flyttal: Grundpotensform
x För heltal: Hexadecimal form


Övning 1.32
Använd interaktiva skalet och gör följande:
a) Skriv och testa: "{:6.2f}".format(3.1415)
b) Skriv och testa: "{:10}{:6d}".format("Invånare", 123)
c) Ta reda på vad 2000 blir hexadecimalt respektive binärt.
d) Skriv och testa: "{1}={0:0.3g}".format(12.234, "a")

Uppgift 1.9
Skriv ut ett "kvitto" enligt nedanstående. Decimalpunkterna ska hamna under varandra.

Godis      21.40
Kött      121.30
 ===============
Summa     142.70