Lister, dictionaries og tuplets

I starten lærte du om variabler. Overordnet set kan lister, dictionaries og tuples ses som en måde at opbevare mange variabler på i et velordnet skema. I dette materiale gennemgås 3 af metoderne:

Type Beskrivelse
Liste
Dictionary
Tuple

Lister

Ofte kan det være en fordel at kunne hente tal ud fra tabeller, f.eks. en liste med brugere, brugernavne og adgangskoder. Læg mærke til at navnene sætter i anførselstegn for at Python tolker det som tekststrenge og ikke værdier.

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dennis"] 

#udskriver hele listen
print (navne)

# Udskriver det x'te element af listen. Husk at computere tæller fra 0 
print (navne[0])
print (navne[1])
print (navne[2])
print (navne[3])
	
['Anne', 'Bent', 'Cecilie', 'Dennis']
Anne
Bent
Cecilie
Dennis


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

Koden kan også laves, hvor listens elementer printes ud ved hjælp af en løkke. Læg mærke til at antallet af elementer i listen findes ved at anvende len().

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dennis"] 

#udskriver hele listen
print (navne)

# Udskriver det x'te element af listen. Husk at computere tæller fra 0 
antal_navne = len(navne)

for i in range(antal_navne):
	print(navne[i])
	

Ændre element

Hvis man ønsker at ændre et element i en liste angiver man blot en ny variabel

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dennis"]

#udskriver hele listen
print (navne)

# Ændring af det 4 element i listen
navne[3] = "Dorthe"

print ("Den nye liste", end=" ")
print (navne)
	
['Anne', 'Bent', 'Cecilie', 'Dennis']
Den nye liste
['Anne', 'Bent', 'Cecilie', 'Dorthe']


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

Tilføje element

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe"]

#udskriver hele listen
print (navne)

# Tilføj ekstra element
navne.append ("Egon")
print (navne)
	
['Anne', 'Bent', 'Cecilie', 'Dorthe']
['Anne', 'Bent', 'Cecilie', 'Dorthe', 'Egon']


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

Fjerne element

Man har ofte brug for at kunne fjerne elementer i en liste på to måder. Enten et specifikt element, eller det sidst tilføjede. For at fjerne elementer anvender man del.

Fjern sidste element

Ved at angive indeksnummeret som negativt tæller python fra slutningen af listen. Så for at fjerne det sidste element anvendes -1.

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe", "Egon"]

#udskriver hele listen
print (navne)

# Fjerne det sidste element
del navne[-1]

print (navne)
	
['Anne', 'Bent', 'Cecilie', 'Dorthe', 'Egon']
['Anne', 'Bent', 'Cecilie', 'Dorthe']


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

Fjerne specifikt element

I dette tilfælde vil vi fjerne Cecilie som er det 3. element

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe", "Egon"]

#udskriver hele listen
print (navne)

# Fjern "Cecilie"
del navne[2]

print (navne)
	
['Anne', 'Bent', 'Cecilie', 'Dorthe', 'Egon']
['Anne', 'Bent', 'Dorthe', 'Egon']


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

Find elements placering

Herunder vil vi finde elementet "Cecilie" i listen ved hjælp af index().

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe", "Egon"]

find_navn = "Dorthe"
listnumber = navne.index(find_navn)

print ("\"{0}\" er nummer {1} i listen".format(find_navn,listnumber))
	

Output fortæller os at "Dorthe" er det 3. element

"Dorthe" er nummer 3 i listen


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

Findes element

Ovenfor søgte vi placeringen af et liste-element. Her vil vi blot afklare om et element findes eller ej. Ved at anvende den følgende fremgangsmåde bliver svaret enten True eller False. Læg mærke til at startbogstavet er stort.

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe", "Egon"]

navn_der_testes =  "Dorthe"
findes_navn = navn_der_testes in navne
print ("{0} er på listen: {1}".format(navn_der_testes,findes_navn))
	
Dorthe er i listen: True


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

Man kan også spørge negerende (negativt/modsat). Man skal altid passe på med at spørge negerende, da svarende kan blive ret kryptiske. Se f.eks. eksemplet herunder. Her spørger vi om Dorte IKKE er i listen og svaret vi får er False. Det er fordi at det er et falsk udsagn at Dorte ikke er på listen.

Det gælder om at holde tungen lige i munden når man spørger negerende, fordi vi er som danskere vant til at bruge negerende sætninger forkert f.eks: "Har vi det ikke godt". "ikke godt" er dårligt ⇒ har vi det dårligt hvilket vi egentlig skal svare nej til hvis vi har det godt ... men vi danskere svarer fuldstændig ulogisk ja til den sætningen ...

	
# Liste med navne
navne = ["Anne", "Bent", "Cecilie", "Dorthe", "Egon"]

navn_der_testes =  "Dorthe"
findes_navn = navn_der_testes not in navne
print ("{0} er IKKE i listen: {1}".format(navn_der_testes,findes_navn))
	
Dorthe er IKKE i listen: False


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

Opgaver

Opgave - lister

Lav et program hvor brugeren ved hjælp af et input kan:

  • ... laver en udskrift af listen
  • ... tilføje et navn til listen
  • ... fjerne et navn på listen
  • ... søge efter navne i listen
  • ... afslutte programmet

Det er reelt en lille database du programmerer her ;)

Fyld liste

Man kan fylde lister ved hjælp af funktioner. Se nedestående eksempel

	
test = list(range(20))
print (test)
	
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

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

Man kan også lave en liste fuld af andre tegn

	
import string

test = list(string.ascii_lowercase)
print (test)
	
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

------------------
(program exited with code: 0)
Press any key to continue . . .

Af andre muligheder er der

  • ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
  • ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • digits = '0123456789'
  • hexdigits = '0123456789abcdefABCDEF'
  • octdigits = '01234567'
  • printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
  • punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
  • whitespace = ' \t\n\r\x0b\x0c'

Dictionaries

Dictionaries er en udvidet liste. Heri kan man koble to elementer til hinanden, f.eks. et brugernavn med et ID. Herunder oprettes en dictionary og vises:

Dictionaries opfører sig langt hen ad vejen som almindeligelister, så jeg har valgt blot at vise nogle eksempler. De er dog vigtige at have med, da det er denne måde vi senere vil kunne bygge variabler med denne metode når der bliver kørt løkker (se senere).

	
#dictionary med bruger ID
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4}

#udskriv listen
print ("\nUdskrivning af hele listen\n")

print (bruger_id)
	
Udskrivning af hele listen

{'Dennis': 4, 'Anne': 1, 'Cecilie': 3, 'Bent': 2}


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

Udskriver et element

	
#udskrift af en enkelt brugers ID
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4}

print (bruger_id)		
udskriv_anna = bruger_id["Anne"]
print ("\nAnnas brugerID: {0}".format(udskriv_anna))
	
{'Bent': 2, 'Anne': 1, 'Dennis': 4, 'Cecilie': 3}

Annas brugerID: 1


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

Tilføj element

	
#tilføje en bruger med ID
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4}

print (bruger_id)
print ("\nDer tilføjes brugern Egon med ID = 5")
bruger_id ["Egon"]=5
print (bruger_id)
	
{'Bent': 2, 'Anne': 1, 'Dennis': 4, 'Cecilie': 3}

Der tilføjes brugern Egon med ID = 5
{'Bent': 2, 'Egon': 5, 'Anne': 1, 'Dennis': 4, 'Cecilie': 3}


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

Ændre elements værdi

	
#Ændre en brugers ID
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4, "Egon":5}		

print (bruger_id)
print ("\nEgons ID ændres til 6")
bruger_id["Egon"]=6
print (bruger_id)
	
{'Anne': 1, 'Dennis': 4, 'Egon': 5, 'Cecilie': 3, 'Bent': 2}

Egons ID ændres til 6
{'Anne': 1, 'Dennis': 4, 'Egon': 6, 'Cecilie': 3, 'Bent': 2}


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

Fjerne et element

	
#fjerne brugeren Egon
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4, "Egon":5}

print(bruger_id)
print ("\nFjerner brugeren Egon")
del bruger_id["Egon"]
print (bruger_id)
	
{'Anne': 1, 'Bent': 2, 'Egon': 5, 'Dennis': 4, 'Cecilie': 3}

Fjerner brugeren Egon
{'Anne': 1, 'Bent': 2, 'Dennis': 4, 'Cecilie': 3}


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

Undersøg om et element findes

	
#Undersøger om en bruger findes
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4}

print (bruger_id)
is_egon = "Egon" in bruger_id
print ("\nUndersøger om brugeren Egon Findes: {0}".format(is_egon)) 
	
{'Cecilie': 3, 'Dennis': 4, 'Bent': 2, 'Anne': 1}

Undersøger om brugeren Egon Findes: False


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

Undersøg om et element IKKE findes

	
#undersøg om brugeren Susanne IKKE findes
bruger_id = {"Anne": 1, "Bent": 2, "Cecilie": 3, "Dennis": 4}

print (bruger_id)
is_egon = "Susanne" not in bruger_id
print ("\nUndersøger om brugeren Susanne IKKE i denne dictionary: {0}".format(is_egon)) 
	
{'Cecilie': 3, 'Dennis': 4, 'Bent': 2, 'Anne': 1}

Undersøger om brugeren Susanne IKKE i denne dictionary: True


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

Opgaver

Lav et login ved hjælp af en dicionary

Opret en dicionary med dig selv som bruger og opret en adgangskode. Lav en if/else struktur hvor du:

  1. undersøger om brugeren findes
  2. om adgangskoden er korrekt
  3. Hvis brugeren kan godkendes printes: Velkommen *brugernavn*
  4. Hvis ikke: Du har ikke adgang

Lav en valutaomregner

Lav en valutaomregnder ved hjælp af en dictionary funktionen valuta(a,b), hvor a er valutaen og b er beløbet.

Analyser IP adresse 1

Lav en løkke så der dannes en dictionary med følgende indhold: okt1 = 192, okt2 = 168, okt3 = 3, okt4 = 100

Udbyg programmet så du du med et input kan udtale dig om:

  • privat eller offentligt netværk
  • Er computerens lokale IP-adresse

Analyser IP-adresse 2

Lav et program der analyserer netmasken (f.eks. 255.255.255.0), og udskriver den både som binær og decimal adresse

Analyser IP-adresse 3

Kombiner opgave 1 og 2, så du kan indtaste IP-adressen med CIDR (10.0.2.10/24) og lav en analyse af adressen.