Göm menyn

Frequently Asked Questions

Personer med väldigt olika kunskapsbakgrund läser denna kursen och stöter därför på olika problem. Vad som kommer är ett antal frågor med svar som förhoppningsvis kan hjälpa den som har svårt att förstå en del av kursen.

Programmering

Vad händer när jag kör ett program?

Enkelt formulerat kan man se Python som någon som läser in rad för rad i programmet. Allt den stöter på slår den upp i tabeller för att veta vad den ska göra. Är det t.ex. en funktionsdefinition så lagrar den namnet på funktionen som en variabel samt en minnesadress för vart funktionen finns lagrad. Om det senare finns ett anrop till en funktion så kommer Python hoppa till den lagrade minnesadressen och fortsätta där. När funktionen är klar återgår Python till platsen där funktionsanropet skedde.

Detta upprepas tills dess att hela filen sökts igenom.

Är det något som Python inte förstår, t.ex. ett felaktigt funktionsnamn, så kastas ett fel och inläsningen avbryts.

Hur får jag bäst hjälp om jag sitter fast?

Prata med labbassistenter, seminarieledare, labbpartner, klasskamrater eller sök på internet om du sitter fast vid ett problem. Ibland kan det vara svårt att veta vilken fråga man ska ställa, då är det bra att prata med någon erfaren som du kan beskriva ditt problem för.

Labbassistenter och seminarieledare är bara tillgängliga under kursens gång. När kursen har tagit slut är också våra handledningsresurser slut, och vi har därför inte möjlighet att svara på allmänna labbfrågor under januari-augusti.

Vilka variabelnamn bör jag undvika?

Utöver de tips som ges i programmeringspraxis bör ord som redan används av python undvikas som variabelnamn.

Namn på datatyper och funktioner bör aldrig användas som variabelnamn, dels är det otydligt men också så skriver du över variabelnamnet.

>>> str(5)
'5'
>>> str = lambda x: x + 1
>>> str(5)
6

Variabelnamn som innehåller vilken datatyp som variabeln har (tex 'my_string') bör undvikas.

Variabelnamn med en bokstav bör användas sparsamt men kan användas för att visa att variabeln kan ha godtyckligt värde. En bokstav kan användas som förkortning men bör inte konfliktera med följande normer: 'i', 'j' är index (positiva heltal) 'x', 'y', 'z' är godtyckliga siffror (ofta koordinater) 'f', 'g' är anonyma funktioner

Måste jag ha kommentarer?

Är inte koden självförklarande ska den förklaras med kommentarer. Detta är för att du ska vänja dig vid att skriva kommentarer och förstå när de behövs men också för att du och labbassistenter ska ha lättare att förstå koden.

Varför måste vi programmera på engelska?

Engelska är standarden i stora delar av världen, dessutom är Python på engelska. Denna kurs var länge på svenska men bytte till engelska för att bättre förbereda studenter på arbetslivet.

Varför påstår Python att en funktion/variabel är odefinierad?

Kontrollera först stavning, kom ihåg att Python är skiftlägeskänsligt (case sensitive).

Kontrollera att platsen då identifieraren definieras alltid körs innan identifieraren används.

Följande kod kommer ge ett fel (UnboundLocalError) då a < 0

def f(a):
    if a >= 0:
        b = 5
    print(b)

Försöker du komma åt en global variabel du senare tilldelar ett värde? Globala variabler är 'read only' om inte 'global'-nyckelordet använts. Tilldelas ett värde till en variabel och den inte har blivit explicit angiven som global så antas den vara lokal.

Följande kod ger inget fel

a = 5

def f():
    print(a)

f()

Följande kod ger UnboundLocalError

a = 5

def f():
    print(a)
    a = 6

f()

Följande kod ger inget fel

a = 5

def f():
    global a
    print(a)
    a = 6

f()

Hur testar jag bäst min kod?

Det viktigaste med tester är att de är täckande och att de kan köras snabbt. De ska inte bara vara snabba för datorn, de ska också vara enkla för dig att köra. Helst ska det bara kräva några knapptryck för att köra testerna.

Det viktiga är att hitta ett sätt att köra testerna på som passar dig. En dedikerad terminal där du skrivit in körning av filen som du sedan kan upprepa med piltangenter funkar för många.

Ska flera filer testas kan ett bash-skript hjälpa till att snabba på processen.

Använder du Vim kan kommandot ':!python3 %' användas för att köra den fil som du har uppe.

För instruktioner i hur du skriver bra tester i Python, se testning.

Varför körs inte en if/for-sats?

Kontrollera det uttryck som satsen använder. Logiska fel är vanliga, även bland erfarna programmerare. Är det ett avancerat booleskt uttryck bör det struktureras upp med parenteser, dels för att garantera att operationerna sker i rätt ordning men också för att det lättare ska gå att läsa koden.

Kom ihåg att funktioner som inte returnerar något kommer tolkas som falska (då de returnerar None)

Följande kod kommer endast printa "hej"

if print("hej"):
    print("då")

För att en for-sats ska köras krävs det att minst ett element finns att iterera över.

Varför körs inte min kod?

Om inget körs bör du kontrollera att någon funktion faktiskt anropas. Kod som endast innehåller funktionsdefinitioner gör inget förutom lägga till funktionerna i respektive identifierare.

Följande kod gör inget förrän någon av funktionerna anropas

def f():
    print("Hello world")

def g():
    f()

Är det en del av koden som körs bör du kontrollera if-satser.

Kom ihåg att Python använder lat evaluering vid booleska uttryck. På grund av detta bör booleska uttryck endast innehålla uttryck och inte satser.

Följande kod printar "Hello" då första uttrycket tolkas som falskt och and-operatorn då returnerar False utan att köra det andra uttrycket

print("Hello", end=" ") and print("world")

Följande kod printar "Hello world

print("Hello", end=" ") or print("world")

Hur kan jag undvika att få ont i händerna när jag programmerar?

Programmering är krävande för armar och händer och är man ovan kan man bli sliten. Försök att minimera användandet av mus och piltangenter för att minimera onödiga rörelser.

Se till att du sitter ordentligt. Även om det är skönt att programmera i soffan är det inte bra för kroppen. Försök att slappna av i armar och händer.

Emacs är inte helt ergonomiskt, se frågan Finns det några alternativ till emacs?

QWERTY är inte helt ergonomiskt utan kräver mycket onödig rörelse i fingrarna. Det finns alternativa tangentbordslayouter som Colemak och Dvorak som är skonsammare för armar och händer.

Vad är skillnaden mellan Python 2 och Python 3?

Python 3 designades för att fixa grundläggande brister i designen av Python 2, bland annat i hur strängar hanteras, vilket gör att det inte finns någon bakåtkompetabilitet mellan versionerna.

Python 2 används fortfarande då många program bara har stöd för Python 2, även om utvecklingen av Python 2 avslutats.

Några skillnader mellan versionerna är:

Python 2 input Python 2 output Python 3 input Python 3 output
print "hello" print("hello")
5 / 2 2 5 / 2 2.5
round(3.3) 3.0 round(3.3) 3

Emacs

Måste jag använda emacs?

Då det mesta av en programmerares arbete sker i en textredigerare krävs kraftfulla verktyg och dessa tar tid att lära sig. För ett ergonomiskt och snabbt arbetsflöde bör mus och piltangenter ej användas. Det finns verktyg som fungerar väldigt likt 'vanliga' textredigerare där mus och piltangenter används men dessa är generellt långsammare att använda och tyngre för datorn.

För de som inte vill använda emacs finns en alternativ editor som heter vim, se frågan Finns det några alternativ till emacs? Att använda vim eller emacs är inte ett kurskrav men att bemästra en av dessa två editors under studietiden är något vi skarpt rekommenderar.

Se även avsnittet om att byta till en alternativ texteditor

Finns det några alternativ till emacs?

Ja, ett alternativ som finns tillgängligt på samtliga UNIX-system och på tenta-systemet är editorn Vim. Vim och emacs är två stora och väl etablerade textredigerare men som fungerar väldigt olika.

Emacs använder långa sekvenser av knappkombinationer för att komma åt komplicerade instruktioner. Vim använder istället små modulära instruktioner som kan bindas ihop till nya kraftfulla instruktioner. Vim anses av många vara svårare att komma igång med men lättare att bemästra.

Vim använder sig av två lägen, insert-mode och command-mode. I command-mode gör tangenterna instruktioner istället för att skriva text, detta gör att du lätt kommer åt dem. Från command-mode finns flera sätt att gå till insert mode där det går att skriva tills du trycker (Esc) eller (ctrl+c) för att gå till command-mode. Den inskrivning som gjorts räknas som en handling och kan tas bort med en undo (u) eller uprepas (.). Skriv :w i command-mode för att spara, :q för att sluta och :wq för att spara och sluta.

Be gärna om hjälp från labbassistenter om du skulle vara intresserad av att byta till Vim.

Varför använder inte emacs Ctrl+c och Ctrl+v som en 'vanlig' editor?

Emacs är en gammal editor designad när inga direkta standarder för kopiering fanns. Det finns sätt att använda Ctrl+x, Ctrl+c och Ctrl+v i emacs men detta skapar konflikter med andra viktiga kommandon.

Varför blir jag inte bättre på emacs?

Att bemästra emacs tar tid och ansträngning. Vill du lära dig emacs så bör du försöka använda mus och piltangenter så lite som möjligt. Är du osäker på hur något görs så sök på internet. Skriv gärna upp de kommandon du ofta använder så att du lätt kan kolla upp något du glömt.

Varför har emacs så svåra knappkombinationer?

Emacs designades för ett tangentbord där ctrl och alt hade bytta platser med varandra från vart de är placerade på dagens tangentbord. Detta är anledningen till att ctrl används så mycket även om den idag är svår att komma åt. Dessutom hade detta tangentbord fler modifierare (inte bara ctrl och alt).

Många av de kommandon som är lättare att komma åt är upptagna av mindre använda kommandon, eftersom de mindre använda kommandona skapades tidigare.

Dålig ergonomi och svårmemorerade sekvenser är emacs stora svaghet.

Space cadet-tangentbord

Byta till en alternativ editor

Många studenter tycker att emacs är jobbigt och byter till någon annan editor under kursens gång. Det är ok att göra men det kan leda till svårigheter senare i kursen eller utbildningen. Varje år är det studenter som inte vet hur man kör programmen på tentan.

IDE:er (pycharm, eclipse och liknande)

Många studenter som programmerat tidigare har använt en IDE och vill gärna göra det under kursen. IDEer har många fördelar som gör livet som programmerare mycket enklare, autocomplete, jump to definition, automatisk refaktorering etc. Problemet med att alltid programmera med ett IDE är att man vänjer sig vid att ha alla de funktionerna och "glömmer bort" hur man programmerar utan dem. Som sagt, vissa studenter vet inte hur man kör ett pythonscript när de sitter i tentasalen.

Det är viktigt att vänja sig vid arbete med terminalen. Det kan kännas klumpigt i början men det blir snabbare när man vänjer sig. Det är även viktigt att kunna arbeta med terminalen i senare IDA- och ISY-kurser.

Av de anledningarna rekommenderar vi starkt att ni inte använder någon IDE i den här kursen.

"Vanliga" texteditorer (vim, sublime, atom etc.)

Det är även vanligt att studenter av olika anledningar väljer att använda andra texteditorer utan avancerade språkspecifika funktioner (vim, sublime, atom, vscode gedit etc.). I de flesta fallen är det inga problem att göra det. Se bara till att editorn finns i tenta-systemen eller att ni kan emacs bra nog att ni klarar av att göra tentan.


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2021-12-03