Home » Andet » Python: Genskab det berømte Game of Life
Python: Genskab det berømte Game of Life

Python: Genskab det berømte Game of Life

Share

Mihalis Tsoukalos kaster lys over Python-mængder og viser, hvordan man implementerer den klassiske programmeringsøvelse Game of Life i Python

Alle elsker en cellulær 2D-automaton, og for at udforske dette spændende emne vil vi bruge Game of Life som vores arbejdseksempel. Det må ikke forveksles med The Game of Life, et familiebrætspil, som blev lanceret i 1960, og som stadig bliver spillet i dag.

Men lad os begynde med at forklare, hvordan ikke-brætspillet Game of Life fungerer. Før vi går i gang, kan du hente kodepakkerne til denne guide fra LXF Archive her: https://bit.ly/lxf284code.

Game of Life har to funktioner: Det er en programmeringsøvelse og introduktion til teoretisk matematik (nu ingen panik), men i denne guide beskæftiger vi os kun med den førstnævnte funktion. Det virker måske ikke indlysende, men spillet er Turing-komplet, hvilket betyder, at man kan bruge dets datamanipulationsregler til at simulere en Turingmaskine. Det vender vi tilbage til senere i denne artikel.

Se også:  Del 2: Kod et livligt og legendarisk skydespil

Game of Life kan have forskellige former, der afhænger af dets indledende tilstand. Når Game of Life har fået en oprindelig tilstand, behøver det ikke ekstra input fra brugeren. Med andre ord: Når Game of Life har sin indledende tilstand, kan det fungere på egen hånd ved hjælp af programmets regler.

Livets mønstre

Game of Life fungerer ved at oprette mønstre. Figuren herunder viser et eksempel på mønstre i Game of Life – de forestiller levende og døde celler. Sort står for levende celler, og hvidt står for døde celler, og det er dette farvemønster, der går igen i denne guide.

Så snart du har læst reglerne for Game of Life, vil du forstå, hvorfor det ikke er alle sorte og hvide cellekombinationer, der er tilladt. Hint: Når en levende celle har for mange naboer, dør den! Bemærk, at der findes to slags mønstre – dem, der ændrer sig og gentager sig; og mønstre, der er stabile, hvilket vil sige, at de ikke bliver opdateret.

Billedet viser nogle stabile mønstre, der kan forekomme i Game of Life. Et mønsters stabilitet afhænger af reglerne. Hos cellen med fire celler, dør ingen celler, fordi hver celle har tre levende naboer.

Game of Life inddrager mængdelære, det vil sige et matematisk område, der arbejder med mængder. Mængdelære er ikke relateret til enhver Game of Life-implementering, men det er godt at kende til den. Matematisk udtrykt er en mængde en samling af distinkte objekter, som ikke nødvendigvis har den samme type (kopier er ikke tilladt i mængder). Man kalder dem elementer.

Se også:  Kunstig intelligens er bedre til at kode end menneskelige udviklere

Elementerne i disse mængder kan tilhøre enhver datatype. De omfatter tegn, som man kan bruge til at komponere en streng til et skræddersyet sprog, mulige tilstande for en automaton eller de tilladte transitioner hos en Turingmaskine.

Billedet viser nogle stabile mønstre, der kan forekomme i Game of Life. Et mønsters stabilitet afhænger af reglerne. Hos cellen med fire celler, dør ingen celler, fordi hver celle har tre levende naboer.

I Python kan man definere et sæt på to måder. Den første bruger den indbyggede set() -funktion, og den anden bruger tuborgklammer.

Det følgende kodecitat fra cs.py viser, hvordan man definerer fire mængdevariabler i Python:

s1 = set(“linuxformatlinux”)
s2 = set([“l”,”i”,”n”,”u”,”x”,”x”])
s3 = {“f”,”o”,”r”,”m”,”a”,”t”,”t”}
s4 = set([“l”,”i”,”n”,”u”,”x”,”x”, 3, “LXF”])

Husk, at mængder ikke indeholder kopierede værdier – det er Pythons opgave at sørge for det. Derfor bliver kopierede værdier automatisk ignoreret og kasseret. Det, der er interessant, er s1- og s4-variabler. Når det gælder s1, bliver en streng brudt op i tegn, og der bliver oprettet en mængde. Variablen s4 viser, at en mængde kan rumme værdier med forskellige datatyper. Det er en vigtig og interessant egenskab ved mængder.

Hvis man kører cs.py, får man dette output:

s1: {‘m’, ‘n’, ‘r’, ‘x’, ‘a’, ‘l’, ‘i’, ‘u’, ‘o’, ‘t’, ‘f’}
s2: {‘n’, ‘x’, ‘l’, ‘i’, ‘u’}
s3: {‘m’, ‘r’, ‘a’, ‘o’, ‘t’, ‘f’}
s4: {‘n’, 3, ‘x’, ‘l’, ‘LXF’, ‘i’, ‘u’}
Is l part of s3? False
Union of s2 and s3: {‘m’, ‘n’, ‘r’, ‘x’, ‘a’, ‘l’, ‘i’, ‘u’, ‘o’, ‘t’, ‘f’}
Is s1 equal to s2? False
Is s1 equal to union of s2 and s3? True
Intersection s1 and s2: {‘n’, ‘x’, ‘l’, ‘i’, ‘u’}

Bemærk, at Python-mængder ikke beholder mængdeelementer i den indledende rækkefølge, men snarere i vilkårlig rækkefølge. Derfor bør man ikke bruge mængder, hvis man har brug for, at ens data er sorteret. Der er mange andre operationer, man kan udføre på mængder i Python, men de operationer, der er omfattet af cs.py, er de fundamentale.

Ikke mere teori. Eftersom vi vil udvikle Game of Life i trin, kan vi fortsætte med at præsentere det første skridt i implementeringen.

1 2 3 4Næste

TAGS
game of life
gør det selv
kode
python
retrogaming

DEL DENNE
Share


Mest populære
Populære
Nyeste
Tags

Find os på de sociale medier

Find os på FaceBook

AOD/AOD.dk

Brogårdsvej 22
DK-2820 Gentofte
Telefon: 33 91 28 33
redaktion@aod.dk

Audio Media A/S

CVR nr. 16315648,
Brogårdsvej 22
DK-2820 Gentofte
Telefon: 33 91 28 33
info@audio.dk
Annoncesalg:
Lars Bo Jensen: lbj@audio.dk Telefon: 40 80 44 53
Annoncer: Se medieinformation her
Annoncelinks


AOD/AOD.dk   © 2022
Privatlivspolitik og cookie information - Audio Media A/S