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

------------------
(program exited with code: 0)
Press return to continue

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")
print (4)
	
Hej
4

------------------
(program exited with code: 0)
Press return to continue

Kommentarer

For at gøre koden lettere at læse indsætter man kommentarer i den. Det kan gøres på to måder. Se eksemplet herunder:

	
"""
Dette program viser noget om kommentarer i kode
"""		
		
# Dette er en kommentar
print ("Hej") # Dette er også en kommentar
	
Hej

------------------
(program exited with code: 0)
Press return to continue

Der er to typer af kommentarer her. Den store kommentar i starten der er omgivet af tre anførselstegn (""" *kommentar* """) og de to mindre der er lavet ved at sætte et hashtag (#) foran. Den tekst der kommer imellem """ eller efter # bliver sprunget over når kompileren læser og udfører koden.

Fejlmeddelelser

Lad os se på koden herover, hvor vi udskriver en tekststreng og et tal men hvor vi udelader de afsluttende parantes i første linje.

	
print ("Hej"
print (4)
	
  File "test.py", line 2
    print(4)
        ^
SyntaxError: invalid syntax

------------------
(program exited with code: 1)
Press return to continue

Python gør os opmærksom på at der er en syntaksfejl og den peger på linje 2. Grunden til at Python peger på linje 2 er, at den ikke får afsluttet parantesen i linje 1, og derfor forventer at der sker noget mere i linje 2 der er forbundet med linje 1. Men her starter en ny funktion. Dette er en syntaksfejl ... en fejl hvor koden ikke har den rigtige "grammatik".

Andre fejl kan f.eks. være, at man ikke angiver den rigtige type. Se nedestående eksempel, hvor Hej ikke er omsluttet af anførselstegn ("):

	
print (Hej)
print (4)
	
Traceback (most recent call last):
  File "test.py", line 1, in 
    print(Hej)
NameError: name 'Hej' is not defined

------------------
(program exited with code: 1)
Press return to continue

Her får vi en navnefejl. Python forventer en talværdi, da der ikke er nogen anførselstegn ... og Hej er ikke et tal.

Husk at

  1. ... bruge bogstaver - så er du aldrig i tvivl.
  2. ... afslutte hvad du begynder. Sørg for at anførselstegn, paranteser osv. bliver afsluttet
  3. ... angive typerne korrekt - værdi eller streng
  4. ... hvis fejlen ikke er i den linie Python henviser til, er det fordi den forrige linie ikke er korrekt (tjek paranteser og anførselstegn)

Tekststrenge

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

        .... NOT!""")
	
Roser er røde

    Violer er blå

Python er svært

        .... NOT!

------------------
(program exited with code: 0)
Press return to continue

Uden linjeskift

Hvis man ikke gør noget, så vil print() lave et linjeskift hver gang. Det kan undgås ved at indsætte end=" ".

	
print ("Python er", end=" ")
print ("ikke svært at lære.")
	
Python er ikke svært at lære.

------------------
(program exited with code: 0)
Press return to continue

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ørselsteng - "æble" 

------------------
(program exited with code: 0)
Press return to continue

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

\n Linefeed (ny linje)
\t Horisontal TAB

Her er givet nogle eksempler:

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

Dette er en sætning 	 med horisontal TAB

------------------
(program exited with code: 0)
Press return to continue
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.

\r Carriage return
	
print ("Dette er en sætning \rmed carraige return")
	
med carraige return

------------------
(program exited with code: 0)

Press any key to continue . . .

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

print(var1 + var2)
	
3

------------------
(program exited with code: 0)
Press return to continue

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.

Lad os lave et eksempel med nogle tekststrenge (læg mærke til mellemrummet før verden i var2):

	
var1 = "hej"
var2 = " verden"

print(var1 + var2)
	
hej verden

------------------
(program exited with code: 0)
Press return to continue

Man skal være opmærksom på at Python bruger + til at lægge værdier sammen. Havde vi ikke indsat et mellemrum før verden, ville udskriften have været hejverden. Man kunne også have udskrevet teksten ved at lægge et mellemrum til imellem variablerne:

	
print(var1 + " " + var2)
	

Man skal være opmærksom på hvad man lægger sammen. Se nedenstående eksempel hvor jeg forsøger at lægge en teksstreng sammen med et tal:

	
var1 = "hej"
var2 = 2 

print(var1 + var2)
	
Traceback (most recent call last):
  File "test.py", line 4, in 
    print(var1 + var2)
TypeError: Can't convert 'int' object to str implicitly

------------------
(program exited with code: 1)
Press return to continue

Python kan ikke udføre sammenføjningen, fordi den læser hej som en tekststreng og 2 som et tal (int). Vær derfor opmærksom på om du arbejder med talværdier eller tekst.

Prøv at ændre + til *(gange):

	
var1 = "hej"
var2 = 2 

print(var1 * var2)
	
hejhej

------------------
(program exited with code: 0)
Press return to continue

Man kan altså godt udskrive hej 2n gange, men man kan ikke lave regnestykket \( 2+hej \).

Navngivning af variabler

Hovedreglen om variabler er, at de ikke må starte med et tal. De må altså ikke hedde 1, 1pind osv.2

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

Man bruger enten underscore eller camelCasing, hvor første bogstav (pånær første ord) i ordet er med stort,ved længere variabler. Se nedestående eksempel:

	
#variabler med underscore
antal_bogstaver
udregning_af_diskreminant
antal_afdrag

#variabler med camelCasing
antalBogstaver
udregningAfDiskreminant
antalAfdrag
	

Jeg anbefaler at du bruger underscore fremfor camelCasing, da det er nemmest at læse og dermed overskue.

Variabler i tekststrenge

Når man skal indsætte variabler i tekststrenge anvender man pladsholdere som angives med {*tal*}. Se nedestående eksempel.

	
# Her behøver jeg ikke at indsætte et linjeskift efter hej.
# Jeg skriver laver det bare mellem pladsholderne.

tekst1 = "Thomas"
print ("Hej. Mit navn er {0}".format(tekst1))
	
Hej. Mit navn er Thomas

------------------
(program exited with code: 0)
Press return to continue

Læg mærke til at Python tæller fra værdien 0 og ikke 1.

På den måde kan man indsætte variabler løbende mens man skriver sin tekst. Det eneste man skal være opmærksom på er rækkefølgen de optræder i, så koden indsætter den rigtige variabel. Herunder er et eksempel med 2 pladsholdere i samme sætningen

	
navn = "Thomas"
prg_sprog = "Python"	
print ("Mit navn er {0}. \nJeg er ved at lære {1}. \n\n\tDet er \"nemt\".".format(navn, prg_sprog))
	
Mit navn er Thomas. 
Jeg er ved at lære Python. 

    Det er "nemt".

------------------
(program exited with code: 0)
Press return to continue

Variabler og formatering

Hvis man gerne vil formatere sin tekst kan man også anvende tre anførselstegn ("""). Læg mærke til, at jeg flytter linjen .format( .... til linien efter tekststykket.

	
navn1="Anders"
navn2="Bo"
navn3="carl"

print("""

Først kom {0}.
	
	Så kom {1}.
	
		{2} havde glemt det!.
"""
.format(navn1,navn2,navn3))
	

Først kom Anders.

        Så kom Bo.

                carl havde glemt det!.

------------------
(program exited with code: 0)

Press any key to continue . . .

Opgaver

Opgave - .format

Lav nedestående tekststykke ved hjælp af Python hvor de ord der er røde skal indsættes ved hjælp af variabler.

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

Opgave - escape characters

Lav følgende Output - på en print-linje ved hjælp af \n (ny linje) og \t (tabulator). Ordene "indholdsfortegnelse, "kapitel" og "afsnit" skal indsættes ved hjælp af variabler.

Indholdsfortegnelse
    Kapitel 1
        Afsnit 1
        Afsnit 2
    Kapitel 2

------------------
(program exited with code: 0)
Press return to continue

Input

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 tekst

I det nedestående eksempel er en simpel kode, der gør at brugeren kan indtaste sit svar

	
# Variablen navn sættes ved hjælp af brugerens input
navn = input("Hvad er dit navn: ")
print ("Du indtastede {0}".format(navn))
	

Resultatet er:

Hvad er dit navn: 

------------------
(program exited with code: 0)
Press return to continue

Den første linje i koden skriver tekstrengen i input funktionen, og venter på at brugeren indtaster sit svar.

Hvad er dit navn: Thomas ← Input

------------------
(program exited with code: 0)
Press return to continue

Herefter svarer Python tilbage med print-sætningen

Hvad er dit navn: Thomas
Du indtastede Thomas ← Output

------------------
(program exited with code: 0)
Press return to continue

Indtastning af tal

Hvis du skal indtaste en værdi, f.eks. alder, skal du gøre python opmærksom på om det er et heltal (int) eller et decimaltal (float). Lad os først prøve at indtaste et heltal. For at få Python til at indlæse vores indtastning som et tal skal vi ændre indtastningen fra en streng til et tal. Det gør vi ved at ændre tekststrengen til et tal ved at sætte linjen in i int() funktionen.

	
talInt = int(input("Indtast et heltal: "))
print ("Det dobbelte af heltallet er: {0}".format(talInt*2))
	
Indtast et heltal: 5
Det dobbelte af heltallet er: 10

------------------
(program exited with code: 0)
Press return to continue

Vi kan se det går galt hvis vi her vælger at indtaste et decimaltal (Her 5.5). Vær opmærksom på, at decimaltal indtastes med . (punktum) og ikke , (komma).

Indtast et heltal: 5.5
Traceback (most recent call last):
  File "test.py", line 1, in 
    talInt = int(input("Indtast et heltal: "))
ValueError: invalid literal for int() with base 10: '5.5'

------------------
(program exited with code: 1)
Press return to continue

Fejlmeddelelsen er, at det tal vi taster ind ikke tilhører base 10 hvilket er en anden betegnelse for 10-talssystemet. Laver vi nu koden om til at kunne modtage decimaltal sker der følgende (husk punktum (.) i stedet for komma(,)):

	
talFloat = float(input("Indtast et decimaltal: "))
print ("Det dobbelte af decimaltallet er: {0}".format(talFloat*2))
	
Indtast et decimaltal: 3.14
Det dobbelte af decimaltallet er: 6.28

------------------
(program exited with code: 0)
Press return to continue

Lad os se hvad der sker når vi indtaster et heltal:

Indtast et heltal: 5
Det dobbelte af decimaltallet er: 10.0

------------------
(program exited with code: 0)
Press return to continue

Her kommer der ikke en fejl fordi Python kan læse tallet som et decimaltal. Og du kan se på resultatet (10.0) at det er et decimaltal.

Herunder er vist et eksempel hvor der både anvendes en streng og et tal som input:

	
# Variablen tal sættes ved hjælp af brugerens input
navn = input("Hvad hedder du: ")
alder = int(input("Indtast din alder: "))

print ("Du hedder {0} og er {1} år gammel".format(navn, alder))
print ("Om 5 år er du {0} år gammel".format(5+alder))
	
Hvad hedder du: Thomas
Indtast din alder: 45
Du hedder Thomas og er 45 år gammel
Om 5 år er du 50 år gammel

------------------
(program exited with code: 0)
Press return to continue

Havde vi ikke angivet alder som en int, kunne vi ikke lægge 5 til.

Opgaver

Udvid opgaven

Ændr koden fra før, så brugeren selv indtaster informationerne. Formater teksten så den bliver pæn.

Selve teksten skal deles ind i to printsætninger, hvor den ene skal indeholde 3 variabler og den anden skal indeholde 2.

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