P1 – Kapitel 2

Översättning

Vissa programmeringstermer har etablerade svenska termer. Variable på engelska är variabel på svenska. När självklara översättningar saknas väljer jag att översätta termerna med termer som liknar de engelska eller sådana saknas behåller det engelska termen.

Syntaxfel

Alla gör vi fel när vi programmerar. Ett sätt att minska risken för fel eller att lättare hitta fel är att göra medvetet fel i koden du skriver och sedan kontrollera hur Python reagerar.

Skriv prin('Hello') och kör programmet. Jag får detta fel:
Utskrift

Traceback (most recent call last):
File “/Users/paul/xxxxxxx/python/Programmering1/hej_varlden.py”, line 1, in <module>
prin(‘Hello’)
NameError: name ‘prin’ is not defined

Man får reda på vilken rad felet finns på. I detta exemplet stämmer det men vid andra tillfällen kan felet vara på en annan rad. Tänk på att Python tolkar koden som en digital maskin och inte som en människa och reagerar på fel som det är programmerad att göra. Felet jag gjorde kallas ett syntaxfel. Det motsvarar ungefär att man stavar fel när man skriver texter. Tänk på att Python eller PyCharm stavningskontrollerar inte din stavning av vanlig text.

Variabler

En variabel kan liknas vid en låda som Python kan spara värden i.

Skriv in koden nedan:

#Raden nedan skriver ut en mening
meddelande = "Hej. Detta är en mening!"
print(meddelande)

Du kunde skrivit print(“Hej. Detta är en mening!”) istället. Skillnaden är att vi skapade en variabel som lagrade ett värde nämligen texten “Hej. Detta är en mening!”.

Fundera på vad som borde bli utskriften när du skriver in dessa raderna
meddelande = "Hej. Detta är en mening!"
print(meddelande)

meddelande = "Detta är en annan mening!"
print(meddelande)
Utskrift

Hej. Detta är en mening!
Detta är en annan mening!
Variabeln har först värdet “Hej. Detta är en mening!” sedan byts innehållet i variabeln till “Detta är en annan mening!”
Övningar

Övning 2.1

Gör ett program som sparar en textsträng i en variabel

Syntax Highlighting

För att lättare skilja olika delar av koden åt, färgas olika delar med olika färger. Det underlättar när man kodar eller ska leta efter fel.

Att välja variabelnamn

Använd bara variabelnamn som innehåller bokstäverna a-z och siffrorna 0-9 och understreck _. Du kan börja ett variabelnamn med en bokstav eller understreck men inte med en siffra. Använd inte mellanrum i variabelnamn. Använd inte ord som redan är upptagna av Python som print.En annan sak du bör se upp med är siffran 1, bokstäverna lilla L och stora I. De är lätta att förväxla. Samma sak gäller stora O och siffran 0. Använd enbart små bokstäver. Tänk på att Python tolkar SPAM, sPaM, Spam och spam som fyra olika variabler och det är olämpligt att använda de tre första.
Om du ska skriva kod som kommer att vända sig till en större public ska du använda engelska i variabelnamnen. Op dessa sidor använder jag både och eftersom jag siktar på förståelse i första hand och alla kan inte engelska lika bra. Men jag rekommenderar att du plugga engelska för ska du bli en duktig programmerare måste du både läsa mycket dokumentation och skriva koden på engelska.
en_variabel = "Detta är en text"  #OK

variabel_1 = "Detta är en text" #OK

1_variabel = "Detta är en text" #FEL

en variabel = "Detta är en text" #FEL

print = "Detta är en text" #FEL

En_variabel = "Detta är en text" #Olämpligt att använda stora bokstäver i variabelnamn

#Använd variabelnamn som är så korta som möjligt,
#men beskriver vad som kan lagras i variabeln. 

fornamn_efternamn = "Pelle Person" #Rätt

en_persons_fornamn_ och_efternamn = "Pelle Person" #För långt

namn = "Pelle Person" #Inte tillräckligt förklarande

n = "Pelle Person" #Förklarar inte alls

Tal och andra datatyper

I många andra programmeringsspråk måste programmeraren ange vilken typ av variabel som används: heltal, sträng eller decimaltal. Python hanterar detta själv. Decimaltal brukar kallas för flyttal för man kan skriva samma tal på olika sätt 1.23 eller 12.3 * 10-1 . Eftersom datorer egentligen använder binära tal när det utför själva beräkningen kan det ibland uppstå ett avrundningsfel på sista decimalen. Pröva att skriva in 0.1 + 0.2 i IDLE. Jag får 0.30000000000000004. Detta är inget att bekymra sig om i denna kurs. Anledningen jag tar upp det är att man kan få felet och undra om man gjort något fel. Men det är alltså hur datorer översätter till decimalsystemet som orsakar felet. Här kan du läsa mer om felet.
För er som vill veta hur man kan bestämma antal decimaler som ska synas så kan man skriva så här. 2an i 0:.2f anger hur många decimaler som ska synas. Pröva att skriva talet 12.553721 och sedan talet 12.543721. I det första fallet blir det 12.55 och i det andra fallet blir det 12.54. Pröva olika antal decimaler
print ("{0:.2f}".format(0.1 + 0.2))
Anledningen till att jag skrev punkt istället för komma är att i de flesta språk använder man amerikans standard. Ibland
Variabler kan vara andra typer av textsträngar (på engelska kallas det för ‘strings’). För att lagra ett tal skriver man:
heltal = 4

På liknande sätt skriver man decimaltal så här:

decimaltal = 5.34

Tänk på att använda punkt (.) istället för decimalkomma (,).

För att summera ett heltal och ett decimaltal och lägga summan i en ny varabel skriver man:

summa = heltal + decimaltal

Det här sättet att skriva kod skulle ge fel i många andra programmeringsspråk men i Python går det bra. I andra programmeringsspråk kan man inte summera ett heltal och ett decimaltal direkt. När du sätter hashtecken (#) framför kommer Python att ignorera koden när det tolkar.

Skriv i koden nedan och kalla det tal.py

#Variabel som lagrar ett heltal
heltal = 4
print(heltal)

#Variabel som lagrar ett decimaltal
decimaltal = 5.34
print(decimaltal)

summa = heltal + decimaltal
print(summa)

4
5.34
9.34

Datatyp  Datatyp (eng)  Exempel  Funktioner vid omvandling
int (Heltal)  Integers  …, -2, -1, 0, 1, 2, 3…  int()
float (Flyttal)  Floating-point numbers  …, -1.23, -0.234, 0.3, 2,42 …  float()
string  (Strängar)  Strings  ‘a’, ‘abc, ‘abc 123’ ‘Hej!’  str()

Ibland vill man kunna omvandla från en datatyp till en annan. Om du skriver någon av omvandlingsfunktionerna och lagrar det i en annan variabel blir den nya variabeln av en annan datayp. Pröva själv i IDLE

>>> a = 5
>>> b = float(a)
>>> b
5.0
>>> c = str(a)
>>> c
‘5’
>>>

 

Operatorer

5 + 4 kallas för uttryck (eng. expression). Ett uttryck består av värden (5 och 4) (eng. value) och operator (+)

 Operator  Operation  Exempel  Blir  Prioritet Förkortat skrivsätt | icke förkortat
 **  Exponent  2 ** 4  16  1  a ** = 2 | a = a**2
 %  Modulus / Rest 12 % 5  2  2  a %= 2  | a = a%2
 //  Heltals division  12 // 5  2  2  a //= 2  | a = a**2
 /  Division  12 / 5  2.4  2  a /= 2  | a = a/2
 *  Multiplikation   4 * 3  12  2  a *= 2  | a = a*2
 –  Subtraktion  5 – 3  2  3  a -= 2  | a = a-2
 +  Addition  3 + 3  6  3  a += 2   | a = a+2

 

Precis som i matematik så utförs olika operatorer i olika prioritet och från vänster till höger. Öppna IDLE under Python. I den kan du testa mindre kodstycken utan att lägga dem i en py-fil.
Prova att skriva in:
>>> 3 + 2 * 5
13
>>> (3 + 2) * 5
25
>>> 21/5
4.2
>>> 21//5
4
>>> 21%5
1

Skriv in koden nedan i en ny fil och kalla den operatorer.py. Försök att tänka ut vad svaret blir innan du kör programmet. Gör gärna medvetna fel så du kan förstår hur felmeddelandet blir.

#Exponent
tal = 2 ** 4
print('Basen 2 och exponenten 4 blir',tal)

#Modulus / Rest. Tänk 12/5 = två hela och två femtedelar.
# Två är vad som blir i täljaren när man
# gör om bråkform till blandad form
tal = 12 % 5
print('12 dividerat på 5 ger resten ',tal))

#Heltals division. Hur många hela gånger går det?
tal = 12 // 5
print('12 dividerat på 5. Det går',tal,'hela gånger')

#Ett exempel på användningsområde är när man ska omvandla från
#sekunder till minuter och sekunder
tid = 80
sekunder = tid % 60
minuter = tid // 60
print('tid:',tid,'s. Det blir',minuter,' min och',sekunder,'s')

#Division. Precis som vanlig division blir det ett decimaltal
tal = 12 / 5
print('12 dividerat på 5 blir',tal)

#Multiplikation
tal = 4 * 3
print('4 multiplicerat med 3 blir',tal)

#Subtraktion
tal = 5 - 3
print('5 subtraherat med 3 blir',tal)

#Addition
tal = 3 + 3
print('3 adderat med 3 blir ',tal)
Utskrift

Basen 2 och exponenten 4 blir 16
12 dividerat på 5 ger resten 2
12 dividerat på 5. Det går 2 hela gånger
tid: 80s. Det blir 1 min och 20 s
12 dividerat på 5 blir 2.4
4 multiplicerat med 3 blir 12
5 subtraherat med 3 blir 2
3 adderat med 3 blir 6
Övningar

Se upp när du ska utföra division och multiplikation tillsammans. Den första uträkningen är 15/15. Den andra är 5*5.

>>> 15/(3*5)
1.0
>>> 15/3*5
25.0
>>>

 

Förkortat skrivsätt

För att tilldela 2 till en befintlig variabel skriver man a = a + 2. Men man kan också skriva a += 2. Se tabellen för hur man fö
>>> a = 3
>>> a += 2
>>> a
5

Övning 2.2

Gör ett program som omvandlar 329 sekunder till minuter och sekunder

Övning 2.3

Gör ett program som omvandlar 157 minuter till timmar och minuter

När man skriver kod = annan_kod kallas det tilldelning (eng. assignment). Tänk så här: Det som står till höger har ett värde som ska tilldelas (kopieras till) variabeln till vänster om likhetstecknet.

Skapa en ny fil och kalla den tilldelning.py. Skriv in koden nedan. Ändra gärna talen och försök tänka ut hur svaret ska bli. För att skriva ut värdet på en variabel i en sträng kan man antingen skriva print(‘talA är ‘ + str(talA) + ‘ och talB är ‘+str(talB)) eller print(‘talA är ‘, talA, ‘ och talB är ‘,talB). Fördelen med den sista är att man behöver inte omvandla variabeln till en sträng och man slipper skriva +-tecken och lämna mellanrum.

talA = 3
talB = 4
print('talA är', talA, 'och talB är',talB)

talA = talB  #nu är talA: 4 och talB är fortfarande 4
print('talA är',talA,' och talB är',talB)

talA = 6 + talB #nu är talA: 10 (6 + 4)
print('talA är',talA,'och talB är',talB)

talA = talA + 2 #nu är A: 12 (10+2)
print('talA är',talA,'och talB är',talB)

Utskrift

talA är 3 och talB är 4
talA är 4 och talB är 4
talA är 10 och talB är 4
talA är 12 och talB är 4

 

Kommentarer

För att underlätta för dig själv och andra som läser din kod bör du skriva kommentarer som förklarar koden.

Detta kallas att kommentera koden. Man kommenterar koden för att ge information till sig själv eller andra utvecklare som arbetar med koden. Man kan också använda kommentarer för att kommentera bort kod tillfälligt vid felsökning. Exakt hur mycket man ska kommentera och hur ska man kommentera kan man läsa om i  Pythons Style Guide for Python Code. Sammanfattningsvis kan man säga:
  • Skriv inte kommentarer som motsäger andra kommentarer.
  • Kom ihåg att uppdatera kommentarerna när du ändrar i koden
  • Skriv kommentarer med hela meningar.
  • Om du kommer från icke engelsktalande länder skriv ändå kommentarer på engelska om du inte är helt säker på att endast de som kan läsa exempelvis svenska kommer att läsa kommentarerna
Om du vill kommentera en rad, sätt # framför raden. Då kommer Python ignorera den raden när den översätter koden till maskinkod.
#Raden nedan skriver ut ordet Hello
print('Hello')
För att kommentera flera rader bör man sätta tre (') eller tre (")
'''
En rad
En rad till
Ytterligare en rad
'''

Strängar

I Python kan man man multiplicera en sträng och då få samma sträng det antalet man multiplicerat med
>>> ‘Python’*5
‘PythonPythonPythonPythonPython’

Escapesekvenser

Ibland behöver man göra indrag i texten som ska synas för användaren. Då skriven man ett bakstreck och t som i tabb (\t). Om det behövs en ny rad skrivs det (\n)

Skriv in koden nedan i ett program du kallar tabb.py

#\t används om mann vill göra indrag i utskrifter
spam = "Python"
print(spam)
print("\t"+spam)


#\" om du vill skriva ut dubbelt eller enkelt citattecekn i en sträng kan du göra så här
print("\"Jag undrar\", muttrade Bengt, \"om jag skall byta olja på bilen.\"")
#Dock är det lättare att sätta enkelt citattecken ytterst istället
print('"Jag undrar", muttrade Bengt, "om jag skall byta olja på bilen."')

#På liknade sätt kan man sätta dubbla citattecken när man har enkelt citattecken i strängen
print('I don\'t understand')
print("I don't understand")

 

Utskrift

Python
Python
Python
Python
Python

Det finns fler escapesekvenser. Några vanliga finns i tabellen nedan. En utförlig lista finns här.

EscapesekvensFörklaring
\ttab, flyttar fram 8 steg på en rad
\nradbrytning
\\utskrift av ett backslash
\'utskrift av enkelt citattecken
\"utskrift av dubbelt citattecken

 

Mata in data till ett program

Nu ska vi skriva ett lite längre program

Spara filen nedan som om_mig.py

'''
Detta Pythonprogram frågar efter användarens för- och efternamn
Sedan räknar det ut när användaren är född och hur många bokstäver förnamnet
'''

print('Hej')
print('Vad är ditt förnamn')
#Med funktionen input() väntar Python på att användaren ska mata in något från tangetbordet
fornamn = input()

print('Vad är ditt efternamn')
efternamn = input()

#När man lägger till title() till en sträng görs en kopia av strängen och kopian skrivs ut med fösta bokstaven stor.
#Dock ändras inte ursprungsvariablen
print('Hej! ' + fornamn.title() + ' ' + efternamn.title())

# len(fornamn) kollar hur många tecken fornamn har och ger ett tal
print('Ditt förnamn: ',fornamn.title(),'har',len(fornamn),'bokstäver')
Utskrift

Hej
Vad är ditt förnamn
Adam
Vad är ditt efternamn
Bertilsson
Hej! Adam Bertilsson
Ditt förnamn: Adam har 4 bokstäver

Koden innehåller en del nytt. Du har redan använt print(). När man skriver en kod som har () efter sig använder man sig av en funktion.
En funktion är en färdig kod som kan finnas inbyggt i Python eller så kan du själv skapa en funktion som du använder dig av. Mer om detta längre fram.

Funktionen input() väntar på att användaren ska mata in något från tangetbordet och trycka på Enter. Oftast vill man lagra det användaren matat in i en variabel. I exemplet ovan i variablen fornamn och efternamn.

Läs i kodkommentaren hur title kan användas. Funktionen len(argument) behöver ett argument som skickas med till funktionen för att kunna utföras. Läs mer i den kommenterade koden. Innan du använder en ny funktion bör du söka upp den i Pythons dokumentation. Du hittar dokumentationen om len(s) här.

Övningar

Övning 2.4

Gör ett program där du ska mata in tre favoritfilmer och deras längd i minuter.  Du ska summera filmernas längder och omvandla summan från minuter till hela timmar och minuter. Så här kan utskriften bli:

Utskrift

Mata in film 1 Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb
Mata in längden på film 1 i min: 95
———————–
Mata in film 2 Star Wars: Episode IV – A New Hope
Mata in längden på film 2 i min: 121
———————–
Mata in film 3 Frequently Asked Questions About Time Travel
Mata in längden på film 3 i min: 83
———————–
Dr. Strangelove Or: How I Learned To Stop Worrying And Love The Bomb: 95
Star Wars: Episode Iv – A New Hope: 121
Frequently Asked Questions About Time Travel: 83
———————–
Totallängd: 4 tim och 59 min

Programmering 1 – Kapitel 2

Lämna en kommentar