Rutenett#
Vi kan lage rutenett ved å lage en liste som inneholder hver rad.
For å skrive ut rutenettet, kan vi skrive ut hver rad med en for
-løkke.
rutenett = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
for rad in rutenett:
print(rad)
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
Vi kan også deklarere rutenettet på én linje med rutenett = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Indeksere i rutenett#
Dette kartet kan hjelpe oss med å indeksere i rutenettet.
Søyle
Rad 0 1 2
0 [1, 2, 3]
1 [4, 5, 6]
2 [7, 8, 9]
For å indeksere i rutenettet skriver vi rutenett[rad][søyle]
.
rutenett = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(rutenett[0][2]) # Rad 0, søyle 2
print(rutenett[1][1]) # Rad 1, søyle 1
print(rutenett[2][0]) # Rad 2, søyle 0
3
5
7
Generere rutenett#
Vi kan generere rutenett ved å bruke en løkke i en løkke.
# Et tomt rutenett
rutenett = []
for n in range(5):
# Lager en tom rad
rad = []
# Legger til på raden
for m in range(5):
rad.append("#")
# Legger raden til på rutenettet
rutenett.append(rad)
# Skriver ut rutenettet
for rad in rutenett:
print(rad)
['#', '#', '#', '#', '#']
['#', '#', '#', '#', '#']
['#', '#', '#', '#', '#']
['#', '#', '#', '#', '#']
['#', '#', '#', '#', '#']
I noen tilfeller kan vi ønske å bruke strings for radene i stedet for lister.
Da blir rutenettet en liste med strings som representerer hver rad.
rutenett = []
for n in range(5):
rad = ""
for m in range(5):
rad += "# "
rutenett.append(rad)
for rad in rutenett:
print(rad)
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
Oppgaver#
Oppgave 1 🪟
Lag et program som lar en bruker skrive inn antall rader og antall søyler for et rutenett, og som skriver ut det tilsvarende rutenettet med #
.
Antall rader: 3
Antall søyler: 5
# # # # #
# # # # #
# # # # #
Løsningsforslag
Det finnes flere måter å gjøre dette på, men her har jeg brukt at man kan gange strings for å lage radene.
rader = int(input("Antall rader: "))
søyler = int(input("Antall søyler: "))
for n in range(rader):
print("# " * søyler)
# # # # #
# # # # #
# # # # #
Oppgave 2 ✖️
Lag et program som skriver ut gangetabellen fra \(1\) til \(9\) som et rutenett.
Fasit
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
Løsningsforslag
rutenett = []
for n in range(1, 10):
rad = ""
for m in range(1, 10):
rad += f"{m * n:>3}"
rutenett.append(rad)
for rad in rutenett:
print(rad)
Oppgave 3 🎨
Lag de følgende kvadratiske \(n\) x \(n\)-mønstrene med kode. Alle skal kunne variere i størrelse med en variabel \(n \geq 3\).
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
Oppgave 4 🧟
I denne oppgaven skal du skrive ut et rutenett med fiender. Rutenettet skal være \(5\) x \(5\).
For å plassere fiendene får du følgende ordbok. Der det ikke er fiender skal det plasseres en «#».
fiender = {
(1, 2) : "🧟",
(0, 0) : "🐍",
(3, 2) : "👺",
(0, 4) : "👻"
}
HINT: Hvis du har en koordinat x
og y
kan sjekken if (x, y) in fiender.keys()
være nyttig for å sjekke om det er en fiende ved en spesifikk posisjon.
Fasit
['🐍', '#', '#', '#', '👻']
['#', '#', '🧟', '#', '#']
['#', '#', '#', '#', '#']
['#', '#', '👺', '#', '#']
['#', '#', '#', '#', '#']
Løsningsforslag
fiender = {
(1, 2) : "🧟",
(0, 0) : "🐍",
(3, 2) : "👺",
(0, 4) : "👻"
}
rader = []
for x in range(5):
rad = []
for y in range(5):
# Sjekker om det er en fiende på koordinaten (x, y)
if (x, y) in fiender.keys():
# Setter inn fienden
rad.append(fiender[(x, y)])
else:
# Setter inn "#"
rad.append("#")
rader.append(rad)
for rad in rader:
print(rad)
Oppgave 5 🧫 (utfordring)
Conway’s Game of Life spilles på et rutenett med celler.
Hver celle følger disse reglene.
Naboer |
Oppdatering |
---|---|
Færre enn to naboer |
Dør |
To eller tre naboer |
Fortsetter å leve |
Flere enn tre naboer |
Dør |
Død, men med akkurat tre levende naboer |
Kommer til live |
Lag Game of Life for et \(n\) x \(n\)-rutenett i Python.
Eksempel: \(3\) x \(3\)
0 0 1 0 1 1 0 1 1
0 1 1 -> 0 1 1 -> 1 0 0
0 0 1 0 1 1 0 1 1
Oppgave 6 (utfordring) 💻
Lag en funksjon tastaturlengde(inp_ord)
som tar inn en string inp_ord
og returnerer den totale lengden man må bevege seg på et tastatur for å skrive ordet med én finger.
Beregn lengden mellom to koordinater \((x_1,y_1)\) og \((x_2,y_2)\) som \(|x_2-x_1| + |y_2-y_1|\)
Bruk følgende keyboard-layout:
q w e r t y u i o p å
a s d f g h j k l ø æ
z x c v b n m
Du kan finne en utvidelse av denne oppgaven på LeetCode (lenke)
Oppgave 7 ♟️ (utfordring)
Problemstillingen n queens er en kjent programmeringsoppgave.
Lag et \(n\) x \(n\)-sjakkbrett.
Fyll det med \(n\) dronninger på en måte som gjør at de ikke kan angripe hverandre.
Tallet \(n\) må være større enn \(3\).
Lag et program som finner en løsning for \(n\) x \(n\)-brettet og skriver det ut som et rutenett.
Løsning: \(n = 4\)
Her er en mulig løsning for \(n = 4\)
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0