Vad ska vi skapa i denna lektion?
Vi kommer att skapa ett program som läser data från två olika filer med 100st namn vardera. Dessa namn kommer från Statistiska Centralbyrån (SCB´s) namnstatistik över vanligaste namn på nyfödda. Efter det så kommer vi att låta användaren välja hur många namn hen vill generera och sedan kommer två namn att genereras varje gång: ett namn från varje fil.
Vad krävs för denna Python-kod?
Denna kod kommer att generera någonting slumpvist, och därför så behöver vi använda oss an funktionen "random.randint()" inom Python. Därför så måste vi börja med att importera modulen "random" med denna kod:
Importera modulen "random":
Efter det så måste vi skapa två filer där vi ska spara namn i. Du kan skriva denna kod för att skapa dessa filer:
Skapa filerna "namn1.txt", "namn2.txt" och "genereradenamn.txt" med denna kod:
Sedan så kan du kopiera innehållet i filen "namn1" och "namn2" som du hittar här:
Namn 1:
Namn 2:
Klistra in innehållet i varje fil ("namn1.txt" och "namn2.txt". "genereardenamn.txt" kommer vi att använda för att spara programmets genererade namn i.)
Läs in filerna i Python:
Nu så ska vi konvertera namnen till en lista. Python har en inbiggd funktion för deta som heter .read(). Efetr det så måste vi använda oss av ännu en funktion inbyggd i .read() som kallas splitlines(). Såhär ser en sådan kod ut:
Denna kod läser och öppnar filerna "namn1.txt" och "namn2.txt" samt öppnar filen "genereradetal.txt" i Python:
Något som kan vara ett problem nu är att namnen visas med konstiga tecken istället för å, ä och ö. Du kan lösa detta genom att öppna sökrutan i Windows, söka efter "namn1.txt", öppna med programmet "Anteckningar", välja "Arkiv>Spara som..." och välja "ANSI" under alternativet för kodning. Godkänn också att ersätta filen. Detta måste göras på samtliga filer i Programmet. Eftersom att du förmodligen vill ha några bilder som förklarar detta så hittar du det här:
Nu har vi allt fixat med filer och filkodningar och vi kan börja med att skriva vår kod för att generera namnen. Koden vi har i nuläget läser filerna och sparar dem i en lista. Då vet du förmodligen också att vi kan använda modulen random för att generera ett slumpvist tal. Du kanske tänker att vi kan använda oss av "random.choice" eftersom att vi arbetar med listor, men eftersom att det är text som inte är namn i filen så använder vi oss istället av "random.randint".
Vi börjar med att skapa en kod som väljer ett slumpvist namn ur varje fil. I "namn1.txt" så hittar vi det första namnet på rad 9 i filen. Listor börjar alltid på noll, så i "random.randint"-funktionen använder vi 8 som starttal. Sluttalet är antal rader i filen (minut ett), vilket blir 174 rader.
"namn2.txt" har 165 rader och namnen börjar på rad 8, vilket innebär att 164 och 7 är de tal vi ska använda. Hur ser en sådan kod ut? Jo, så här:
Vi börjar med att skapa en kod som väljer ett slumpvist namn ur varje fil. I "namn1.txt" så hittar vi det första namnet på rad 9 i filen. Listor börjar alltid på noll, så i "random.randint"-funktionen använder vi 8 som starttal. Sluttalet är antal rader i filen (minut ett), vilket blir 174 rader.
"namn2.txt" har 165 rader och namnen börjar på rad 8, vilket innebär att 164 och 7 är de tal vi ska använda. Hur ser en sådan kod ut? Jo, så här:
Denna kod genererar en plats i listorna med namn:
Men, måste vi egentligen göra så? Nej, för vi får bara två tal som sparas i en variabel, vilket skulle innebära att vi skulle behöva två variabler till som sparar själva namnen. Vi kan bara skriva så här istället:
Denna kod generererar ett slumpvist namn ur listorna med namn:
Detta får koden att bli kortare och gör så att du inte behöver använda lika många variabler jämfört med den andra typen av kod. Så, detta vore vara din Python-kod nu:
Detta vore vara din Python-kod i nuläget:
Allt vi ska göra nu är att ge användaren möjligheten att välja hur många namn hen vill generera och efetr det skriva data till filen "genereradenamn.txt". Så, vi börjar med att skapa en input() som frågar hur många namn användaren vill generera:
Denna kod frågar användaren hur många namn hen vill generera:
Efter det så lägger vi in en "for i in range()" loop:
Vi lägger till denna kod:
Och det vore vara uppenbart att vi ska generera olika namn varje gång, så flytta koden där två slumpvisa namn genereras till inuti "for i in range"-loopen. Sedan så skapar vi en variabel där de genererade namnen läggs ihop.
Så här ska "for i in range"-loopen se ut vid det här laget:
Eftersom att två stycken namn genereras så vore vi dividera variabeln antalnamn med två eftersom att två namn genereras varje gång loopen körs. Det är därför vi har str(i*2) i variabeln "genereradenamn" och inte bara str(i). För att alltid få ett jämt tal när vi dividerar så använder vi oss av funktionen round() som avrundar tal och variabler inom Python. Nu så behöver vi bara skriva ut resultatet med hjälp av funktionen "print()" och sedan spara det till filen "genereradenamn.txt" som redan har lästs in tidigare i koden. Så här ser den färdiga koden ut:
Här är hela koden för programmet:
Nu så har du skapat en namngenerator med hjälp av Python! Du kan såklart uppdatera generatorn med dina egna koder och funktioner. Det är ditt val!