ROSS RHEINGANS-YOO: Hei, jeg er Ross.
Og dette er en CS50 seminar.
Det vil ta deg fra programmering i C til programmering i Python.
>> Python er et skriptspråk.
Det er i stor grad som C i syntaks, men noen
av de tekniske detaljene for hvordan det syntaks blir henrettet
er litt annerledes.
Det er mindre kraftig enn C på noen måter.
Det er mindre uttrykksfulle for hvor på datamaskinen
minne blir lagt ut, hvor det blir lagt ut,
når det blir frihet, og disse slags ting.
>> Det er mer nyttig enn C på noen måter, fordi det er lettere å programmere i.
Språket er til en viss folk, mer intuitive.
Og egentlig er målet for det å være raskere å programmere
og potensielt tregere til å utføre.
>> Nå hvis du tenker på tiden
du har brukt på den siste Problemet satt skriving
koden mot Hvor lang tid du bruker
på den siste problem satt gjennomføring koden din,
du kan tenke at språket som var dobbelt så rask til å skrive,
og dobbelt så treg til å utføre, kan være en forbedring i forhold til C på noen måter.
Gjerne når du prøver å skrive små programmer til å gjøre små ting,
Python er et nyttig språk av valget.
>> Og ved slutten av denne seminar, håper jeg du vil
være i stand til å gjøre Valget i fremtidige prosjekter
om hvilket språk er korrekt å bruke, ikke ideen
at ett språk er mer korrigere hele tiden.
Et par ting om hva seminaret er.
Dette seminaret er ikke ment å lære deg Python fra bunnen av.
Python er svært lik til C, og jeg antar
at du er en CS50 student, eller noen med en tilsvarende kjennskap til C.
>> Hvis du er CS50 student rundt problemet satt seks,
Så du har ser mange ting i C, vil jeg gi deg
de store forskjellene, og noen av tingene
som gjør Python annerledes og spesiell og nyttig,
men jeg har ikke tenkt å gå for hva et programmeringsspråk er
og hvordan å skrive programmer.
Imidlertid vil dette seminaret lærer du å skrive et Python-programmer
Hvis du er en av de få gruppene.
Igjen vil vi se på hvordan du vil implementere psets--
som bør være 1-6 i Python-- og gir pekere
til offisiell dokumentasjon for fremtidig referanse.
Den andre tingen som er viktig om hvordan denne talen er tildelt,
denne videoen vil være online, courtesy of CS50,
så du bør ikke føle deg som du trenger for å ta notater.
Du kan alltid gå tilbake og se på det senere som en referanse.
Tillegg lysbildene er tilgjengelig akkurat nå
på dette området, noe som bør tar du gjør et Google doc.
Det er en litt forkortet versjon av hva jeg viser på skjermen.
>> En forsiktig forbeholdet før vi hoppe i, Python 3
er et annet språk Python to.
De ser mye det samme; det er veldig små tekniske forskjeller
som vil føre til programmer skrevet i Python 2
ikke å være i stand til å bli utført i Python tre miljøet.
>> Den CS50 apparatet kommer med Python, som standard den bruker Python to.
Du kan sjekke dette ved å typing i kommandolinjen
python --version, som burde utgang 2.7.6 på den aktuelle maskinen.
Prøv Python 3, som gjør arbeide i apparatet,
hvis Python som standard 2.X.Y, enten på apparatet eller på dine egne maskiner.
Du bør bytte Python tre når som helst i dette snakk om at jeg skriver Python.
Hvis maskinen din er kjører to som standard, type
Python 3 for å være i stand til å faktisk følge med og gjennomføre disse tingene.
>> I tillegg vil jeg peke deg ved offisielle ressurser nå.
docs.python.org/3--~~V forsiktig at det er et tre og ikke en 2--
har nyttige referanser.
Opplæringen vil ta deg gjennom mye av de samme tingene
som jeg gjør nå, bortsett fra i tekstform.
Henvisning er nyttig som en referanse for språket,
og Standard Library gir du noen av utvidelser
med ekstra funksjonalitet.
>> Så en aller første Python program.
På venstre har vi standard C, på høyre side, har vi Python.
Du har kanskje gjenkjent dette problemet, er det
en av det første problemet sett i CS50, og disse
løse det ved hjelp av den samme løsningen.
Nå, grunnen til at vi er ser på disse ved siden av hverandre
er slik at vi kan se på syntaktiske forskjeller.
En av elefanter i rommet som du kanskje har lagt merke til høyre
utenfor balltre, er at Python har ingen Hovedfunksjonen innpakning rundt koden.
Så i C, skriver du en haug med filer, link du dem sammen,
og programmet starter utførende på dette som kalles int main.
>> I Python, du skriver en filen du, kjøre filen,
programmet starter utførende på toppen av filen.
Så det kommer til å starte ved toppen av filen
gå ned til det å finne noe annet.
Hvis den finner en funksjonsdefinisjon, det vil faktisk ikke utføre den koden,
Det vil ganske enkelt definere funksjonen.
Men her, da den første Programmet er n er lik 10,
det første at dette programmet vil gjøre er å ta denne verdien av 10
og sette det inn i en variabel kalt n.
>> Snakker om den linjen, en av andre things-- sorry-- dette
betyr at C-programmer, du vil skrive dem,
du vil gjøre dem, noe som vil påberope noen klang kommandoer,
og så får du kjøre en resulterende kjørbar.
Python-programmer, du kjører tekst file-- dette mario.py kanskje
være denne filen som jeg nettopp viste you-- du vil kjøre denne filen
og du vil utføre, og innholdet i det
vil bli utført av Python tolk.
Du kan gjøre dette i din IDE.
>> Så hvis jeg har en Hei-fil, som har rett og slett dette innholdet.
Dette er faktisk Python 2, ikke Python tre, så ikke
bekymre seg om syntaks for nå.
Men jeg skal kjøre Python, på hello.py, og det går.
>> En annen måte som jeg kan bruke Python som Jeg vil ikke forholde seg til så mye i denne talen,
er hvis jeg bare skriver Python, det faller meg inn i et miljø hvor
Jeg kan mate den Python linje for linje.
Så her, hvis jeg skriver i print plass 'Hei, verden ".
Skriv enter.
Det vil spytte meg at sikkerhets resultatene at enkelte linje umiddelbart.
>> Dette kan være nyttig.
I dette foredraget vil jeg gjøre ting på lysbilder.
Og så vil du være i stand til å følge sammen enten her, eller ved å skrive
faktiske filene og deretter kjøre dem.
>> Men, kommer tilbake til dette kode, en annen ting
at du kan ha noticed-- vel, det er
to ting som du kanskje legge merke til om disse blokkene.
Den første, heller mer dagligdagse, er at Python har ingen etterfølgende semikolon.
>> Semikolon er valg overalt og ufarlig overalt.
Du kan legge dem.
Det kan hende at folk som skriver Python for en levende snicker på deg
bak ryggen din, fordi de er ikke nødvendig.
De er ofte et tegn på å bli holdt over fra C. Designerne av språket
føler at det er mer tydelig på denne måten og at det ikke er nødvendig å erklære
hver gang du avslutter en linje.
>> En annen merkelig ting om dette n er den ikke har en type vedlagt.
En av de magiske stykker av Python-- og jeg kommer til å kalle det magi,
men det er meget tekniske grunner til at det
works-- en av magiske stykker av Python
er at variabler kan utvide eller krympe å inneholde hva data
typene du ønsker dem til.
>> Så dette er en 10.
Hvis senere ned jeg tildelt denne n 0,5, ville det ta at 0,5.
Uansett at det er en int her og flyte der, noe som bruker dette n
vil, mer eller mindre, kunne tøffer sammen hvis det blir noen av disse.
Med mindre det er noen svært reell Grunnen til at det ikke kan bruke data
skriver at n har i dag, noe som medførte at det får
kilt og kaste en feil, og disse slags ting.
>> Men her, Python egentlig ikke om hva
det er at jeg kommer til å holde fast i denne setning, som, ønsker du dette?
Denne saken i det?
Ja, det er en slags ting.
Jeg vil holde det til slutt.
Det vil være et problem senere, hvis noen som ønsker å bruke det slutt
ikke kan håndtere det.
Dette er en av de store Forskjellene mellom Python og C
som gjør det enkelt å skrive svært store C-programmer
og gjør det lettere å skrive svært liten Python program.
>> Den for syntaks er ikke veldig forskjellige i hva det gjør.
Det er litt annerledes i hvordan det er uttrykt.
Så dette er en veldig, det som kalles Pytonske, måte å skrive det.
for rad i serien (n), er dette rekke tall fra 0 til n,
inkluderende på bunnen og eksklusivt på toppen.
Slik at det er fra 0 til n-1, som er nøyaktig hva C-kode gjør,
bortsett fra at det er mye enklere å se på kanskje.
>> Den aktuelle blokken er ikke satt av ved tannregulering,
i stedet er det satt av av denne innrykk.
Slik at alle disse linjer er fire plasser over til høyre,
eller som om en elefant bredde.
Og de er de som er kommer til å bli henrettet i dette for.
Hvis jeg rotet opp innrykk på dette og jeg
presse som print tilbake til den opprinnelige innrykk,
at print vil forlate for loop.
I motsetning til C, der her jeg faktisk må flytte som lukket spenne rundt.
>> Det betyr at du ikke får feil som hoppe ut på deg fordi du
sette en spenne på feil sted.
Det betyr at du får feil som hoppe ut på deg fordi du
innrykket en linje galt.
Så det gjør innrykk super forsiktig.
Forhåpentligvis du var super forsiktig med innrykk uansett,
og slik at dette ikke er så mye mer en byrde.
>> Men en grunnleggende regel for Python, og vi vil ha et par av disse
at vi vil gå gjennom gjennom I løpet av foredraget,
er å prøve naturlig syntaks før du ser noe opp.
Så dette syntaks, for dette nummeret i serien,
er veldig karakteristisk når det gjelder stil.
Mange ting i Python vi får se tar dette form.
>> Og så hvis du kommer opp med et nytt objekt som du
tror du bør kunne iterere over dette, i dette formatet,
viser seg det sannsynligvis støtter dette formatet.
Vi kommer ikke til å gå super dypt i de tekniske årsakene til at det er sant.
>> Men det er en nyttig intuisjon å ha når du nærmer Python-programmer,
at denne saken er bare kommer til å fungere.
Prøv det.
Boot opp kommandolinjen Tolk, se om det fungerer,
gå videre med ting, før du engang trenger å åpne opp Google og si:
hva er syntaksen for denne tingen?
Massevis av Python du kunne oppdage bare ved å prøve.
>> Dette er enda mer hvis lik til C da de fors er.
Legg merke til at det er ingen parentes.
Parentesene er, igjen, ufarlig, men unødvendig.
Det er et kolon ved enden akkurat som for looper,
og igjen er de relative blokkene innrykket i stedet satt av bukseseler.
Det annet er at den opprinnelige nivå av innrykk,
og dens relevant blokk rykket inn igjen.
De fungerer nøyaktig som de gjør i C.
>> Dette er faktisk svært mye den samme.
Igjen, mister print ett tegn ut av printf Du passerer noen strenger.
Det viser seg strenger kan enten være merket av
med apostrof eller doble anførselstegn.
Det er ingen forskjell, bortsett fra at innsiden
av apostrof du kan bruke doble anførselstegn med svikte,
snarere enn å måtte slippe dem alle.
Og inne i doble anførselstegn, du kan bruke enkle anførselstegn med svikte
uten å måtte slippe dem.
Hvis du ønsket å blande dem, kan du sikkert
slå opp på nettet hvordan du gjør det.
>> Du vil merke at over her, Jeg har gått på slutten = denne tingen.
Dette er et eksempel på en valgfri argument, som er en av de ting
at Python støtter at gjør det ganske nyttig.
Så print har faktisk mye av argumenter, som vanligvis
satt til standardinnstillingene verdi, men her har jeg
bestemte seg for å overstyre den som heter slutten.
Grunnen til at jeg må overstyre den med en tom streng
er at print i Python, etter standard skriver ut en ny linje
etter ting som du fortalte det også.
>> Så dette hash faktisk kommer til å skrive ut en hash i en ny linje.
Og hvis jeg ikke vil at hasj for å skrive ut en ny linje etter det, så må jeg si
ikke ut en.
Men, likevel så, den siste tingen som Dette programmet mangler at man har er
en inkluderer på toppen.
Utskriften er bakt inn i Python så i utgangspunktet at det er ingen header eller modul
at du trenger å inkluderer, men hvis ønsket
til å omfatte andre ting i et Python-skript,
Jeg ville gjøre det i en svært lik format-- ordene er bare litt annerledes.
>> Jeg nevnte at vi trenger ikke en hoved her,
fordi Python starter utførende på toppen.
Hvis jeg ønsket å vikle dette i en funksjon, I
ville gjøre det som dette-- jeg vil si funksjonsnavn def,
argumenter kan gå inn her og vi vil se noen av dem senere, tykktarm,
og deretter igjen, denne Hele satt av blokk
er det som er operativt blokk for den aktuelle funksjonen.
Så dette er definisjonen av funksjonen.
Og det er en erklæring, deretter ned Herfra kan jeg bare ringe funksjon.
Og igjen, programmet tolk, som starter på toppen,
vil se dette er definisjonen.
Det vil ikke gjennomføre dette før det komme hit, og da er det like, oh
nå har du kalte det, jeg tror jeg skal kjøre den.
>> En ting som er veldig vanlig å se i Python-filer,
spesielt Python-filer som frigis til offentligheten
og utviklet by-- og utviklet og vedlikeholdt, er noe av dette skjemaet.
Dette er basically-- slik fordi Python, starter du på toppen
og deretter kjøre ned til bunnen, Jeg hvis jeg bare hadde Mario kalt ut her,
da helst jeg tatt denne filen i en annen fil, fordi jeg ønsket å bruke
er Mario-funksjon, som andre ville filen har også denne samtalen til Mario i det.
Og når jeg kjørte denne filen, det ville kalle Mario.
>> Så det er mulig at jeg bare ønsker å kjøre dette hvis jeg har faktisk
henrettet denne filen.
Og så jeg kan bryte dette i en idiom som dette, hvor jeg sier,
hvis navnet på denne henrettelsen miljø er hoved,
så jeg ønsker å gjøre disse tingene.
Ellers noen andre kan use-- inkluderer min function--
filen min, og bare for å få tilgang til disse funksjonene
uten å måtte kjøre de tingene som jeg ønsker å kjøre i denne filen.
Dette er, igjen, valgfritt men svært vanlig.
>> Disse tingene er entirely-- er akkurat det samme mellom C og Python,
i hvert fall i tre.
Jeg tror i 2, divisjon operatør noen ganger gir deg tilbake flyter når
du operert ints, og enten du ønsket det, eller du ikke.
Men pluss, minus, og tider fungerer akkurat som du forventer,
unntatt over litt flere typer.
Så du kan mangedoble flåter på ints, og disse slags ting.
>> sett fungerer akkurat det samme.
Du kan bruke to like tegn.
inequals-- større enn, mindre enn, disse slags things--
har de betydninger som du er kjent med dem.
>> Hvor C bruker disse operatørene, Python bruker litt mer engelsk
lesbare seg.
Så i stedet for to,-tegn, du bokstavelig skriver ordet "og", "eller"
eller ikke."
Som i ditt if-- i din betinget utsagn,
Vi så tidligere at dette syntaks i C tilsvarer dette syntaks i Python.
Og det er ikke mye annerledes der, med unntak av en liten bit
tegnsetting rundt sidene.
Igjen, der C ville ellers hvis bruker Python elif,
men disse er for det meste overflaten nivåendringer.
>> Iterasjon som dette er ofte skrevet i denne idiom i Python.
Du kan produsere denne typen ting med en stund sløyfe på utsiden
hvis du ville, men du absolutt ikke må.
Og igjen, hvis du ønsket skrive ut elementer i en matrise
du kan gjøre det på denne måten.
En av de morsomme tingene om Python skjønt,
er at du ikke trenger å bruke dette paradigmet,
og du kan bruke en litt mer elegant en.
Du sier for en i ær.
>> Så heller enn å gå her og kjører over indeksene,
og deretter trekke ut enkeltelementer,
du fortelle for å faktisk bare kjøre over elementene selv.
Og så uansett hva du gjør innsiden kan operere direkte
på elementene, som er ganske morsomt.
Og vi vil see-- vi skal bruke at idiom igjen og igjen
som vi går gjennom koden.
>> Dette er igjen et eksempel av noe som jeg vil
kalle Python magi, selv om det er svært tekniske årsaker til at det fungerer.
Og det er tekniske ting som trenger å være sant om matrise for
for å jobbe bak kulissene.
Saken er at de fleste typer som du forventer at dette skal fungere
har hatt dette implementert for du i den innebygde språk.
>> En annen ting som det ville være hyggelig hvis dette har fungert på alle språk,
men det er noen grunner til at det ikke kan, skrive ut denne strengen ganger dette nummeret.
Slår ut i Python, dette gjør akkurat hva du vil, som er bare moro,
og betyr at vi faktisk kan redusere dette programmet, igjen mario.c.
Snarere enn itera mye, kan vi bare si, jeg vil ha litt antall plasser,
Jeg vil antall hashes, og noen hashes på slutten.
Og igjen, vi bruker dette formatet.
>> Her er vi passerer i en variabel på denne måten.
Igjen, trenger vi ikke å si hvilken type variabel er det,
og den eneste gangen vi vil få feil er under kjøring.
Når noen forsøker å passere noe i,
det vil komme inn i funksjonen helt fint.
Hvis vi kile her, fordi dette ikke er ting som du kan lage serier over,
Jeg får en runtime error der, og jeg må feilsøke det på den måten.
Men i mellomtiden, jeg har ikke å være veldig forsiktig med hva
blir sendt på, så lenge som i selve gjennomføring av det hele fungerer veldig renslig.
>> Jeg kan selv gjøre dette litt renere
ved hjelp av en spesiell innebygd funksjon på strenger, er som Høyre Begrunn.
Dette er bare en nyttig funksjon liggende rundt i biblioteket.
Det er i dokumentasjonen hvis du går og ser etter den.
Og jeg sier, vel jeg kommer til å ha denne strengen, noen antall hashes,
og jeg vil gjerne høyre rettferdig it-- pad den ut med mellomrom for å være denne lengden.
>> Igjen, dette er i dokumentasjon, som bringer us--
Jeg skal faktisk klikker gjennom these-- som bringer oss til vårt andre regelen
for Python-- standard bibliotek funksjons metoder er dine venner.
Og det er ofte verdt mens å gå på jakt etter jeg lurer på
hvis det er en ting som bare gjør dette.
Det er sannsynligvis.
Hvis du ønsker å pad ut en streng, hvis du hadde
gjerne benytte iden halvparten av en streng, hvis du hadde
å søke gjennom en streng, hvis du ønsker å knuse et par ting
sammen med en streng med komma mellom dem,
det er standard bibliotek funksjoner for å gjøre dette.
>> Og det gjør livet ditt enklere hvis du bruker dem
i stedet for å rulle ut alt på egen hånd
i fem linjer med kode her, fem linjer med kode her.
Som virkelig starter på legge opp til fast tid.
>> En av de interessante tingene om hvordan dette blir kalt.
Du vil merke at det er en prikk ting.
Jeg har noen objekt til venstre, og da jeg ringte en prikk en funksjon.
Dette er en av de paradigmer som Python bruker for å feste metoder til objekter.
Vi skal snakke om hva dette er meget kort i enden,
men vet at vi både kan operere på ting ved å ta den tingen å si prikk
uansett, eller ved å ringe en funksjon som tar
som objekt og noen andre argumenter.
>> Så disse er begge måter som ting blir gjort i Python.
Og om en bestemt funksjonaliteten er implementert
i denne stilen, eller dette stilen er noe du
bør se opp til du får en hang for hvilken det er sannsynlig å falle inn.
Det er en mer eller mindre sammenhengende filosofien bak Python
at du absorbere det meste ved å skrive mye i det.
På et tidspunkt, som en av disse noe skal gjennomføres som
blir naturlig.
For nå, det er bare noe du lærer som du finne ut
hver enkelt ting.
>> Så standard bibliotek funksjonene er dine venner,
og de lar deg skrive ting som ta opp så mye plass egentlig kort tid,
virkelig elegant.
Og dette er faktisk trolig mer leselig, vil jeg si, enn C-program
der borte.
For ikke å nevne det faktum som er så Kort sagt kan du passe en hel elefant
i rommet som vi har spart.
>> En annen ting, er dette en implementering av mario som er prikk C, som jeg tror
er den korteste du kan få det.
Det har ikke get int, men det harde koder verdien av 10
på samme måte som dette gjør.
Det viser seg at denne og klokker inn på 84 tegn, mens Python er 64.
Og dette er uendelig mer lesbar enn denne søpla her.
Så Python er mer effektiv i verdensrommet.
Det er litt mindre effektiv i tid, men ikke med mye.
>> Lister er en viktig ting i Python.
Vi har ikke sett dem, men de operere mye som arrays gjøre i C.
Så her kan du erklære dem, du kan sende dem til en ting.
Nå rutene har en utvalg av disse tingene.
Igjen, vi har ikke erklært som type, men hvis vi noen gang prøver å bruke det,
noe som du forventer å arbeide på en rekke heltall
kommer til å jobbe med en rekke heltall.
>> Dette er en ting som du absolutt ikke kan
do i C, fordi minne det er så hender på,
men er veldig lett å gjøre i Python.
Hvis jeg vil ha min rekke å bli større, kan jeg legge et element til det, og det er greit.
>> Hva som skjer bak kulissene?
Tolken vil gå ut og få litt minne,
og kanskje det vil få en litt ekstra minne,
så jeg vet ikke, så jeg har ikke til realloc hver gang.
Men hvor mye har mer minne trenger det?
Dette er ikke beslutninger at du har å gjøre,
disse er avgjørelser som de tolk kommer til å gjøre.
>> Her ser vi utvalg kan ta to argumenter,
men det er fortsatt kommer til å være inkluderende av toppen så vi legger en der.
Dette er et uttrykk som er en enda mer smart måte å skrive ting som dette.
Det kalles liste forståelse, og her er hva vi sier
er jeg ønsker å sette inn i squared for hver verdi av jeg i dette området.
Denne saken til høyre kan være en annen array, og denne tingen på venstre
være en hvilken som helst spesiell funksjon som ville ta i jeg som en variabel
og gi meg ut noen resultat.
>> Hva jeg skal gjøre er, Jeg kommer til å konstruere
en matrise som er alle disse tingene for hver verdi i dette området.
Og dette er super elegant, super kort, og det er helt klart hva det betyr.
Dette er en av de things-- dette er igjen,
én of-- svært illustrerende for den grunner til at folk som Python.
Hvis du liker programmering som dette, så Python
er et språk du kanskje har lyst til å lære.
>> Og igjen, det er teknisk grunner til at dette fungerer.
Men så langt som vi er opptatt av, vi mer eller mindre ikke bryr seg.
>> Så hvis du ønsker å skrive ut lister, noen av de samme idiomer er nyttige.
For jeg i dette området, vi kunne indeksen gjennom alle de tingene
og deretter skrive dem ut.
Og du vil se len her.
Hvis du noensinne har ønsket å få lengden av matrisen, som er
veldig lett i Python, det er veldig vanskelig i C.
Dette vil skrive ut nøyaktig hva du forventer det til.
Vi kan også, som vi har sett før, iterere over elementene i matrisen
direkte, og deretter bare snakke om dem, snarere enn å ha indeksen
tilbake i matrisen hver gang.
>> Og dette er en ting som du kan gjøre.
Så i C, hvis du ber om noe som dette, ville print si,
det er en rekke heltall.
Det er definitivt ikke en string, jeg kan ikke skrive det ut.
Python mer eller mindre ikke bryr seg.
Det er som, er det en måte at jeg kunne slå dette til en streng?
Ja, jeg vil gjøre det.
Og så jeg skal bare skrive det ut.
Dette betyr at du kan gjøre ting like-- disse
er de fleste av de harde delene spill av femten skrevet
veldig kort i Python.
>> Du vil se at det er litt of-- her
Jeg har kastet et heltall til en streng, og jeg må gjøre det manuelt.
Og jeg kommer til å legge den til en annen streng,
eller på annen måte Python blir forvirret.
Men om når du er tilsetning av en streng til et helt tall,
Jeg er vel å få en heltall tilbake eller en streng tilbake?
Men igjen, hvis du bare kalle str på en ting,
og det kan i noen mulig verden bli konvertert til en streng,
det vil trolig være omdannes til en streng.
>> Her ser vi bruk av nestet liste forståelse
til venstre, noen indeksering, som er akkurat som du ville bli vant til det,
og noen skriver ut av ting.
Igjen har vi definert noen funksjoner og vi kaller dem ned
i hoved når vi faktisk får filen.
avkastning fungerer akkurat som du ville forvente fra arbeid med C. Finn,
vi kan sette opp ting som dette-- her er listen forståelse
det er et oppdrag til en variabel, og vi kan faktisk gjøre det enda enklere.
Vi trenger ikke å skrive søk, fordi innebygd i språket
er hvis denne saken er i denne matrisen.
Return true, ellers returnerer false.
Så det er helheten av funn.
>> Helheten av slag innebærer ringer sortere,
som er-- det er implementeringer av dette er innebygd i visse C-biblioteker.
Hvis du ønsker dette slags baklengs, du
kan overstyre dette valgfritt argument i revers med en sann.
Og hvis du ønsker å sortere i løpet strenger, er det innebygd i tillegg.
>> Så dette er ikke å si at disse er ting som du trenger å gjøre hver dag,
men ideen er at dette er filosofien til Python,
at alle disse tingene som du ville slags ønsker å gjøre er innebygd.
Og de fleste vanlige funksjoner, så sort, lengde, uansett,
støtter mest logisk fornuftige innspill.
Du kaller len på en rekke samme Måten du kaller len på en snor.
Du multiply-- du sortere strenger på samme måte som du sortere arrays.
>> De fleste standard funksjoner at folk bygge,
og de fleste tredjeparts biblioteker som folk
bygge, fordi de er emulere utformingen av standard bibliotek,
kan kalles på alt som du er liker, hvorfor ikke dette bare fungere,
i C. Mer eller mindre, det vil fungere i Python
fordi folk jobber bak til figuren ut hva en ting er og deretter operere
riktig på det.
Så igjen, teknisk bakgrunn, men det gjør livet lettere som programmerere.
>> Så her er fil I / O. fil I / O har mange små ting som gjør det komplisert,
og så er det ressurser på nettet, men i et nøtteskall,
du kaller åpen på en fil navn med en spesiell type.
Så det er å lese, lese og skrive, skrive eller legge.
Du leser et visst antall figurer ut og du skrive ut disse,
du får Hello!
Jeg mener, i likhet med denne filen hadde Hello!
I det, ring til å lese, og hva du får tilbake
er en streng som har alle av resten av matrisen,
eller alle av resten av filen.
Hvis du ringer lese igjen, du er på slutten av filen,
og slik at du ikke får noe og så du vil lukke.
Igjen, dette er .close fremfor tett i filen, slik det ville være i C.
Dette er mer eller mindre fordi f er et ting, og du ønsker for f å lukke.
Men grunnleggende fil I / O er ikke spesielt komplisert.
Igjen, hvis du ønsker å åpne en fil, hvis du ønsker å lese en bestemt linje,
du kan få ut av denne line-- det innebygde moduler for det.
Hvis du ønsker å skrive en ting, kan du skrive dette.
Hvis du ønsker å skrive ut individuelle biter, kan du skrive dem.
Og hvis du ønsker å veksle over linjene i en fil
individuelt, slik vi gjorde i et stykke fra for noen uker siden, kan du gjøre det til.
Igjen, de fleste objekter som du vil å være i stand til å iterere over
støtte itera over dem.
I Monty Python, er en fil kanskje en ting som Jeg ønsker å iterere over linje for linje.
Hvis det var en ordbok av ord, og jeg var
prøver å få de individuelle ordene ut, da, i denne sløyfen,
linje det kommer til å være hvert ord i tur og denne
kommer til å bli henrettet for hver linje i filen frem til slutten av filen.
Og igjen, hvis jeg skrevet ut hver linje, linjene kommer med nye linjer,
så jeg sette slutten tilbake til noe slikt.
Da jeg skulle få innholdet i filen min.
>> Den andre tingen som opererer i noen måter som lister, og på noen måter
som noe vesentlig kraftigere,
er ordbøker som er virkelig kult å bruke, men er i utgangspunktet hasj
tabeller i forkledning.
Du opprette en bruker nøyaktig to tegn, som er kjempebra
Hvis du prøvde å implementere hash table for ditt problem sett,
du vet mye smerte som kan være.
Men folk har gjort det, og gjort det så bra,
at du ikke trenger å bekymre deg for det lenger.
>> Deretter kan du sette inn enkelte ting.
Hash tables-- eller ordbøker ikke spesielt
bryr seg hva du lagrer i dem.
Så hvis noen oppføringer er tall, og noen oppføringer er lister,
hvis noen oppføringer er andre ordbøker, og noen oppføringer er strenger,
Python ikke mye omsorg.
>> Igjen, hvis du går inn i det ventet en streng og hva du får tilbake
er en matrise, som er problemet.
Og kanskje det er feil av hvem Trodde det var å sette ting
i ordboken, kanskje det var deg.
Hvis det var noen annet, forhåpentligvis de var
veloppdragen om hva skulle i ordlisten
og har ikke gitt noen fallgruver for deg å falle i.
>> Men de vanlige funksjonene vil gi deg tilbake veloppdragne ting.
Så de sier dette returer sikkerhets en ordbok av strenger,
så alt du kommer å komme seg ut av en streng.
Hvis du gjør noe av dette, og det turer deg opp, vel, som kan være på deg.
Python sikkert gir deg nok tau til å henge deg selv, hvis du vil.
Nå kan vi skrive ut individuelle elementer av dette og dette returer
akkurat det du forventer.
Nøyaktig hva du forventer, antar jeg, er en setning som jeg bruker mye,
men det er mer eller mindre hvordan Python fungerer.
Hvis du ber om en ting som ikke er det vil Python kaste ut en feil
og det vil slutte deg ut av det programmet du var i.
Det vil faktisk skrive ut mer informasjon enn det,
det vil peke you-- det vil legge til en linje, og så.
>> Og, igjen, kanskje vi ønsker å iterere over ordbøker
og finne alle tingene i den.
Her er vi gjentar løpet to ting samtidig.
Og så vil vi gjøre det med en nøkkel, verdi, men deretter skrive ut alle disse.
>> Og hvis vi ønsket å cast-- hvis vi faktisk kjørte denne,
vi ville ha noen problemer på grunn on-- når vi gikk inn med David,
det kunne ikke add-- hvis vi ikke kastet det til en streng først,
Vi kunne ikke legge til at matrisen strenger mot en streng.
Men hvis vi kaste det for en streng, får vi noe
som dette, som er kanskje hva vi ønsker å lese.
>> Og dette er stavekontroll.
Vi leser i ting.
Så vi kan lese i enkelte ord som linjer.
Vi hogge av den siste ting, så colon minus 1
chomps av det siste som we-- det siste tegnet av en streng.
Vi vil si.
OK, hver og en av disse får satt inn i denne ordboka,
tilordning til en verdi på en.
Vi gjør ikke spesielt bryr seg om at man,
men det er bare det å si, nåvel, denne tingen jeg skal sette i ordlisten.
Fordi senere hva vi er kommer til å gjøre er at vi er
kommer til å si, vel, hvis det er i ordlisten i det hele tatt.
>> Igjen, denne sjekken for medlemskap er opp drifts
ved hjelp av en helt annen algoritme enn det vil i en liste,
men vi kaller det på samme måte, som er noe av det Python sukkerbelegg
ting slik at de er lettere å bruke.
Og igjen, vi har sett ting som dette før.
Dette er i utgangspunktet finne, eller det er akkurat det samme syntaks
som finne, men opererer over et helt annen struktur.
Og vi ikke særlig omsorg.
Så de er de tingene som du ble bedt om å iverksette for stavekontroll.
På denne prisen, vi kommer til å få mer eller mindre alle de psets gjort.
>> PUBLIKUM: Slik at utgangspunktet bare kommer tilbake
som stavet feil hvis det ikke matche noe i ordboken?
ROSS RHEINGANS-YOO: Ja, ja.
Og så er dette en tilpasning av et oppgavesettet
som ber deg om å gjøre akkurat det.
>> PUBLIKUM: Hvorfor er linjen minus 1 er det?
ROSS RHEINGANS-YOO: So når du itera
over en fil ber om ved linjer, linjene
kommer med en ny linje karakter ved slutten av it minus 1
er bare å handle dem av.
Og dette er en spesielt fleksibel måte å indeksere inn i ting.
Så hvis du har en streng, og du vil, vel jeg er
kommer til å starte på karakteren tre og jeg kommer til å gå til slutten.
3 kolon vil gjøre det for deg.
Hvis du er som, ønsker jeg å starte på begynner og gå til den siste minus 1
karakter, tykktarm minus 1.
Og hvis du ønsket å gå fra tredje til minus første,
så du vil si 3 minus 1.
>> I tillegg, hvis du ønsker å indeksere inn i ting teller fra baksiden,
du bare indeksen på med minus tall.
Og fordi, der C ville eksplodere eller kanskje
mate deg annet minne du ikke har tilgang til, hører du kan si minus 1
betyr det siste, men en tegn i en streng.
>> Moduler er version-- er analoger til bibliotek i C
og er nyttig for mange ting.
Mange ting du hadde liker å gjøre i Python,
foruten enkel manipulering av variabler,
du ønsker å koble inn større bibliotek med større
grensesnitt og mer muligheter for samspill
med andre deler av verden.
sys er en av dem med en haug med verktøy
som er nyttige for samspill med selve systemet
og vil importere den som import sys.
>> Det finnes mer dokumentasjon fra det, som du kan gå her,
eller du kan finne på Google ved googling Python sys.
Du skriver i skriv.
Den første linken kommer til å være dokumentasjonen i Python 2,
den andre linken kommer til å være dokumentasjon Python tre.
>> Og hvis vi skrev ut en fil som så som dette-- Hvis spesielt, vi er
ser på som opererer på kommandolinjeargumenter,
som vi lærte å gjøre veldig tidlig i denne klassen.
Dette er ikke vanskelig. Du kan få ut argv,
som er en av de ting som er implementert av sys.
Det er ikke innebygd i grunnpakken, men igjen, du
kan forlenge den ved å importere den funksjonaliteten fra sys.
Du vil kalle det sys.
samme det.
Her er det argv.
Det er faktisk ikke noe argc i sys, fordi du
kan få det så lett ved å ringe len.
Vi så skrives det ut, så vi kjørte på vår terminal echo-args.py.
Vi får tilbake en matrise, som er dette første argumentet.
Igjen, dette er argv 0, som er navn på ting som ble kalt.
Hvis vi kalte det med ekstra argumenter, ville vi få dem tilbake.
Dette er en måte å få kommandolinjeargumenter.
Hvis du ønsker flagg der du slår spesielle ting på eller overstyring
en bestemt standard, argparse er din venn.
Og igjen du finne at online på python argparse på Google.
>> Det er et par av verktøy moduler som du finner deg selv ved hjelp
og igjen, hvis du bruker litt tid av dette språket importere jsons
for å lese inn og ut av json filer, ikke så komplisert.
Du åpner opp en fil, kalt deg json.load på denne fila og du får tilbake en ting.
Hva er det?
Det er en json objekt.
Hvor som json har array, Python har arrays.
Hvor som json har assosiative matriser, Pythons
ordbøker, strenger, og tall, og så videre.
Du ønsker å dumpe det ut, du åpne opp en ny fil, du kaller dump,
og laster og dumper for å gå inn og ut av strenger.
>> Tilsvarende blir pickle kalt i utgangspunktet det samme grensesnittet.
Det er litt mer nyttig hvis du dumping Python stedene.
Så hvis du noen gang ønsket å spare en versjon av dagens status
av en variabel for en fremtidig kjøre av programmet,
pickle er Pythons bibliotek for å gjøre det.
>> Hvis du har noen form for variabel som kan skrives ut
i like ord og tegn og bytes-- som dette ordlisten,
vi kunne skrive ned, vi kunne skrive det ned som
som en json objekt, som var bokstavelig disse tegnene.
Og så ville det være svært enkelt for et menneske å åpne den opp-- åpne opp
og lese den.
Hvis vi gjorde ikke spesielt bryr seg om mennesker som leser det,
vi kunne pakke enda mer effektivt inn i skjemaer som kunne senere pakkes ut
eller som kan senere bli oppblåst.
Og dette sparer 80% av plass at objektene kanskje
ta hvis du skrev dem ut longhand.
>> Du kaller pickle veldig mye samme måte-- dump, last,
og så får du tingene dine tilbake.
Så hvis du skriver veldig korte Python-programmer som
ønsker å spare staten, og deretter lese dem tilbake senere, ting som dette
er dine venner.
Som du kan veldig lett dumpe dem som json.
De fleste Python objekter kan dumpe ut json
hvis det er noe håp om at strukturelt de kunne være representert på den måten.
>> Dette er bare toppen av den isfjell på moduler som er nyttige.
Så sys, os, multi, er slags grunnleggende arbeidshester for ting
vi trenger å samhandle med filsystemet os.,
som os.isfile, os.isdirectory, os.makefile, disse er dine venner.
Hvis du ønsker å samhandle med en bestemt filtype,
json, sylte, csv.
Hvis du ønsker å samhandle med web sider, urllib for å få http
sider. bs4-- BeautifulSoup-- det er et fantastisk parser for html.
Du kjøre den på en html og du få dette nestet rekke objekt nå,
som du kan bla i løpet lookin, med som bare leter etter
hvis, er, i, som er fantastisk.
>> Det er en haug med pakker for running--
for å gjøre spesielt MATHY ting.
Så hvis du ønsker å formere seg, invertere, forvandle matriser,
numpy blir brukt av folk alle over hele verden for det.
scipy er enda mer nyttig verktøy i den retningen.
sklearn-- maskinlæring, naturlig språk prosessering,
super nyttig ting, får implementert i Python hele tiden.
>> Og igjen, det tar litt lengre tid å write-- beklager,
tar litt lengre tid å kjøre, men grunnen til at reelle ingeniører tendens
bruk Python er fordi du har en tendens til å være blokkert av deg å skrive koden, snarere
enn datamaskinen kjører koden.
Så hvis du kommer til å skrive en Programmet, som mange andre mennesker
skal bruke forever, som Linux, du
kanskje skrive det i C. Hvis du var kommer til å skrive en beregning motor,
du kan skrive i Python hvis du trengte å endre det hver par måneder.
Noen vil skrive det i C fordi de er sånn.
>> Så vi har sett import sys som en måte å få ting
for å få modulen inn i programmet.
Du kan også importere det som et kallenavn, hvis du ønsker.
Igjen multiprosessering er en smerte å skriver ut hver gang, så importerer som mp
og deretter når du bruke det i programmet,
vil du si mp.process, eller hva har du.
Hvis du vil importere bare en eneste ting,
så urllib har noe som heter forespørsel, så du kan bare importere det.
Senere vil du ikke påberope det som urllib.request, men like forespørsel
av seg selv.
>> Og du kan importere alt fra en modul hvis du ønsker.
Dette er tidvis ikke en god idea-- dette vanligvis ikke en god ide, faktisk.
Fordi du very-- fordi hvis noe ved at modulen har et navn som du
ønsket å bruke et annet sted i programmet, kan du ikke.
>> Og det er ikke alltid opplagt at det er tilfelle.
For å være sikker på at hva du gjorde var trygg,
du trenger å åpne opp modulen og se alt
av navnene som ender opp i det-- alle funksjoner,
alle variablene som lever i den modulen,
fordi du bringer alle dem inn i din lokale navnerommet.
>> Så folk gjør dette.
Det er generelt anbefalt at du ikke gjør dette.
Men folk gjør dette hele tiden fordi de er
lat og ikke ønsker å skrive ut mp.
noe, noensinne.
>> Alt dette snakket om moduler bringe meg rundt til en kort tale
om hvordan du utformer programmer i Python.
Det første trinnet er å sjekke for å se om noen andre allerede har gjort ting,
eller gjort 90% av ting.
Sjansen er at de sannsynligvis har, og du bør gå får sine ting og kjøre den.
Eller skrive en wrapper rundt det å tilpasse den til ditt formål.
Det er først etter at har mislyktes som du hadde da
gå på og write-- begynne å tenke på hvordan du ville sette denne tingen sammen.
Det er massevis av ting der ute, og at
en av de mest nyttige ting om Python.
Som språket er elegant, språket
er enkel å bruke, men også fordi det er så elegant og enkel å bruke,
folk har brukt det i et lang tid og det er en masse ting
der ute som du kan sele til eget bruk.
>> Så forrige regel Python er, noen andre allerede har sannsynligvis skrevet
en modul for det, noen andre har allerede
sannsynligvis skrevet et bibliotek for det.
Før du prøver å gjøre en ting, se for å se om det er blitt gjennomført.
Det er ikke så vanskelig.
Alle modulene som jeg legger opp før, med kanskje ett unntak,
kommer forhåndsinstallert på alle standard Python-installasjonen.
Og så med en oppfordring til importere uansett, du
har all denne funksjonaliteten på fingertuppene.
>> Begynner å bryte opp dette snakke, er det et par ting
at jeg har igjen som svarte bokser og liksom glattet over,
og det er noen hvite løgner at jeg har fortalte at på grunn av ærlighet,
Jeg skal i hvert fall punktet her, selv om jeg ikke vil
gå super dypt inn alle av dem og deres tekniske forklaringer.
>> Mange av de tingene som jeg har kalt magi
er hva andre mennesker vil kalle objektorientert programmering.
Så det er mange things-- så variabler er svært ofte ikke
enkle bytes sitter i, hukommelse, men er meget komplisert
objekter som har intern staten om funksjoner og mye
skjulte variabler, masse skjult funksjonalitet som
lar deg gjøre dem om til strenger, som lar deg iterere over dem.
Og hvis du writing-- og den grunn at de
har alt dette rik funksjonalitet er fordi people--
arkitektene bak language-- har gått
gjennom og for hver standard objekt, sette i funksjonalitet
å si dette er hvordan dette er hvordan dette kommer til å operere
hvis noen ønsker å iterere over det.
>> Så alt som noen kanskje muligens ønsker å iterere over,
har logikk skrevet i manuelt på hvordan du er
ment å iterere over dette objektet.
Alt som du kan tenke deg dumpet i en streng er logisk skrevet.
Dette er den funksjonen du ringe hvis du ønsker å dumpe dette ut til en streng.
Dette er grunnen til at du kan kalle len på ting, dette
er grunnen til at du kan ringe for i, er dette Derfor kan du ringe hvis du er i på alt
at du ønsker å, fordi de alle bærer med seg,
teknisk kunnskap til å gjøre det.
>> Dette er noe som jeg er super ikke tenkt å gå inn.
Men for ting på listen er subtilt forskjellig fra C stil for looper,
og du kan lese alt om det på Internett hvis du er interessert.
Det er en mørk side til alle av dette, som jeg nevnte,
så det er to ting.
Den første er at denne objektorientert programmering gir mye overhead
til tilfeldige ting, slik at du ender opp med å bruke mye mer minne;
du ender opp med å bruke litt mer tid enn du ellers ville.
Den other-- men mer lumske mørk side til dette
er, hvis ting bare handle som du vil at de skal
uten at du må tenke super hardt om hvorvidt dette bør være en int
eller hvorvidt det skal være en flyte, kan det være at over her
du produserer en int, men over her tror, ​​men de vil always-- beklager,
det kan være at her du lage en dupp,
men når du kommer til den andre delen av programmet, du tenker,
nåvel, men de vil alltid passere meg en int.
Og hvis de ikke gjør det, er det mulig at du kilt et sted,
hvis du prøver å bruke det til å indeksere inn i en matrise, eller hva har du.
>> Så en av de virkelige nyttige ting om C er
det tvinger deg til å tenke virkelig hardt før du gjør any--
før du tar noen variable inn i eksistens, som hva
er den type av denne variabel.
Og det kommer til å ha som type for all tid.
>> Dette er ikke sant Python, og faktisk, du
can-- hvis du bare liksom går av øret,
og du gjør noen beslutninger en måte på ett sted,
og noen beslutninger én måte på andre plass
uten å sette nok ting bak scenene i den andre plassen
å fange ting riktig, du kan få noen svært merkelige feil.
Og programmet kan fortsette å kjøre i svært lang tid, fordi det er
gjøre mye arbeid å si, vel denne tingen kunne operere på denne måten,
så jeg kommer til å kjøre på den måten.
>> Og faktisk, at den presser fremover gjennom en rekke små feil
betyr at ofte når en feil er faktisk dårlig
og du faktisk ønsker å fikse det, det ender opp miles away-- programmet
ender opp med å stoppe miles away fra når du hadde din feil.
Og så en ting som vi ønsker programmer for å gjøre, sometimes-- én ting
at vi ønsker programmer å gjøre når vi er debugging
er mislykkes høyt og mislykkes svært raskt når noe går galt.
>> Python er veldig dårlig på det.
Python er veldig flinke til å ikke sviktende og rulle fremover
gjennom uventede ting.
Så dette er nyttig for når du skriver små programmer.
Når du får komplisert bugs det noen ganger
tar lang tid å erte dem ut.
>> Så det er en mørk side til alle av dette, som det bare virker.
Det fungerer akkurat som du forventer at det skal.
Bortsett fra at når det ikke gjør det, vil du ende opp på et helt annet sted
og prøver å finne ut hvor det var at du gikk galt.
>> Søppelrydding er-- så en ting som du vil legge merke til
er at noen av disse tingene som Jeg har tatt inn existence--
disse arrays, disse ordbøker, disse objekter, disse files-- aldri bli frigjort.
Det var ingen samtale til fri i noen av denne talen.
Og som var på C-siden, fordi vi fikk aldri inn i disse tingene.
>> Men i Python-side, er det ikke en gratis.
Ting blir automatisk frigjort når Python
mener du ikke ser på dem.
Det er veldig bra ikke frigjør ting som du kan fortsatt muligens bli å se på,
men dette betyr at hvis du var kommer til å fordele denne store tingen,
og du er som, oh Jeg er ferdig med det nå,
det er vanskelig å fortelle Python at du er ferdig med det nå.
>> Du kan noen ganger sette denne variabelen for å være ingen,
og deretter håper at til slutt søppelinnsamler
kommer gjennom og renser den ut.
Men igjen, trenger du ikke har kontroll over den.
Og en av grunnene til at folk bruker C for virkelig performance kritiske ting,
er denne evnen til å virkelig vite når minnet er tildelt
og når det er frigjort, og har mye kontroll over si:
Jeg bruker ikke mer minne enn jeg trenger.
Som er noe som Python er ikke så gode på.
PUBLIKUM: Kan jeg stille deg et spørsmål?
Hva mente du med mislykkes høyt?
>> ROSS RHEINGANS-YOO: Så hvis noe som går galt
og du er i debugging modus, vil du veldig ofte
vil at programmet skal fortelle deg hvor det har gått galt,
og ikke bare stille slutte å kjøre.
Men du hadde faktisk det å skrive ut ut all slags informasjon om
lignende, her var dette.
Dette skjedde Hvis du skriver ut en wen-- hvis du kjører en web server--
>> PUBLIKUM: [uhørbart]
>> ROSS RHEINGANS-YOO: Ja, hvis du kjører en web server,
det er noen ganger dårlig hvis du er alltid forkaster feil,
og du sier, vel som ikke fungerte.
Jeg kommer til å stoppe.
Jeg skal bare ignorere det og holde det gående på.
Fordi da kan du komme i hundre av disse feilene og ikke se dem.
>> Det ville sikkert være nyttig for debugging formål
hvis hver gang webserveren gjort en feil, du hadde holdbare registreringer av det.
Kanskje du vil at programmet å stoppe, slik at disse postene
Ikke bli begravd under ting.
Men igjen, det er i debugging mode.
>> Ofte er i produksjonsmodus, jo verden er litt annerledes.
Og i små skript som jeg kjører, hvor ting som jeg sa å gjøre
kan være bare en liten bit av fra hva jeg vil at det skal gjøre,
da liksom presser gjennom feil er noe du kanskje ønsker.
Og i slike tilfeller, i hvert fall Python virkelig tjener sine starter.
>> Den siste tingen som jeg ikke snakke i dette-- at jeg ikke snakker om
men kan være veldig rasende første gang du har en av disse feilene,
og andre og tredje og fjerde gang du har ett disse feilene.
Python, nevnte jeg at den bruker white space
å fortelle deg hvilket nivå av innrykk og hva funksjonell blokk du er i,
den behandler faner og mellomrom annerledes.
Så hvis du fanen over fire, og deretter neste linje har fire plasser,
selv om de viser seg som den samme beløpet i editor,
Python ikke behandle dem det samme.
>> Faktisk behandler Python faner og områder som olje og vann.
De er bare forskjellige ting.
Det er ingen spesiell lengde som en fane er,
så det er ikke som en fane tilsvarer 8 mellomrom, og slik at du ville komme rundt det
den veien.
Som, når den sier, hva nivå av hvite området jeg er på,
det er faktisk på jakt etter en mønster av mellomrom og faner.
Og så, den beste måten å håndtere dette er å alltid bruke mellomrom hele tiden.
>> Og faktisk, i Cloud9 IDE og CS50 IDE,
dine Tab nøkkelinnsatser fire områder i stedet
av en fane, som er super nyttig.
Men igjen, hvis du skrev en Python program med faner som ville være fint,
det er bare hvis noen gikk inn og prøvde å legge
en eneste linje i programmet som hadde fire plasser for hver kategori,
det ville bryte.
Og det ville bryte på en måte som egentlig ikke er synlig.
Selv om selve feilen melding om at det kaster
har å gjøre med nytt rykke forventes ikke her,
or-- hvis det er snakk om innrykk og det ser ut som det er galt,
er det sannsynligvis fordi det er en fane-space problem.
De er fortsatt meget irriterende å feilsøke.
Den største helhet i denne talen, som jeg ikke
komme til fordi det er virkelig en komplisert, subtil emne,
og var ikke nødvendig å gjøre noe av de tingene vi har gjort så langt,
er et konsept kalt tupler.
De er der mye som arrays at du ikke kan endre.
De blir brukt over alt fordi de er nyttige for mange ting
at arrays er ikke nyttig for.
>> Men hvis du ønsker å lage en matrise, og Da lover tolken at du
aldri kommer til å ønske å endre det thing-- faktisk, hvis du ønsker å endre,
du vil lage en ny en med den nye Verdiene i it de er tupler.
Snarere enn å produsere dem med hakeparenteser,
du produserer dem med runde parentes.
Hvorfor ville du bruke disse tingene, er litt av et spørsmål. .
Det eneste som jeg vil si om det er deg
kan bruke tupler som indeksene for ordbøker.
Du kan ikke bruke arrays som indeksene for ordbøker.
Og hvorfor er, igjen, teknisk og Jeg har ikke tenkt til å kjøre inn i den.
>> Den PSet at jeg ikke har rørt på i denne talen er pset6.
Så her er hvordan du 'D implementere a-- her er
hvordan du ville gjennomføre pset6 i Python.
Med tanke på Python design syklus, det første
som du gjør når du er skrive programmer er sjekk
for å se om noen har gjort det allerede.
>> Faktisk, hvis du vil å serve-- Apache 50
gjør omtrent dette, bortsett fra at det ikke kommer
standard installert på Linux-maskiner.
Python gjør, og Python enkel HTTP Server gjør også.
Hvis du noen gang på en Linux-maskin, eller Cloud9 IDE utenfor CS50
og du ønsker å tjene denne aktuelle katalog til en bestemt port,
python-m SimpleHTTPServer port serverer det.
Du kan også importere den enkle http server
og det har mye funksjonalitet hvis du ønsker å tilpasse den, eller endre den,
eller kjøres it utnytte det til kjøre dine egne servertjenester.
>> Så det er Python i et nøtteskall.
Og dette har vært CS50.
Takk skal du ha.