Lektioner
Introduktion til Programmering
5. Bonus: Kodeeksempel i PythonI denne bonuslektion tager vi et nærmere kig på et Python-program, som tæller antal ord i en tekstfil. Sådan her ser programmet ud, når man kører det:

Før vi dykker ned i selve koden, kommer her en kort beskrivelse af den overordnede tilgang til løsningen:
- Vælg hvilken tekstfil, som skal analyseres.
- Gennemgå teksten en linje af gangen, og:
- Opdel linjen i ord.
- Forøg antal gange hvert ord er fundet.
- Når teksten er analyseret, kan brugeren slå ord op efter deres ønske.
Omsat til Python-kode, kan programmet f.eks. se således ud:
import re
frequencyOfWords = {}
bookName = input("Enter the book you'd like to search through: ")
file = bookName + ".txt"
book = open(file, "r", encoding="utf8")
for line in book:
wordList = re.split('\; |\, |\. |\"|\! |\n| ', line)
for word in wordList:
if word:
lowercaseWord = word.lower()
timesCountedSoFar = frequencyOfWords.get(lowercaseWord, 0)
frequencyOfWords[lowercaseWord] = timesCountedSoFar + 1
while True:
searchedWord = input("Give me a word: ").lower()
wordOccurrences = frequencyOfWords.get(searchedWord)
if (wordOccurrences):
print('"{}" occured {} times.'.format(searchedWord, wordOccurrences))
else:
print('The word "{}" was never used in the book: {}.'.format(searchedWord, bookName))
Nedenfor er programmet beskrevet i mindre dele, så du kan få en bedre forståelse af, hvad de enkelte linjer koder rent faktisk gør:
import re
frequencyOfWords = {}
1. Først importeres en ekstra “kodepakke” (i dette tilfælde ‘re’), som kan hjælpe os senere med at analysere tekst. Derudover laves en tom dictionary, hvilket kommer til at fungere som opslagsværk for ordene.
bookName = input("Enter the book you'd like to search through: ")
file = bookName + ".txt"
book = open(file, "r", encoding="utf8")
2. Brugeren indtaster navnet på den tekstfil, som de ønsker at analysere. Herefter indlæses filen, så den kan brydes ned i linjer.
for line in book:
wordList = re.split('\; |\, |\. |\"|\! |\n| ', line)
3. Ved brug af et ‘for-loop’ kan man gå igennem alle linjer i tekstfilen. Her bruger vi “Regular Expressions” fra ‘re’-pakken til at dele linjen i ord, dvs. når der f.eks. er et semikolon, et mellemrum, eller et punktum.
for word in wordList:
if word:
lowercaseWord = word.lower()
4. Endnu et ‘for-loop’ bruges til at undersøge hvert enkelt ord. Først bliver ordet transformeret til kun at bruge små bogstaver (så der f.eks. ikke er forskel på “lykke” og “Lykke”).
timesCountedSoFar = frequencyOfWords.get(lowercaseWord, 0)
frequencyOfWords[lowercaseWord] = timesCountedSoFar + 1
5. Herefter bruges den tidligere nævnte ‘dictionary’ til at finde ud af, hvor mange gange ordet har optrådt indtil nu. Der lægges 1 til antallet før opslagsværket bliver opdateret med den nye værdi.
while True:
searchedWord = input("Give me a word: ").lower()
6. Når tekstfilen er analyseret kan brugeren indtaste et ord, som de vil søge efter. Dette vil de fortsat kunne gøre indtil programmet lukkes.
wordOccurrences = frequencyOfWords.get(searchedWord)
if (wordOccurrences):
print('"{}" occured {} times.'.format(searchedWord, wordOccurrences))
else:
print('The word "{}" was never used in the book: {}.'.format(searchedWord, bookName))
7. Hvis ‘dictionarien’ indeholder ordet, så vises antal gange det er fundet - ellers informeres brugeren, at ordet aldrig optrådte i bogen.