Ĉapitro 2 - Flow Kontrolo
Subtenu la Aŭtoro: Aĉeti la libron sur Amazono aŭ
la libro / ebook pakaĵo rekte Neniu amelo Gazetaro .
Legi la aŭtora aliaj liberaj Python libroj:
fluo Kontrolo
Do vi scias la fundamentojn de unuopaj instrukcioj kaj ke programo estas nur serio de instrukcioj. Sed la reala forto de programado ne nur kurante (aŭ ekzekuti) instrukcio post alia kiel semajnfina komisio listo.
Bazita sur kiel la esprimoj taksi, la programo povas decidi salti
instrukcioj, ripeti ilin aŭ elekti unu el pluraj instrukcioj kuri.
Fakte, vi preskaŭ neniam volas vian programoj komenci de la unua linio
de kodo kaj simple ekzekuti ĉiun linion, rekte al la fino. Kontrolo de fluo deklaroj povas decidi kion Python instrukciojn ekzekuti sub kiuj kondiĉoj.
Tiuj fluo kontrolo deklaroj rekte respondas al la simboloj en
Flowchart, do mi provizas Flowchart versioj de la kodo diskutitaj en ĉi
tiu ĉapitro. Figuro 2-1 bildigas Flowchart por kio fari se pluvas. Sekvu la padon farita per la sagoj de Komenco al End.
Figuro 2-1. A Flowchart rakonti kion fari se pluvas
En Flowchart, ekzistas kutime pli ol unu vojo iri de la komenco ĝis la fino. La sama estas vera por linioj de kodo en komputila programo. Fludiagramo reprezentas tiuj branĉantaj punktoj kun diamantoj, dum la aliaj paŝoj estas reprezentitaj kun ortanguloj. La startanta kaj finante paŝoj estas reprezentitaj per rondoformaj ortanguloj.
Sed antaŭ vi lerni pri fluo kontrolo deklaroj, vi unue devas lerni kiel por reprezenti tiuj jes kaj ne ebloj, kaj vi bezonas kompreni kiel skribi tiujn branĉantaj punktoj kiel Python kodo. Por tio, ni esploros Buleaj valoroj, komparo operatoroj, kaj Buleaj operatoroj.
Buleaj valoroj
Dum la entjera, flosanta punkto, kaj ŝnuro datumtipoj havas senliman nombron de eblaj valoroj, la Bulea datumtipo havas nur du valoroj:
True
kaj False
.
(Bulea estas kapitaligita ĉar la datumtipo estas nomita laŭ
matematikisto George Boole.) Kiam tajpita kiel Python kodon, la Bulea
valoroj True
kaj False
manko la citilojn vi metas ĉirkaŭ kordoj, kaj ili ĉiam komencas kun majuskla T aŭ F, kun la resto de la vorto en minuskla. Eniri la sekva en la interaga ŝelo. (Kelkaj el tiuj instruoj estas intence malĝusta, kaj ili devos kaŭzi erarmesaĝojn aperi.) (Tio estas en-retumilo interaga ŝelon funkciigita de straso. Aŭ tajpi la instrukciojn en sencela la interaga ŝelo aŭ uzi ĉi interaga ŝelo.)
Kiel ajna alia valoro, Bulea valoroj estas uzataj en esprimoj kaj povas esti stokitaj en variabloj ❶. Se vi ne uzas la taŭga okazo ❷ aŭ vi provas uzi
True
kaj False
por variablo nomoj ❸, Python donos al vi erarmesagxon. komparo Telefonistoj
Komparo operatoroj kompari du valoroj kaj taksi malsupren al ununura Bulea valoro. Tabelo 2-1 listigas la komparo operatoroj.
Tabelo 2-1. komparo Telefonistoj
Funkciigisto
|
signifanta
|
---|---|
== |
egala al
|
!= |
Ne egala al
|
< |
Malpli ol
|
> |
Pli granda ol
|
<= |
Malpli ol aŭ egala al
|
>= |
Pli granda ol aŭ egala al
|
Tiuj operatoroj taksi al
True
aŭ False
depende de la valoroj vi donas ilin. Ni provu iuj telefonistoj nun, komencante ==
kaj !=
.
Kiel vi povus atendi,
==
(egala al) taksas al True
, kiam la valoroj sur ambaŭ flankoj estas la sama, kaj !=
(Ne egalas) taksas al True
, kiam la du valoroj estas malsamaj. La ==
kaj !=
Operatoroj povas fakte labori kun valoroj de iu datumtipo.
Notu ke entjero aŭ punkto flotante valoro estos ĉiam neegala al ĉeno valoro. La esprimo
42 == '42'
❶ taksas al False
ĉar Python konsideras la entjero 42
al diferenci de la ĉeno '42'
.
La
<
, >
, <=
, kaj >=
operatoroj, aliflanke, funkcias nur per entjero kaj punkto flotante valoroj.
Vi ofte uzas komparon operatoroj kompari ŝanĝiĝema valoro al iu alia valoro, kiel en la
eggCount <= 42
❶ kaj myAge >= 10
❷ ekzemploj. (Ja, anstataŭ tajpi 'dog' != 'cat'
en via kodo, vi povus simple tajpas True
.) Vi vidos pli ekzemploj de ĉi poste, kiam vi lernas pri fluo kontrolo deklaroj. bulea Telefonistoj
La tri Bulea operatoroj (
and
, or
, kaj not
) estas uzataj por kompari Bulea valoroj. Kiel komparo operatoroj, ili taksi tiujn esprimojn al Bulea valoro. Ni esploru tiujn telefonistojn detale, komencante kun la and
operatoro. Duuma Buleaj Telefonistoj
La
and
kaj or
operatoroj ĉiam prenas du Buleaj valoroj (aŭ esprimoj), do ili estas konsiderata duuma operatoroj. La and
operatoro taksas esprimon al True
se ambaŭ Bulea valoroj estas True
; alie, ĝi taksas al False
. Entajpu iuj esprimoj uzanta and
en la interaga ŝelo por vidi ĝin en ago.
A vertabelo montras ĉiun eblan rezulton de Bulea operatoro. Tabelo 2-2 estas la vertabelo por la
and
operatoro.
Tabelo 2-2. La
and
Operator la Vero Tablo
esprimo
|
Taksas al ...
|
---|---|
True and True | True |
True and False | False |
False and True | False |
False and False | False |
Aliflanke, la
or
operatoro taksas esprimon al True
se iu el la du Buleaj valoroj estas True
. Se ambaŭ estas False
, ĝi taksas al False
.
Vi povas vidi ĉiu ebla rezulto de la
or
operatoro en lia vertabelo, montrita en Tabelo 2-3 .
Tabelo 2-3. La
or
Funkciigisto la Vero Tablo
esprimo
|
Taksas al ...
|
---|---|
True or True | True |
True or False | True |
False or True | True |
False or False | False |
La ne Funkciigisto
Kontraste
and
kaj or
, la not
operatoro operacias sur nur unu Bulea valoro (aŭ esprimo). La not
operatoro simple taksas al la kontraŭa Bulea valoro.
Multe kiel duoblaj negativaj en parolado kaj skribado, vi povas nesto
not
operatoroj ❶, kvankam ekzistas neniam ne ekzistas kialo por fari tion en reala programoj. Tabelo 2-4 montras la vertabelo por not
.
Tabelo 2-4. La
not
Funkciigisto la Vero Tablo
esprimo
|
Taksas al ...
|
---|---|
not True | False |
not False | True |
Miksante Bulea kaj Komparo Telefonistoj
Ekde la komparo operatoroj taksi al Bulea valoroj, vi povas uzi ilin en esprimoj kun la Bulea operatoroj.
Memoras ke la
and
, or
, kaj not
operatoroj nomas Bulea operatoroj ĉar ili ĉiam funkcias laŭ la Bulea valoroj True
kaj False
. Dum esprimojn kiel 4 < 5
ne Bulea valoroj, ili estas esprimoj kiuj taksos al Bulea valoroj. Provu eniri iun Bulea esprimoj kiuj uzas komparon operatoroj en la interaga ŝelo.
La komputilo taksos la maldekstra esprimo, kaj poste ĝi taksos la dekstra esprimo. Ĝi kiam konas al la Bulea valoro por ĉiu, ĝi tiam taksi la tuta esprimo al unu Bulea valoro. Vi povas pensi de la komputilo pritakso procezo por
(4 < 5) and (5 < 6)
kiel montrita en Figuro 2-2 .
Vi povas ankaŭ uzi multoblajn Bulea operatoroj en esprimo, kune kun la komparo operatoroj.
La Bulea operatoroj havas ordon de operacioj same kiel la matematiko operatoroj fari. Post ĉiu matematiko kaj komparo operatoroj taksi, Python taksas la
not
operatoroj unua, tiam la and
operatoroj, kaj tiam la or
operatoroj.
Figuro 2-2. La procezo de pritaksanta
(4 < 5)
kaj (5 < 6)
al True
. Elementoj de Flow Kontrolo
Fluo kontrolo deklaroj ofte komencas kun parto nomita la kondiĉo, kaj ĉiuj estas sekvitaj de bloko de kodo nomitaj la klaŭzo. Antaŭ vi lernos pri Python specifa fluo kontrolo deklaroj, mi kovros kia kondiĉo kaj bloko estas.
kondiĉoj
La Buleaj esprimoj vi vidis ĝis nun povis ĉiuj konsideri kondiĉojn, kiuj estas la samo kiel esprimoj; kondiĉo estas nur pli specifa nomo en la kunteksto de fluo kontrolo deklaroj. Kondiĉoj ĉiam taksi al Bulea valoro,
True
aŭ False
. A kontrolo de fluo deklaro decidas kion fari bazita sur ĉu lia kondiĉo estas True
aŭ False
, kaj preskaŭ ĉiu fluo kontrolo deklaro uzas kondiĉo. Blokoj de Kodo
Linioj de Python kodo povas esti grupigitaj kune en blokoj. Vi povas diri kiam bloko komencas kaj finiĝas el la deŝovon de la linioj de kodo. Ekzistas tri reguloj por blokoj.
- Blokoj komenci kiam la deŝovon pliigas.
- Blokoj povas enhavi aliajn blokojn.
- Blokoj fini kiam la deŝovon malgrandiĝas al nulo aŭ al enhavanta bloko deŝovon.
Blokoj estas pli facile kompreni se oni rigardas iun dentado kodo, do
ni trovos la blokoj en parto de malgranda ludo programo, montrita ĉi
tie:
La unua bloko de kodo ❶ komenciĝas ĉe la linio
print('Hello Mary')
kaj enhavas ĉiujn liniojn post tio. Ene tiu bloko estas alia bloko ❷, kiu havas nur unu linion en ĝi: print('Access Granted.')
. La tria bloko ❸ estas ankaŭ unu linion longan: print('Wrong password.')
. programo Ekzekuto
En la antaŭa ĉapitro la hello.py programo, Python komencis ekzekuti instrukciojn ĉe la supro de la programo subiro unu post alia. La programo ekzekuto (aŭ simple, ekzekuto) estas termino por la aktuala instruado ekzekutas.
Se vi presi la fontkodo surpapere kaj meti vian fingron sur ĉiu linio
kiel estas ekzekutita, vi povas pensi pri via fingro kiel la programo
ekzekuto.
Ne ĉiuj programoj ekzekuti per simple iranta malsupren tamen.
Se vi uzas vian fingron spuri per programo kun fluo kontrolo deklaroj,
vi verŝajne trovos vin salti tra la fontkodo surbaze kondiĉoj, kaj vi
probable skip tutaj propozicioj.
Fluo Kontrolo Deklaroj
Nun, ni esploru la plej grava peco de kontrolo de fluo: la deklaroj sin. La deklaroj reprezenti la diamantoj vi vidis en la Flowchart en Figuro 2-1 , kaj ili estas la faktaj decidoj viajn programojn faros.
se Deklaroj
La plej komuna tipo de kontrolo de fluo deklaro estas la
if
komunikaĵo. An if
komunikaĵo la klaŭzo (te, la bloko sekvante la if
komunikaĵo) faros se la deklaro de kondiĉo estas True
. La klaŭzo estas ignorita se la kondiĉo estas False
.
En simpla angla lingvo, kiel
if
deklaro povus esti legita kiel "Se ĉi tiu kondiĉo estas vera, ekzekuti la kodon en la subfrazo." En Python, la if
komunikaĵo konsistas el la sekvaj: - La
if
ŝlosilvorto - Kondiĉo (te, esprimo kiu taksas al
True
aŭFalse
) - A dupunkto
- Komencante en la sekva linio, la dentado bloko de kodo (nomata
if
klaŭzo)
Ekzemple, diru vi havas iom da kodo kiu kontrolas vidi ĉu ies nomo estas Alice. (Ŝajnigi
name
estis atribuita iu valoro pli frue.) se nomo == 'Alice': print ( 'Saluton, Alico.')
Ĉiuj fluo kontrolo deklaroj fino kun dupunkto kaj estas sekvitaj per nova bloko de kodo (la klaŭzo). Ĉi
if
aserto estas klaŭzo estas la bloko kun print('Hi, Alice.')
. Figuro 2-3 montras kia Flowchart de tiu kodo aspektus.
Figuro 2-3. La Flowchart por
if
komunikaĵo alie Deklaroj
An
if
klaŭzo povas laŭvole esti sekvita per else
aserto. La else
klaŭzo estas ekzekutita nur kiam la if
komunikaĵo kondiĉo estas False
. En simpla angla lingvo, la else
aserto povus esti legita kiel "Se ĉi tiu kondiĉo estas vera, ekzekuti tiu kodo. Aux, ekzekuti tiu kodo. "An else
deklaro ne havas kondiĉo, kaj en kodo, kiel else
komunikaĵo ĉiam konsistas el la sekvaj: - La
else
ŝlosilvorto - A dupunkto
- Komencante en la sekva linio, la dentado bloko de kodo (nomita la
else
klaŭzo)
Revenante al la Alicia ekzemplo, ni rigardu iom da kodo kiu uzas
else
deklaron proponi malsaman saluto se la persono nomo ne Alice.
Figuro 2-4 montras kia Flowchart de tiu kodo aspektus.
Figuro 2-4. La Flowchart por
else
deklaro elif Deklaroj
Dum nur unu el la
if
aŭ else
klaŭzoj faros, vi eble havas kazon kie vi volas unu el multaj eblaj klaŭzoj ekzekuti. La elif
deklaro estas "alia se" deklaro kiu ĉiam sekvas if
aŭ alia elif
deklaro. Ĝi provizas alia kondiĉo kiu kontrolis nur se ĉiu el la antaŭaj kondiĉoj estis False
. En kodo, kiel elif
deklaro ĉiam konsistas el la sekvaj: - La
elif
ŝlosilvorto - Kondiĉo (te, esprimo kiu taksas al
True
aŭFalse
) - A dupunkto
- Komencante en la sekva linio, la dentado bloko de kodo (nomita la
elif
klaŭzo)
Ni aldonas
elif
al la nomo kontrolilo vidi tiun deklaron en ago.
Tiu tempo, vi kontrolu la persono aĝo, kaj la programo rakontos ion
malsama se ili estas pli junaj ol 12. Vi povas vidi la Flowchart por tiu
en Figuro 2-5 .
Figuro 2-5. La Flowchart por
elif
deklaro
La
elif
klaŭzo ekzekutas se age < 12
estas True
kaj name == 'Alice'
estas False
. Tamen, se ambaŭ de la kondiĉoj estas False
, tiam ambaŭ el la klaŭzoj estas salteado. Ĝi ne garantias ke almenaŭ unu el la klaŭzoj lanĉiĝos. Kiam estas ĉeno de elif
deklaroj, nur unu aŭ neniu el la klaŭzoj lanĉiĝos. Iam unu el la deklaroj 'kondiĉoj estas trovita esti True
, la resto de la elif
klaŭzoj aŭtomate preterpasita. Ekzemple, malfermi novan dosieron redaktanto fenestro kaj eniri la sekvan kodon, ŝparante ĝin kiel vampire.py:
Tie Mi aldonis du pli
elif
deklaroj por fari la nomo kontrolilo saluti persono kun malsamaj respondoj surbaze age
. Figuro 2-6 montras la Flowchart ĉi.
Figuro 2-6. La Flowchart por multoblaj
elif
deklaroj en la vampire.py programo
La ordo de la
elif
deklaroj gravas, tamen. Ni reordigi ilin enkonduki cimon. Memoru ke la resto de la elif
klaŭzoj aŭtomate preterpasita unufoje True
kondiĉo estis trovita, do se vi interŝanĝas ĉirkaŭ kelkaj el la klaŭzoj en vampire.py, vi trafos problemo. Ŝanĝi la kodon por simili la sekvaj, kaj konservi ĝin kiel vampire2.py:
Diru la
age
variablo enhavas la valoron 3000
antaŭ tiu kodo estas ekzekutita. Vi povus atendi la kodo presi la kordo 'Unlike you, Alice is not an undead, immortal vampire.'
. Tamen, ĉar la age > 100
kondiĉo estas True
(post ĉiu, 3000 estas pli granda ol 100) ❶, la kordo 'You are not Alice, grannie.'
Presas, kaj la resto de la elif
deklaroj estas aŭtomate preterpasita. Memoru, maksimume nur unu el la klaŭzoj estos farinta kaj por elif
deklaroj, la ordo aferoj!
Figuro 2-7 montras la Flowchart por la antaŭa kodo. Rimarku kiel la diamantoj por
age > 100
kaj age > 2000
estas interŝanĝitaj.
Laŭvole, vi povas havi
else
deklaron post la lasta elif
deklaro. En tiu kazo, ĝi estas garantiita ke almenaŭ unu (kaj nur unu) de la klaŭzoj lanĉiĝos. Se la kondiĉoj en ĉiu if
kaj elif
deklaro estas False
, tiam la else
klaŭzo estas ekzekutita. Ekzemple, ni re-krei la Alico programo uzi if
, elif
kaj else
paragrafoj.
Figuro 2-8 montras la Flowchart por ĉi nova kodo, kiun ni ŝparos kiel littleKid.py.
En simpla angla lingvo, tiu tipo de kontrolo de fluo strukturo estus, "Se la unua kondiĉo estas vera, tiam faru jene. Alie, se la dua kondiĉo estas vera, fari tion.
Alie, fari ion alian. "Kiam vi uzas ĉiujn tri el tiuj asertoj kune,
memoru tiujn regulojn pri kiel ordigi ilin eviti bugs kiel kiu en Figuro 2-7 . Unua, ĉiam precize unu
if
komunikaĵo. Ajna elif
deklaroj vi bezonas devus sekvi la if
komunikaĵo. Due, se vi volas esti certa ke almenaŭ unu klaŭzon ekzekutas, fermi la strukturo kun else
deklaro.
Figuro 2-7. La Flowchart por la vampire2.py programo. La krucmilitoj-out vojo estos logike neniam okazos, ĉar se
age
estis pli granda ol 2000
, ĝi jam estis granda ol 100
.
Figuro 2-8. Flowchart por la antaŭa
littleKid.py
programo dum Cirkla Deklaroj
Vi povas fari bloko de kodo ekzekuti saciedad kun
while
komunikaĵo. La kodo en while
klaŭzo lanĉiĝos dum la while
deklaro de kondiĉo estas True
. En kodo, while
komunikaĵo ĉiam konsistas el la sekvaj: - La
while
ŝlosilvorto - Kondiĉo (te, esprimo kiu taksas al
True
aŭFalse
) - A dupunkto
- Komencante en la sekva linio, la dentado bloko de kodo (nomita
while
klaŭzo)
Vi povas vidi ke
while
deklaro aspektas simila al if
komunikaĵo. La diferenco estas en kiel ili kondutas. Fine de if
klaŭzo, la programo ekzekuto daŭrigas post la if
komunikaĵo. Sed ĉe la fino de while
klaŭzo, la programo ekzekuto saltas reen al la komenco de la while
deklaro. La while
klaŭzo ofte nomita la dum buklo aŭ simple la buklo.
Ni rigardu kiel
if
komunikaĵo kaj while
buklo ke uzi la sama kondiĉo kaj prenu la saman agoj bazitaj sur tiu kondiĉo. Tie estas la kodo kun if
komunikaĵo:
Tie estas la kodo kun
while
komunikaĵo:
Tiuj asertoj estas similaj-ambaŭ
if
kaj while
kontrolu la valoron de spam
, kaj se ĝi estas malpli ol kvin, ili presi mesaĝon. Sed kiam vi kuros tiuj du kodo fragmentojn, io tre malsama okazas por ĉiu. Por la if
aserto, la eligo estas simple "Hello, world."
. Sed por la while
komunikaĵo, estas "Hello, world."
Ripetis kvinfoje! Rigardu la Fludiagramo por tiuj du pecoj de kodo, Figuro 2-9 kaj Figuro 2-10 , vidi kial tio okazas.
Figuro 2-9. La Flowchart por la
if
aserto kodo
Figuro 2-10. La Flowchart por la
while
komunikaĵo kodo
La kodo kun la
if
komunikaĵo kontrolas la kondiĉo, kaj ĝi presas Hello, world.
Nur unu fojon se tiu kondiĉo estas vera. La kodo kun la while
buklo, aliflanke, presos gxin kvinfoje. Ĝi por post kvin presaĵojn ĉar la entjero en spam
estas incremented de unu ĉe la fino de ĉiu ciklo iteracio, kio signifas ke la buklo ekzekutos kvin epokojn spam < 5
estas False
.
En la
while
buklo, la kondiĉo estas ĉiam kontrolita je la komenco de ĉiu ripeto (tio estas, ĉiu tempo la buklo estas ekzekutita). Se la kondiĉo estas True
, tiam la klaŭzo estas ekzekutita, kaj poste, la kondiĉo estas kontrolita denove. Unuafoje la kondiĉo estas trovita esti False
, la while
klaŭzo estas ignorita. An Annoying dum Loop
Jen malgranda ekzemplo programo kiu gardos petante vi tajpu, laŭvorte,
(Alklaku "Run" komenci la programon.) your name
. Elektu Dosiero â-¸ Nov Dosiero malfermi novan dosieron redaktanto fenestro, tajpu la sekvan kodon kaj savi la dosiero yourName.py:
Unue, la programo metas la
name
variablo ❶ al malplena linio. Ĉi tio estas tiel ke la name != 'your name'
kondiĉo taksos al True
kaj la programo ekzekuto eniros la while
buklo la klaŭzo ❷.
La kodo ene ĉi klaŭzo petas la uzanto tajpi sian nomon, kiu estas atribuita al la
name
variablo ❸. Ĉar tio estas la lasta linio de la bloko, la ekzekuto movas reen al la komenco de la while
buklo kaj reevaluates la kondiĉo. Se la valoro en name
estas ne egala al la kordo 'your name'
, tiam la kondiĉo estas True
, kaj la ekzekuto eniras la while
klaŭzo denove.
Sed unufoje la uzanto tajpas
your name
, la kondiĉo de la while
buklo estos 'your name' != 'your name'
, kiu taksas al False
. La kondiĉo estas nun False
, kaj anstataŭ la programo ekzekuto reentering la while
buklo la klaŭzo, ĝi saltas estinteco kaj daŭre kuras la resto de la programo ❹. Figuro 2-11 bildigas Flowchart por la yourName.py programo.
Figuro 2-11. A Flowchart de la yourName.py programo
Nun, ni vidu yourName.py en ago. Gazetaro F5 por ruli ĝin, kaj eniri io alia ol
your name
kelkajn fojojn antaŭ doni la programon kion ajn. Bonvolu tajpi vian nomon. Al Bonvolu tajpi vian nomon. albert Bonvolu tajpi vian nomon. % # @ #% * (^ & !!! Bonvolu tajpi vian nomon. via nomo Dankon!
Se vi neniam eniri
your name
, tiam la while
buklo la kondiĉo neniam estos False
, kaj la programo nur teni demandanta ĉiam. Tie, la input()
alvoko permesas la uzanto eniras la dekstran ĉenon por fari la programon pluiri. En aliaj programoj, la kondiĉo povas neniam reale ŝanĝas, kaj tio povas esti problemo. Ni rigardu kiel vi povas rompi ekstere de while
buklo. rompi Deklaroj
Estas fulmoklavo por akiranta la programo ekzekuto rompi el
while
buklo la klaŭzo frua. Se la ekzekuto atingas break
deklaro, ĝi tuj eliras la while
buklo la klaŭzo. En kodo, break
deklaro simple enhavas la break
ŝlosilvorto.
Sufiĉe simpla, ĉu ne? Jen programo kiu faras la samon kiel la antaŭa programo, sed ĝi uzas
break
deklaro eskapi la buklo. Eniri la sekvan kodon kaj savi la dosiero yourName2.py:
La unua linio ❶ kreas senfina ciklo; ĝi estas
while
buklo kies kondiĉo estas ĉiam True
. (La esprimo True
, efektive, ĉiam taksas malsupren al la valoro True
.) La programo ekzekuto ĉiam eniras la buklo kaj eliri nur kiam break
deklaro estas ekzekutita. (Malfinio buklo kiu neniam forlasas estas komuna programado cimo.)
Samkiel antaŭe, ĉi tiu programo demandas al la uzanto tajpas
your name
❷. Nun, tamen, dum la ekzekuto estas ankoraŭ ene de la while
buklo, estas if
komunikaĵo gets ekzekutita ❸ kontroli ĉu name
egalas your name
. Se ĉi tiu kondiĉo estas True
, la break
deklaro kuras ❹ kaj la ekzekuto movas el la buklo print('Thank you!')
❺. Alie, la if
komunikaĵo la klaŭzo kun la break
deklaro estas ignorita, kiu metas la ekzekuton je la fino de la while
buklo. Ĉe tiu punkto, la programo ekzekuto saltas reen al la komenco de la while
deklaro ❶ por konstati la kondiĉo. Ekde tiu kondiĉo estas nur la True
Bulea valoro, la ekzekuton eniras la buklo demandi la uzanto tajpi your name
denove. Vidu Figuro 2-12 por la Flowchart de tiu programo.
Kuri yourName2.py, kaj eniros la saman tekston vi eniris por yourName.py. La regrabados programo devus respondi en la sama maniero kiel la originalo.
Figuro 2-12. La Flowchart por la yourName2.py programo kun senfina ciklo. Notu ke la ikso vojo estos logike neniam okazos ĉar la buklo kondiĉo estas ĉiam
True
. daŭrigi Deklaroj
Kiel
break
deklaroj, continue
deklaroj estas uzataj ene cikloj. Kiam la programo ekzekuto atingas continue
deklaro, la programo ekzekuto tuj saltas reen al la komenco de la ciklo kaj reevaluates la buklo la kondiĉo. (Tio estas ankaŭ kio okazas kiam la ekzekuto atingas la finon de la banto.)
Ni uzas
continue
skribi programon kiu petas nomon kaj pasvorton. Eniri la sekvan kodon en novan dosieron redaktanto fenestro kaj savi la programon kiel swordfish.py.
Se la uzanto eniras ajnan nomon krom
Joe
❶, la continue
deklaron ❷ kaŭzas la programo ekzekuto salti reen al la komenco de la ciklo. Kiam reevaluates la kondiĉo, la ekzekuto ĉiam eniras la buklo, ekde la kondiĉo estas simple la valoro True
. Tuj ili faras ĝin preter ke if
deklaro, la uzanto estas petita pasvorton ❸. Se la pasvorton tajpis swordfish
, tiam la break
deklaro ❹ kuras, kaj la ekzekuto saltas el la while
buklo presi Access granted
❺. Alie, la ekzekuto daŭrigas ĝis la fino de la while
buklo, kie tiam saltas reen al la komenco de la ciklo. Vidu Figuro 2-13 por tiu programo Flowchart.
Figuro 2-13. A Flowchart por swordfish.py. La X vojo estos logike neniam okazos ĉar la buklo kondiĉo estas ĉiam
True
.
Kuri ĉi programo kaj donu iujn enigo. Ĝis vi asertas esti Joe, ĝi ne devus peti pasvorton kaj unufoje vi eniras la ĝustan pasvorton, ĝi devus eliri.
Kiu vi estas? Mi fartas bone dankon. Kiu vi estas? Kiu vi estas? joe Saluton, Joe. Kio estas la pasvorton? (Estas fiŝo.) mary Kiu vi estas? joe Saluton, Joe. Kio estas la pasvorton? (Estas fiŝo.) fiŝo glavo Aliro koncedita.
por Loops kaj la gamo () Funkcio
La
while
buklo subtenas looping dum lia kondiĉo estas True
(kio estas la kialo de lia nomo), sed kio se vi volas ekzekuti bloko de kodo nur certa nombro da fojoj? Vi povas fari tion kun for
buklo deklaro kaj la range()
funkcio.
En kodo,
for
komunikaĵo aspektas kvazaux for i in range(5):
kaj ĉiam inkludas la sekvaj: - La
for
ŝlosilvorto - Variablo nomon
- La
in
ŝlosilvorto - Voko al la
range()
metodo kun ĝis tri entjeroj pasis al ĝi - A dupunkto
- Komencante en la sekva linio, la dentado bloko de kodo (nomita
for
klaŭzo)
Ni krei novan programon nomitan fiveTimes.py helpi vin vidi
for
buklo en ago.
La kodo en la
for
buklo la klaŭzo kuras kvinfoje. Unuafoje ĝi kuras, la variablo i
estas metita al 0
. La print()
alvoko en la klaŭzo presos Jimmy Five Times (0)
. Post Python finas kun ripeto tra la tuta kodo interne de la for
buklo estas klaŭzo, la ekzekuto superas al la supro de la ciklo, kaj la for
komunikaĵo pliigoj i
per unu. Tial range(5)
rezultigas kvin ripetoj tra la klaŭzo, kun i
estanta metita 0
, tiam 1
, tiam 2
, tiam 3
, kaj tiam 4
. La variablo i
iros al, sed ne inkludas, la entjero pasis al range()
. Figuro 2-14 bildigas Flowchart por la fiveTimes.py programo.
Figuro 2-14. La Flowchart por fiveTimes.py
Kiam vi kuros ĉi programo, ĝi devus presi
Jimmy Five Times
sekvita de la valoro de i
kvinfoje antaŭ forlasi la for
buklo. Mia nomo estas Jimmy Five Times (0) Jimmy Five Times (1) Jimmy Five Times (2) Jimmy Five Times (3) Jimmy Five Times (4)
noto
Vi povas uzi
break
kaj continue
deklaroj ene for
cikloj ankaŭ. La continue
deklaro daŭros la sekva valoro de la for
buklo la vendotablo, kvazaŭ la programo ekzekuto atingis la finon de la banto kaj reiris al la komenco. Fakte, vi povas uzi continue
kaj break
onidiro nur interne while
kaj for
bukloj. Se vi provas uzi tiujn deklarojn aliloke, Python donos vin eraro.
Kiel alia
for
buklo ekzemplo, konsideru tiun rakonton pri la matematikisto Karl Friedrich Gauss. Kiam Gaŭso estis knabo, instruisto volis doni la klason iuj busywork.
La instruisto diris al ili sumigas ĉiuj la nombroj de 0 al 100. Junaj
Gaŭso elpensis lertan ruzon eltrovi la respondon post kelkaj sekundoj,
sed vi povas skribi Python programo kun for
buklo fari ĉi kalkulo por vi .
La rezulto devus esti 5.050. Kiam la programo unua komenciĝas, la
total
variablo estas agordita 0
❶. La for
buklo ❷ tiam ekzekutas total = total + num
❸ 100 fojojn. Kiam la buklo finis ĉiujn ĝiaj 100 ripetoj, ĉiu entjero de 0
al 100
estos estinta aldonita al total
. Ĉe tiu punkto, total
estas presita al la ekrano ❹. Eĉ sur la plej malrapida komputiloj, tiu programo prenas malpli ol dua kompletigi.
(Junaj Gaŭso eltrovis ke ekzistis 50 paroj de nombroj kiuj aldonis ĝis
101: 1 + 100, 2 + 99, 3 + 98, 4 + 97, kaj tiel plu, ĝis 50 + 51. Ĉar 50 ×
101 estas 5.050 , la sumo de ĉiuj nombroj de 0 ĝis 100 estas 5.050.
Clever infano!)
Ekvivalenta dum Loop
Vi povas reale uzi
while
buklo fari la samon kiel for
buklo; for
maŝojn estas nur pli konciza. Ni reverkas fiveTimes.py uzi while
buklo ekvivalento de for
buklo.
Se vi kuros ĉi programo, la eligo devas rigardi la sama kiel la fiveTimes.py programo, kiu uzas
for
buklo. La ekkuro, haltas kaj Stepping Argumentoj por gamo ()
Kelkaj funkcioj povas nomi kun multnombraj argumentoj apartigita per komo, kaj
range()
estas unu el ili. Tio permesas ŝanĝi la entjera pasis al range()
sekvi ajna sekvenco de entjeroj, inkluzive ekde kelkaj aliaj ol nulo.
La unua argumento estos kie la
for
banto la variablo komenciĝas, kaj la dua argumento estos ĝis, sed ne inkluzive de, la nombro halti ĉe.12 13 14 15
La
range()
funkcio povas ankaŭ esti nomita per tri argumentoj. La unuaj du argumentoj estos la komenco kaj halti valorojn, kaj la tria estos la paŝo argumento . La paŝo estas la kvanto kiu la variablo estas pliigita per post ĉiu ripeto.
Tiel nomante
range(0, 10, 2)
havos de nulo al ok por intervaloj de du.0 2 4 6 8
La
range()
funkcio estas fleksebla en la vico de nombroj produktas por for
bukloj. Por ekzemplo (mi neniam pardonpetas pro mia vortludoj), vi povas eĉ uzi negativan numeron por la paŝo argumento por la for
buklo kalkuli malsupren anstataŭ supren.
Kuranta
for
ciklo presi i
kun range(5, -1, -1)
devus presi de kvin malsupren al nulo.5 4 3 2 1 0
Importante Moduloj
Ĉiuj Python programoj povas voki baza aro de funkcioj nomas korpigita funkcioj , inkluzive de la
print()
, input()
kaj len()
funkcioj vi vidis antaŭe. Python ankaŭ venas kun aro de moduloj nomata norma biblioteko . Ĉiu modulo estas Python programo kiu enhavas rilatajn grupo de funkcioj kiuj povas esti enigita en via programoj. Ekzemple, la math
modulo havas matematiko-rilataj funkcioj, la random
modulo havas hazarda nombro-rilataj funkcioj, kaj tiel plu.
Antaŭ vi povas uzi la funkciojn en modulon, vi devas importi la modulo kun
import
deklaro. En kodo, kiel import
deklaro konsistas el la sekvaj:- la
import
ŝlosilvorto - La nomo de la modulo
- Laŭvole, pli modulo nomojn, tiel longe kiel ili estas apartigitaj per komoj
Unufoje vi importi modulo, vi povas uzi ĉiujn malvarmeta funkciojn de tiu modulo. Ni provu per la
random
modulo, kiu donos al ni aliro al la random.randint()
funkcio.
Entajpu tiun kodon en la dosiero redaktoro kaj konservi ĝin kiel printRandom.py :
Kiam vi kuros ĉi programo, la eligo aspektos ion kiel jene:
4 1 8 4 1
La
random.randint()
funkcio alvoko taksas al hazarda entjero valoro inter la du entjeroj kiuj pasas ŝin. Ĉar randint()
estas en la random
modulo, vi devas unue tajpi random.
antaŭ la funkcio nomo diri Python serĉi ĉi funkcio ene la random
modulo.
Jen ekzemplo de
import
deklaro ke importas kvar malsamaj moduloj:importi hazarda, sys, os, matematiko
Nun ni povas uzi ajnan el la funkcioj en ĉi tiuj kvar moduloj. Ni lernos pli pri ili poste en la libro.
de importado Deklaroj
Alternativa formo de la
import
deklaro estas kunmetita de la from
ŝlosilvorto, sekvita de la modulo nomo, la import
ŝlosilvorto, kaj stelo; ekzemple,from random import *.
Kun tiu formo de
import
komunikaĵo, flamo al funkcioj en random
ne bezonos la random.
prefikso. Tamen, uzante la plena nomo faras por pli legebla kodo, tial estas pli bone uzi la normalan formon de la import
deklaro.Finante Programo Frua kun sys.exit ()
La lasta fluo kontrolo koncepton por kovri sukcesos fini la programon. Tio ĉiam okazas, se la programo ekzekuto atingas la fundon de la instrukcioj. Tamen, vi povas kaŭzi la programo por fini, aŭ eliron, nomante la
sys.exit()
funkcio. Ĉar tiu funkcio estas en la sys
modulo, vi devas importi sys
antaux via programo povas uzi ĝin.
Malfermi novan dosieron redaktanto fenestro kaj eniri la sekvan kodon, ŝparante ĝin kiel exitExample.py :
importado sys dum Vera: print ( 'Tipo eliro por eliri.') respondo = input () se respondo == 'eliro': sys.exit () print ( 'Vi tajpas' + respondo + '.')
Kuri ĉi programo en sencela. Tiu programo havas senfinan buklon sen
break
deklaro ene. La sola maniero ĉi programo finiĝos estas se la uzanto enigas exit
, kaŭzante sys.exit()
al nomi. Kiam response
egalas exit
, la programo finiĝas. Ekde la response
variablo estas fiksita de la input()
funkcio, la uzanto devas eniri exit
por haltigi la programon.resumo
Uzante esprimojn kiuj taksos al
True
aŭ False
(ankaŭ nomitaj kondiĉoj ), vi povas skribi programojn kiuj faras decidojn sur kio kodo por ekzekuti kaj kion kodo salti. Vi povas ankaŭ ekzekuti kodon denove kaj denove en buklo dum certa kondiĉo taksas al True
. La break
kaj continue
deklaroj estas utila se vi bezonas eliri buklo aŭ salti reen al la komenco.
Tiuj fluo kontrolo deklaroj lasos vin skribi multe pli inteligentaj programoj. Ekzistas
alia tipo de fluo kontrolo ke vi povas atingi per skribanta vian
propran funkcioj, kiuj estas la temo de la sekva ĉapitro.
praktiko Demandoj
Q:
|
1. Kio estas la du valoroj de la Bulea datumtipo? Kiel vi skribas ilin?
|
Q:
|
2. Kio estas la tri Bulea operatoroj?
|
Q:
|
3. Skribu la veron tabloj de ĉiu Bulea operatoro (tio estas, ĉiu ebla
kombinaĵo de Buleaj valoroj por la operatoro kaj kion ili taksas al).
|
Q:
|
4. Kion la sekvajn esprimojn taksi al?
(5> 4) kaj (3 == 5) Ne (5> 4) (5> 4) aŭ (3 == 5) ne ((5> 4) aŭ (3 == 5)) (Vera kaj Vera) kaj (Vera == Falsa) (Ne falsa) aŭ (ne vera) |
Q:
|
5. Kio estas la ses komparo operatoroj?
|
Q:
|
6. Kio estas la diferenco inter la egalaj al operatoro kaj la asigno operatoro?
|
Q:
|
7. Klarigu kia kondiĉo estas kaj kie vi uzus tiu.
|
Q:
|
8. Identigi la tri blokoj en tiu kodo
spamado = 0 se spamado == 10: presi ( 'ovojn') se spamado> 5: print ( 'lardo') alie: print ( 'ham') print ( 'spamado') print ( 'spamado') |
Q:
|
9. Skribu kodon kiu presas
Hello se 1 estas stokita en spam , presaĵoj Howdy se 2 estas stokita en spam kaj presaĵoj Greetings! se io alia estas stokita en spam . |
Q:
|
10. Kion vi povas premi se via programo estas senmoviĝita en senfina ciklo?
|
Q:
|
11. Kio estas la diferenco inter
break kaj continue ? |
Q:
|
12. Kio estas la diferenco inter
range(10) , range(0, 10) , kaj range(0, 10, 1) en for buklo? |
Q:
|
13. Skribu mallongan programon kiu presas la numerojn
1 al 10 uzante for buklo. Tiam skribi ekvivalenta programo kiu presas la numerojn 1 al 10 uzante while buklo. |
Q:
|
14. Se vi estus funkcio nomita
bacon() interne modulon nomita spam , kiel vi nomas ĝin post importanta spam ?
Ekstra kredito: Rigardu la
round() kaj abs() funkcioj sur la Interreto, Kaj eltrovi kion ili faras. Sperti kun ili en la interaga ŝelo. |
Nenhum comentário:
Postar um comentário