Ett tag tillbaka blev jag introducerad till vad som har blivit mitt # 1 favoritprogrammering / skriptspråk: Python. Det är svårt för en språkutvecklare att komma på något som är både kraftfullt och lätt att skriva, något som flyter naturligt och låter dig fokusera på vad som är viktigt i din kod. Python gör det här vackert. Det gör bara rätt sorts antaganden, så att du kan fokusera mer på vad ditt program ska göra istället för exakt hur det ska göras. Det finns ingen oro om minneshantering, variabel typing eller de sprängda semikolonerna, du bara tänker på logiken i din ansökan.

Python tar några ganska stora avgångar från några av de mer traditionella språken som C / C ++, passar bättre med de dynamiska språken som Ruby, Smalltalk och till och med Javascript. Möjligheten att snabbt och enkelt klara komplexa uppgifter i Python har till och med varit föremål för några bra webbserier.

Obs! Python är ett tolkat språk, tolken kan laddas ner här. Alla exempel i denna guide är skrivna för Python 3.0, som inte är helt bakåtkompatibel med tidigare versioner. Om du har problem med att köra exemplen, kolla din Python-version.

Att driva exemplen

Jag kommer att inkludera olika exempel i hela den här guiden. När du har installerat Python 3 tolken (se till att det är Python 3) kan koden köras på två sätt:

Skriptfilen

Du kan kopiera / klistra in hela texten i exemplet koden i en textfil. Python-filer slutar typiskt i .py. Öppna kommandotolken och kör Python körbar följt av namnet på filen. På min Linux-maskin kör jag:

 python3.0 myfile.py 

Detta borde vara ungefär samma för Windows och Mac, även om du kanske måste ange hela sökvägen till Python tolken, t.ex.

 C: \ Python30 \ python.exe myfile.py 

Interaktiv tolk

Python kan också köras i interaktivt läge, där du kan skriva in kommandon en i taget för att se hur den svarar. Det här kan vara mycket användbart vid felsökning, eller vid utprovning av nya saker. Kör Python körbar på egen hand, utan någon skriptfil, och den öppnar den interaktiva prompten.

Ctrl-D kommer att lämna tolken.

blank

En av de mest ovanliga aspekterna av Python är dess användning av blankutrymme för att indikera block av kod. I stället för att börja och sluta, eller gruppera med parentes, använder Python mängden indryckning för att berätta hur man hanterar block av kod för looping och sådant. För många som kommer från andra programmeringsspråk verkar detta som galenskap. När du väl blivit van vid idén, blir den dock ganska naturlig och tvingar din kod att vara tydlig och läsbar. Vi alla indent kodblock i alla fall (eller åtminstone ska) så det är bara meningsfullt för språket att förstå att uttalanden som alla är upptagna tillsammans är en del av samma block.

Som en extra fördel är Python inte picky om hur mycket du gillar att dra in eller om du föredrar flikar eller mellanslag. Du kan använda en flik, ett mellanslag, två mellanslag, 137 mellanslag, Python bryr sig inte om. Allt du behöver göra är att vara konsekvent. Det kommer att kolla din kod och se "Det första kodblocket är inryckt med 4 mellanslag, så jag antar varandra blocket är inrymmt av ytterligare 4 mellanslag" eller vad som än är fallet. Så länge du är konsekvent i det sätt du anger din kod är Python tillräckligt flexibel för att förstå. Följande exempel kan hjälpa till att rensa upp saker.

 1 2 3 4 5 
 x = 0 medan x <10: print (x) x + = 1 print ("Allt gjort") 

Kodsuppdelning: Medelslingan berättar Python att köra följande kodkod så länge vissa villkor är sanna. I detta fall är villkoret att x är mindre än 10. Det fortsätter att slingra över det blocket tills x träffar 10. "x + = 1" översätter till "x = x + 1" eller "gör x större med 1 ". Observera att den sista linjen inte kommer att springa till dess att slingan är klar. Python ser de indragna linjerna och behandlar dem som grupp av kod som ska köras på varje resa genom mellanslangen. Slutlinjen är inte indragad med de andra, så Python verkar inte på den tills dess att slingan är klar.

Dynamisk typing

Python kräver inte att du definierar vilken typ av data som kommer att vara i en variabel. Du kan ange ett heltal, en sträng, ett decimaltal, allt du vill ha i en variabel utan att behöva berätta för Python vad det är. Python kommer att räkna ut, baserat på vad du tilldelar, vilken typ av data den variabla ska hålla. Följande exempel ska visa:

 1 2 3 4 5 6 7 8 
 x = 0 skriv ut ("x är a:", typ (x)) x = 3, 14 skriv ut ("x är a:", typ (x)) x = "Hello" x)) x = [1, 2, 3, 4] print ("x är a:", typ (x)) 

Vilket ger oss produktionen nedan

Data struktur

De tre datastrukturer som du brukar använda i python är

  • listor
  • tupler
  • ordböcker

listor

är mycket som arrays på några andra språk. De är en endimensionell sekvens av objekt (men tekniskt kan du ge dem så många dimensioner som du vill). Varje objekt i den listan kan ändras, flyttas och tas bort på vilja utan att behöva återskapa listan och utan att orsaka någon ändring av de andra objekten. Listor kan innehålla något Python-objekt, oavsett om det är ett tal, en sträng, även andra listor. Följande kod visar en viss grundläggande användning av listor.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
 #create en lista med några exempel på objektet myList = [1, 2, 3, 4, 5] #len () ger en räkning av hur många objekt vår lista har skrivit ut ("myList har", len (myList), "poster . ") Artiklarna i en lista behöver inte vara av samma typ myList.append (" six ") myList.append (" seven ") myList.append (8) # Vi har bifogat tre nya objekt till slutet av listan skrivs ut ("myList now has", len (myList), "items.") #Nå låt oss se artikelnummer 0 (första stycket) skriv ut ("första objektet:", myList [0]) Det fjärde objektet skrivs ut ("fjärde artikeln:", mylist [3]). Sedan pop den sista delen ur listan skriv ut ("och slutar med", myList.pop ()) print ("myList now has" myList), "items.") #And se vad vi har gjort skriv ut ("Det fullständiga innehållet är:", myList) 

tupler

Jag kommer inte att täcka tuples mycket, eftersom de inte kommer att användas som vårt exempelprogram och de liknar listor på många sätt. Tuples, som listor, är en serie samlade grupper. Skillnaden är att tuples inte är mutable. Du kan inte göra ändringar på plats i objektet i en tupel, du måste återskapa tupeln. Detta betyder ingen "append" eller "pop" eller andra saker som direkt gör ändringar i innehållet i tupeln. Om det hjälper kan du tänka på tuples som en skrivskyddad lista (men det är verkligen inte så exakt).

ordböcker

Dessa älskar jag. När jag först lärdes om ordböcker, kommer jag ihåg att tänka på något i linje med "Jo .. Jag GUESS som kan vara användbar ... ibland". Inom en vecka använde jag dem varje chans jag fick.

I Python är ordböcker nyckel: värdepar. Det är ungefär som en lista förutom att varje artikel har två delar, en nyckel och ett värde. I det följande exemplet kommer jag att skapa en ordlista för att hålla information om mig själv.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
 myDict = {} # Nyckelvärde myDict ["Name"] = "Josh" myDict ["Occupation"] = "Computer Geek" myDict ["FavFood"] = "Hani Special (ingen sallad)" myDict ["FavBand"] = "Något annat än B-52s" myDict ["Heroes"] = "Tom Waits, Kurt Vonnegut, SpaceBat" myDict ["FavNumber"] = 3.141592 myDict [42] = "Det är också ett bra nummer" ", myDict [" Name "]) print (" Mina hjältar: ", myDict [" Heroes "]) print (" Min favoritnummer: ", myDict [" FavNumber "]) print (" Vad tycker jag om 42? ", myDict [42]) print () # Nu ändrar jag mitt favoritnummer utan att skapa en # helt ny ordbok myDict [" FavNumber "] + = 100 skriv ut (" My New Favorite Number: ", myDict [" FavNumber " ]) 

Några saker borde vara tydliga från exemplet. För det första kan ordböckerna blanda och matcha data av vilken typ som helst. Dina nycklar och värden kan vara allting. Du kan till och med bli riktigt galen och sätta saker som funktioner i ordböckerna, men det ligger långt ifrån denna handbok.

För det andra är ordböckerna mutable. Du kan lägga till och ta bort objekt på flugan utan att återskapa ordlistan eller påverka andra objekt.

Om du fortfarande inte är säker på användbarheten av ordböcker, överväg att använda dem för att spåra en användares inställningar. Du kan ha en ordbok som heter inställningar och lagrar saker som användarnamn, ip-adress och skärmupplösning. När som helst du behöver hänvisa till den data kan du bara dra den från inställningar ["användarnamn"], eller vilken annan nyckel du har angett.

Ta med allt hemma

Nu ska vi komma till den verkliga åtgärden, skapa ett användbart Python 3.0-program. Vad detta program kommer att göra är att ta ett nummer som representerar pengar, och berätta hur mycket fickväxling skulle göra det beloppet. Det är en ganska vanlig kodningsträning och är ett bra sätt att visa de begrepp vi har täckt hittills.

Jag skulle nu berätta att detta program inte kommer att skrivas på "bästa" sättet, mitt syfte är att skriva det med de mest grundläggande begreppen och operationerna som är möjliga. Det finns flera "bättre" sätt att skriva detta, så att använda funktioner och moduloperatören, inklusive felkontroll, men den här versionen ska vara ganska lätt att förstå.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 
 #Get kontantbeloppet totalt = inmatning ("Ange kontantbelopp i dollar: $") #Reading från textinmatning antar text, så konvertera #to decimal och multipla med 100 så vi kan räkna med pennies # (enklare matte på sätt) pennies = float (total) * 100 #create ordlista för att hålla våra förändringsvärden ändra = {"kvartaler": 0, "dimes": 0, "nickels": 0, "pennies": 0} #Skapa tills alla pengar har redovisats medan pennies> 0: #Trakt varje mynt från summan, lägg till 1 för att räkna # för varje mynt och starta om igen efter att ha räknat om pennies> = 25: change ["quarter"] + = 1 pennies - = 25 fortsätt elif pennies> = 10: ändra ["dimes"] + = 1 pennies - = 10 fortsätt elif pennies> = 5: ändra ["nickels"] + = 1 pennies - = 5 fortsätt annars: ändra [pennies]] = int pennies = 0 #Finalt, skriv ut våra resultat skriv ut ("Q:", ändra ["kvartaler"]) skriv ut ("D:", ändra ["dimes"]) print ("N:", ändra ["nickels"] ) print ("P:", ändra ["pennies"]) 

Kodsuppdelning: Vi använder inmatning för att få en summa pengar från kommandoraden. Python antar att det som skrivs in är en textsträng, i motsats till ett tal, så vi måste berätta att det konverteras till ett användbart nummer. Vi kunde ha lämnat numret ensamt (dvs. 15.95), men istället konverterade vi det till pennies (multiplicera med 100) för att göra matematiken enklare så att vi inte skulle behöva oroa sig för decimalpunkter.

Därefter skapar vi en ordlista för att hålla resultaten från vår dator. Om det här var ett mer komplext program, kunde vi vidarebefordra den här ordlistan till våra funktioner, klasser etc. utan att oroa oss för att hålla reda på separata variabler för varje typ av mynt.

Därefter kommer det verkliga arbetet - att splittra våra pengar totalt i enskilda mynt. Det här programmet använder en stundslinga för att fortsätta cykla tills vi inte har några pengar kvar från vår ursprungliga ingång. Varje resa genom slingan ser på summan av pengar, subtraherar det största myntet det kan och startar om slingan. I stället för att göra subtraheringar om och om igen, skulle det här programmet troligen vara mycket effektivare om vi hade använt moduloperatören, men subtraktionen är lättare att förstå.

När vi är färdiga med slingan är allt som finns kvar att visa våra resultat.

Python kan för långt mer än jag skulle kunna täcka här, men jag hoppas att jag har kunnat visa principerna om hur det fungerar och hur det kan användas för att snabbt och enkelt skapa verktyg som skulle vara mycket mer komplicerade i en mindre intuitivt språk.

Om någon är så nyfiken som jag handlade om hur man korrekt uttalade "tuple", var jag lycklig att få möjlighet att fråga Guido van Rossum själv om det var "toople" eller "tupple" och han gav det något otillfredsställande svaret "Det är vad du vill."