Strenge, variabler og input

Denne guide handler om det mest basale i alle programmeringssprog, nemlig hvad data er og hvordan man behandler dem.

Et simpelt program

Lad os lave et simpelt program der udskriver tekstrengen: "Hej". Indtast nedestående og tryk på F5

	>>>print ("Hej")
Hej

Programmet er opbygget af funktionen print(), som laver et output af det som står i parantesen. I dette tilfælde af tektstrengen Hej. Som du kan se i programmet omgiver vi teksstrengen Hej med udråbtegn " ". Det er nødvendigt, fordi Python skal vide om vi indsætter en værdi eller en tekststreng. Vi fortæller altså Python om det er en værdi ved enten at sætte udråbstegn omkring eller at udelade dem.

	>>>print ("Hej")
Hej
>>>print (4)
4

Undgå fejl

Når du anvender Pythonshell kan du ikke starte koden, hvis der er fejl i den. Så vil cursoren bare rykke en linie ned når du trykker ENTER.

Hvis det sker skal du tjekke om du har afsluttet dine tegn. Det gælder for:

  • Anførselstegn og apostroffer - " '
  • paranteser og brackets - () []
  • Indrykninger (kommer senere)

Når du senere i dette materiale har kode der ikke fungerer, så er det punkterne i denne liste du skal tjekke dine kode for.

Tekststrenge

Tekststrenge skal skrives imellem 2 anførselstegn eller apostroffer

	>>> print ("med anførselstegn")
med anførselstegn
>>> print ('med apostroffer')
med apostroffer

Escape sequences

Escape sequences er betegnelsen for den metode man anvender for at indsætte tegn som normalt anvendes af Python f.eks: ', ", \ samt linje- og tabulatorskift. Herunder er en liste med de vigtiste tegn. Hvis man har behov for at sætte tegn ind i en streng, som python normalt vil tolke som en del af programmeringssproget

\\ Backslash \
\' Fritstående apostrof '
\" Fritstående anførselstegn "

Se nedenstående eksempel

	>>> print ("Her kommer et ord med anførselstegn - \"æble\" ")
Her kommer et ord med anførselstegn - "æble" 

Man kan også anvende escape sequences, hvis man vil rykke teksten i teskstrengen.

\n Linieskift (linefeed)
\t tabulator (horisontal afstand)

Her er givet nogle eksempler:

	>>> print ("Dette er en sætning \nmed linieskift (linefeed)")
Dette er en sætning 
med linieskift (linefeed)
>>> print ("Dette er en sætning \tmed horisontal TAB")
Dette er en sætning 	med horisontal TAB

Carriage return

Hvis man vil skrive oven i det der lige er printet skal man anvende \r. Det kan f.eks. være hvis man vil lave et ur der tæller ned, og man ikke ønsker det gamle tal skal blive stående.

Desværre virker denne feature ikke i IDLE, men du skal bruge denne escape sequence i en senere opgave.

\r Carriage return

Anden afslutning

Som standard indsætter Python et linieskift (\r) efter en print sætning. Dette kan ændres ved at indsætte end="*det som der skal gøres*" som en paramter.

Det kan være smart hvis man vil have noget til at udskrive sig efter hinanden, f.eks. en talrække. Her ser du noget kode, som du først vil lære senere, men det går i al sin enkelthed ud på at udføre den samme kommandolinie flere gange.

	>>> for i in range(5):
    print(i) ← Normal afslutning betyder linieskift

    
0
1
2
3
4
>>> for i in range(5):
    print(i, end=" ") ← afsluttes med et mellemrum

    
0 1 2 3 4 
>>> for i in range(5):
    print(i, end=" : ") ← afsluttes af et kolon omgivet af mellemrum

    
0 : 1 : 2 : 3 : 4 :    

Lange tekststykker

Hvis man skal skrive længere tekststykker der indeholder linje skift og tabulatorindrykninger kan man anvende en anden metode - triple anførselstegn. Ved at omgive sin tekststreng med """ *tekststreng* """ så bevares linjeskift, indrykninger, mellemrum og tabulatorer.

	>>> print ("""
Roser er røde

    Violer er blå

Python er svært

        .... Indtil man får det lært""")

Roser er røde

    Violer er blå

Python er svært

        .... Indtil man får det lært

Variabler

Variabler er små tekstrenge vi kan sætte til at have enten en værdi, en char eller en tekststreng. Fordelen ved at anvende variabler er, at vi hurtigt kan ændre koden til at køre efter nogle andre betingelser, f.eks. antal gang, sprog osv.

Før vi gennemgår hvad variabler er skal du lige læse nedenstående eksempel:

	>>> var1 = 1
>>> var2 = 2
>>> var1 + var2
3

Det som sker her er, at vi sætter udtrykket (variablen) var1 til at have værdien 1 og var2 til værdien 2. Det kan vi se når vi beder Python om at udskrive summen af var1 og var2 - resultatet er 3. Man kan sige at en variable er en stedfortræder for en værdi eller en tekststreng.

LÆG MÆRKE TIL ... at jeg ikke skriver print foran den sidste kodelinie. Det er ikke nødvendigt når man anvender Idle, da den automatisk laver et print output af koden.

Dette vil blive brugt fremover når der arbejdes i Idle med kode der kuyn fylder en linie.

Tekst i variabler

	>>> var1 = "hej"
>>> var2 = "verden"
>>> var1 + var2
hejverden

Som du kan se, så bliver de to variabler udskrevet lige efter hinanden uden mellemrum. Det skal altså indsættes i koden (" verden") eller tilføje det som en tekststump:

	>>> var1 + " " + var2 ← Her indsættes et mellemrum
hej verden
>>> var1 + " store " + var2 ← Her indsættes store med mellemrum omkring
hej store verden

Navngivning af variabler

Nar man navngiver variabler gælder der følgende regler

  • Skal starte med et bogstav eller _ (underscore)
  • Eksempler: antal, Position2, _bil

  • Kan kun indeholde alfanumeriske tegn og underscore (A-å, 0-9, _)
  • Man må bruge alle bogstaver, tal og underscore til at lave variabelnavne med.

    Hvis man programmerer noget der skal være tilgængeligt ud over danmarks grænser bør man afholde sig fra at bruge æ, ø og å. Men programmerer man til sig selv, så er det ligegyldigt.

  • Der er forskel på store og små bogstaver (case sensitive)
  • abc, Abc, aBC er alle sammen forskellige variabelnavne

Brug beskrivende navne til dine variabler, så bliver koden lettere at læse. F.eks: fnavn til fornavn og antal_gæt til antallet af gæt

Skal man anvende mere beskrivende variabel navne med flere ord, kan man bruger enten underscore eller camelCasing. Se nedestående eksempel:

	#variabler med underscore
antal_bogstaver
udregning_af_diskriminant
antal_afdrag

#variabler med camelCasing
antalBogstaver
udregningAfDiskriminant
antalAfdrag

Jeg kan bedst lide at bruge underscore, da jeg synes det er lettest at læse.

Ændring af variabler

Hvis man vil ændre værdien af en variabel gør sætter skriver man den bare en gang til med den nye værdi:

	>>> var1 = 1
>>> var1 ← viser variablen var1
1
>>> var1 = 2 ← ændrer var1
>>> var1
2

Fejlkoder

Man skal være opmærksom på at python forstår + som et logisk plus som lægger to elementer sammen. Det betyder at man ikke skal blande værdier og tekststrenge sammen.

	>>> var1 = "Hej"
>>> var2 = 2
>>> var1 + var2

Her vil Python brokke sig på følgende måde

Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    print (var1 + var2)
TypeError: must be str, not int

Den sidste linie fortæller hvad fejlen er:

TypeError: must be str, not int

Oversat: Typefejl: Skal være en streng, ikke et tal (integer)

Python fortæller os at det er en type fejl - man kan ikke sige 2 + hej - det giver ingen mening. Grunden til at Python gør det til en streng fejl er, at den første variabel er en streng. Havde det været modsat, så ville fejlmeddelelsen have været

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Gentagelser

Som vi så ovenfor kan man ikke lægge tekst og tal sammen. Men man kan godt gentage tekst ved hjælp af gange ( * ).

Forestil dig at du gerne vil have 35 stjerner efter hinanden. Det kan vi gøre ved at sige til Python at den skal printe tegnet 35 gange

	>>> 35 * "*"
'***********************************'

Skal man printe den samme ting igen og igen er dette metoden at gøre det på. Det fylder mindre, og man skal ikke tælle antal tegn for at forstå koden.

Input

Ofte har vi brug for at anvende input (f.eks. indtastning) fra brugeren. Det gøres ved hjælp af kommandoen input():

Indtastning af tekst

Her lavet vi en variabel der hedder fornavn, og den skaber vi ved hjælp af brugerens input:

	>>> fornavn = input("Hvad er dit fornavn: ")

Når du trykker Enter, kommer der en line frem med en blinkende cursor.

Indtast dit navn og tryk Enter

	>>> fornavn = input("Hvad er dit fornavn: ")
Hvad er dit fornavn: Thomas ← Mit input

Herefter kan vi få navnet frem ved at bruge variablen navn

	>>> fornavn
'Thomas' ← Apostrofferne - viser det er tekst 

Det vi har lært ovenfor er at indsætte variabler i selve koden. Det som vi skal se på her er, at give mulighed for at brugeren kan indtaste informationer.

Indtastning af heltal

Som standard er Python sat op til at inputs er tekst. Hvis det skal være et tal (f.eks. alder) skal det konverteres. Det gøres ved hjælp af int():

	>>> alder = int(input("Hvor gammel er du?: "))
		      
Hvor gammel er du?: 48 ← Mit input

Vi tjekker variablen alder:

	>>> alder
		      
48 ← Uden apostroffer - viser det er en værdi 

Læg mærke til... at der ikke er nogle anførselsteng omkring tallet. Det er altså en værdi nu

Indtastning af decimaltal

Decimaltal fungerer på næsten samme måde. Her skal dog anvende en anden funktion, nemlig float().

VIGTIGT: Når vi skriver decimaltal skal man bruge punktum og ikke komma. Komma anvendes til at adskille i python. Dvs:

  • 3.14
  • 2.5
  • osv.

Lad os indtaste prisen på en liter mælk:

	>>> mælk = float(input("Hvad koster 1 liter mælk: "))

Hvad koster 1 liter mælk: 7.95

Vi tjekker variablen mælk:

	>>> mælk
		      
7.95

Variabler i tekststrenge

Lad os bruge det vi lige har lært og indskyde en variabel i en tekststreng. Forestil dig et program der skal byde brugeren velkommen med sætningen:

Hej *navn*. 

Vi skal altså lave et input, og så skal vi printe dette input ud, sammen med resten af sætningen. Det gør vi ved hjælp af pladsholdere på følgende måde:

	>>>navn = "Thomas"
>>>"Hej {0}".format(navn)
'Hej Thomas'

Pladsholderen er to curly-brackets, hvor man angiver den position variablen har i .format(). Se f.eks. nedestående kode:

	>>>navn = "Thomas"
>>>alder = 48
>>>"Hej {0}. Du er {1} år gammel".format(navn, alder)
'Hej Thomas. Du er 48 år gammel'

Læg mærke til...: at Python tæller 0, 1, 2, 3 ,4

Dvs. .format(*position 0*, *position 1*, *position 2*, ...)

Ved hjælp af escape characters kan vi nu formatere vores tekst med linieskift og tabulatorer. Ændre output linien til en "rigtig" print sætning:

	>>> print ("Hej {0}.\n\t Du er {1} år gammel".format(navn, alder))
Hej Thomas.
	 Du er 48 år gammel

Vi kunne også have brugt tripple anførselstegn til at formatere med på følgende måde:

	>>> print ("""
	Hej {0}.
	
	Du er {1} år gammel
	
	""".format(navn, alder))

	Hej Thomas.
	
	Du er 48 år gammel

Det vigtige er at .format() kommer efter printsætningen, og at pladsholdere referere til den rigtige position i .format()

Opgaver

Pladsholdere 1

Lav en kode ved hjælp af variabler, der giver følgende output

	Mit navn er navn. Jeg bor i by og er alder år gammel. Mit telefonnummer er: 
telefonnummer og det er en telefonmærke.