Lådor i RAM & datatyper

Vad händer i datorn när du skapar en variabel?

Din dator innehåller en minneskrets som kallas RAM (Random Access Memory) Datorns arbetsminne, ett minneskrets där alla aktiva variabler och program lagras under körning. Flyktigt: innehållet försvinner när strömmen bryts. Se: Lådor i RAM & datatyper . Tänk dig det som ett gigantiskt rutnät av miljarder små lådor, var och en med en unik adress. Varje låda kan hålla en liten elektrisk laddning: laddad betyder 1, oladdad 0.

När du skriver namn = "Kalle" ber Python om lediga lådor i rutnätet, lägger i bytes som representerar K-a-l-l-e och klistrar etiketten namn på platsen. Nästan som magi, men det är fysik. Drar du ut strömsladden försvinner laddningarna, och med dem allt som bodde i lådorna.

RAM som ett rutnät av lådor, där en variabel är en etikett på en eller flera lådorK1000a1001l1002l1003e100410052510061007namnålderadresser i RAM

Bilden är förenklad, men den bär tre saker som stämmer. Varje låda har en adress som Python håller reda på åt dig. Ett värde kan behöva flera lådor, en per tecken i det här fallet, medan etiketten namn är ett enda namn på hela raden. Och lådorna däremellan står tomma tills något annat behöver dem.

Det är vad som menas med att RAM är flyktigt. Variabel Ett namn kopplat till en adress i RAM. Python sköter adresserna, du väljer namnet. Se: Lådor i RAM & datatyper existerar bara medan programmet körs.

Det du lär dig nu är den första av de tre förmågor som bär hela kursen: att spara. De andra två, att välja och att upprepa, kommer längre fram.

Variabler, prova direkt

Kör koden nedan och se vad som skrivs ut. Ändra sedan värdena till dina egna och kör igen.

Editor

Redo.

type() är en inbyggd funktion som berättar vilken datatyp en variabel har. Du kommer använda den mycket när du felsöker.

De fyra grundläggande datatyperna

En låda i RAM vet inte om den håller text, ett tal eller ett logiskt värde, den håller bara ettor och nollor. Det är Datatyp Talar om för Python hur ett värde ska tolkas. De fyra grundläggande: str (text), int (heltal), float (decimaltal), bool (sant/falskt). Se: Lådor i RAM & datatyper som talar om hur Python ska tolka bitmönstret.

En sträng (str) är text. Strängar skrivs inom citationstecken, enkla eller dubbla spelar ingen roll.

namn = "Elvis"
stad = 'Stockholm'

Ett heltal (int) är ett helt tal utan decimaler, utan citationstecken.

ålder = 25
antal_liv = 3

Ett decimaltal (float) har en decimalpunkt. Python använder punkt, inte komma.

pris = 14.90
hastighet = 98.6

Ett booleskt värde (bool) är antingen True eller False, exakt så stavat, med stor begynnelsebokstav.

är_inloggad = True
spelet_slut = False

true och false med små bokstäver ger NameError, Python tolkar dem som okända variabelnamn, inte booleska värden.

Citationstecknens kritiska roll

25 och "25" ser identiska ut för ögat. För Python är de fundamentalt olika. Testa:

Editor

Redo.

Den första utskriften fungerar: a är ett heltal och 35 skrivs ut. Den andra kraschar: b är en sträng, och + mellan en sträng och ett heltal är inte tillåtet.

Titta noga på utskriften: c syns aldrig. När Python stöter på ett fel avbryts programmet omedelbart, ingen kod efter felet körs. Ta bort raden print(b + 10) och kör igen, först då får sista raden chansen.

Namnge dina lådor

Python låter dig döpa variabler nästan hur du vill. Men bland Pythonprogrammerare finns en stark Konvention En överenskommelse som ingen tvingar dig till men som alla ändå följer. Python stoppar dig inte om du bryter mot en konvention, men den som läser din kod förväntar sig att du håller dig till den. Se: Lådor i RAM & datatyper , alltså en överenskommelse som ingen tvingar dig till men som alla ändå följer: snake_case Pythons namnkonvention för variabler: gemener med understreck. Definierad i PEP 8. Se: Lådor i RAM & datatyper , gemener med understreck som separator.

antal_spelare = 4
spelare_namn = "Kalle"
är_spelet_aktivt = True

Bra variabelnamn beskriver vad lådan innehåller. x säger ingenting. poäng säger allt. Och ibland räcker inte ens namnet: hastighet = 98.6 är tydligt först när alla vet om det är km/h eller mph.

Det låter petigt, men oklarhet om vad ett värde betyder har fällt större saker än en skoluppgift. 1999 brann NASA:s rymdsond Mars Climate Orbiter upp: ett team räknade i newton, ett annat i amerikanska pound-force. Samma tal betydde olika saker i två delar av systemet, och sonden kom in mot Mars på fel höjd.

En variabel kan uppdatera sig själv

En variabel behöver inte ha samma värde hela programkörningen. En rad med ett likhetstecken är en Tilldelning En rad med ett likhetstecken, som ger variabeln ett nytt värde. Körs raden om, till exempel inuti en loop, sätts värdet om varje gång. För en lista betyder det en helt ny lista, till skillnad från en metod som .append() som ändrar den lista variabeln redan har. Se: Inventoryt som glömmer , och den kan köras om med ett nytt värde som räknats fram ur det gamla. Etiketten sitter kvar, innehållet i lådan byts ut.

Editor

Redo.

poäng += 10 är kortform för poäng = poäng + 10. Det kallas Utökad tilldelning +=, -=, *= med flera. Kortform för variabel = variabel + värde. poäng += 10 är identiskt med poäng = poäng + 10. Se: Lådor i RAM & datatyper och finns för alla räknesätt: -=, *=, /=. Du kommer använda += mycket när du räknar saker i loopar.

Uppgift: Från sandlådan till VS Code

Nu tar du det du testat i sandlådan och gör det i VS Code.

  1. Skapa filen variabler.py. Skriv fyra variabler i korrekt snake_case, en str, en int, en float och en bool. Välj värden som beskriver dig.

  2. Skriv ut varje variabels värde med print(). Lägg till en rad per variabel som också skriver ut dess typ med type(). Totalt åtta rader utskrift.

  3. Lägg till tre rader som testar +=: skapa poäng = 0, öka med += två gånger och skriv ut poängen efter varje ökning.

  4. Kör filen i terminalen med python variabler.py och kontrollera utskriften.

  5. Gå till Source Control-panelen i VS Code. Stagea variabler.py, skriv ett commit-meddelande och pusha.

Vad händer om

Skriv print(True + True) och kör. Vad skriver Python ut, och varför är det svaret?

Motivera & reflektera

Välj en av dina variabler och motivera i en kommentar varför du valde just den datatypen. Vad hade gått fel med en annan typ?