6: Sąlygos

Iki šiol mūsų programos buvo vykdomos nuosekliai - nepraleidžiant nei vieno veiksmo. Štai pavyzdys ("pereikite" programą pažingsniui, naudodami mygtukus ar klaviatūros rodykles).

Šioje pamokoje išmoksime kaip naudoti sąlygos sakinį, kuris vykdo kodą tik esant nurodytoms sąlygoms. Pvz., ši programa atspausdins pranešimą apie pensiją tik, jei asmuo turės pakankamai metų. Mes sujungiame: if age > 65: (reiškiantį, "jei age daugiau nei 65") ir print('Pensija yra gerai!'). Pabandykite:

Pastebėkime, atspausdinimo teiginys buvo praleistas, nes amžius age buvo tik 31! Kas atsitiks, jei birthYear pakeisime į 1928?

Ar pastebėjote skirtumą? Apatinė versija (kai kintamuoju age gaunasi 85) atspausdina dvi eilutes, ir vykdo visą programą.

Naudodami „if“ sakinį turime papildomai nuo krašto atitraukti (angl. „indent“) nuo jo priklausančias eilutes (kaip ką tik buvusiame pvz.). Atitraukimas gali talpinti daugiau teiginių - tada kiekviena eilute turi būti atitraukta.

  • pabandykite paleisti konsolę arba programos sekimą su 1982 gimimo metais. Abi atitrauktos eilutės bus praleistos.

Kitame uždavinyje reikės parašyti programą, naudojant palyginimo sąlygas. Jau matėme "if x > y:". Jums taip pat gali praversti:

  • if x < y: reiškia "jei x yra mažesnis už y"
  • if x >= y: reiškia "jei x yra didesnis ar lygus y"
  • if x <= y: reiškia "jei x yra mažesnis ar lygus y"

Programavimo pratimas: 2 variantai
Parašykite programą, kuri perskaito įvestą blynų kiekį pancakes = int(input()). Jei blynų (pancakes) yra daugiau negu 3, atspausdinkite Yum!. Jei yra ne daugiau negu 3 - atspausdinkite Still hungry!. Hint
Žemiau galima įvesti duomenis programai (angl. "input")

Sąlygos sakinio struktūra

    • Antraštė (pirmoje eilutėje) turi tris dalis: žodį „if“, «sąlygą» ir dvitaškį „:
if «sąlyga»:
  • Priklausantys veiksmai - atitrauktos eilutės. Atitraukimo tarpų kiekis gali būti bet koks, tačiau visoms eilutėms vienodas - kitaip bus klaida. Kai papildomas atitraukimas baigiasi, Python supranta, kad baigėsi “if” sakinio veiksmai.

Vienodai atitrauktų (sulygiuotų) veiksmų grupė vadinama bloku. Blokai naudojami ir kitose vietose, pavyzdžiui, kartojimo sakiniuose (cikluose) ir apibrėžiant/kuriant naujas funkcijas (apie tai - savo laiku :).

Kitas uždavinys sudarytas iš 4 dalių - jas galite atlikti bet kokia tvarka.

1 dalis: nereikalingas atitraukimas
Sumaišytų eilučių užduotis: Nereikalingas atitraukimas
Turite gauti šį klaidos pranešimą:

IndentationError: unexpected indent
(Lygiavimo klaida: netikėtas atitraukimas.)
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
2 dalis: netinkamas patraukimas atgal
Sumaišytų eilučių užduotis: Netinkamas patraukimas atgal
Turite gauti šį klaidos pranešimą:

IndentationError: unindent does not match any outer indentation level
(Lygiavimo klaida: patraukimas atgal neatitinka jokio ankstesnio lygiavimo)
  • if 1000 < 10:
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
  • print("message 1")
3 dalis: atitraukimo reikia, bet nėra
Sumaišytų eilučių užduotis: Atitraukimo reikia, bet nėra
Turite gauti šį klaidos pranešimą:

IndentationError: expected an indented block
(Lygiavimo klaida: tikimasi atitraukto bloko)
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
4 dalis: teisingas lygiavimas
Sumaišytų eilučių užduotis: Teisingas lygiavimas
Padarykite, kad nebūtų jokių klaidų!
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")

Loginės reikšmės True, False ir duomenų tipas bool

Iki šiol sąlygoje matėme skaičių palyginimą x > y, kuris gali būti įvertintas „taip“ arba „ne“ (sąlyga teisinga arba klaidinga). Tai yra loginės reikšmės (angliškai vadinamos „Boolean“ - matematiko George Boole (Būlio) garbei). Python’e tai atitinka bool duomenų tipas, kuris turi tik dvi galimas reikšmes: True ir False.

Pavyzdys
Loginės reikšmės True/False

Svarbu: Python'e True ir False turi būt rašomos iš didžiosios raidės, nes kitaip bus klaida..

Daugiau palyginimo veiksmų

Turbūt pamenate, kad veiksmai >, <, <=, ir >= palygina du skaičius ir grąžina loginę reikšmę. Yra dar pora palyginimo veiksmų:

  • x == y - „ar lygu?“ - grąžina True jei x ir y yra lygūs
  • x != y - „ar nelygu?“ - grąžina True jei x ir y nėra lygūs
  • == ir != tinka ne tik skaičiams, bet ir kitų tipų duomenims.

Kodėl naudojami du lygyės ženklai ==? Vienas ženklas = reiškia priskyrimą, todėl nebetinka - palyginimo metu kompiuteris atlieka kitokį veiksmą. Matematikoje abiem atvejais naudojamas =, todėl veiksmų = ir == painiojimas būna klaidų priežastimi.)

Štai pavyzdys, kurį atlikdami turėsite panaudoti vieną iš naujų palyginimo veiksmų.

Programavimo pratimas: Koks ženklas?
Parašykite programą kuri perskaito sveiką skaičių iš įvesto teksto ir grąžina žodžius Positive arba Negative, žodžiai turi būti grąžinami iš didžiosios raidės. Jei skaičius yra nulis, programa turėtų grąžinti Zero.
Žemiau galima įvesti duomenis programai (angl. "input")

Mes ką tik susipažinome su bloko sąvoka (reiškiančią vienodai sulygiuotų eilučių grupę). Programos blokai gali talpinti kitus blokus - tada jie vadinami įdėtiniais (angl. „nested“) blokais:

if password=='openSesame':
    print('User logged on.')
    if hour>17:
        print('Good evening!')
    print('Enter a command:')
Čia pirmo lygmens bloke yra 4 eilutės, o antro lygmens - viena (viduje pirmojo bloko):
if password=='openSesame':  
print('User logged on.')
if hour>17:
print('Good evening!')
print('Enter a command:')

Pasirinkimo užduotis: Vienas kitame esantys (įdėtiniai) „if“ sakiniai
Kuris programo rezultatas nėra galimas?
Teisingai! Jei žinutė yra rodoma, reiškias slaptažodis tiko - yra vykdomas bendras - mėlynas - blokas. Šiuo atveju net jei hour>17 yra netiesa (vidinis - raudonas - blokas yra praleidžiamas), eilutė print('Enter a command:'), bus vis tiek atliekama.

Dabar turite panaudoti įdėtinius blokus, kurie leis sudėtingesnį amžiaus skaičiavimą.

Programavimo pratimas: Amžiaus tikrinimas
Parašykite programą, kuri perskaito įvestą sveiką skaičių - asmens amžių. Jei amžius yra 18 ar daugiau atspausdinkite You can vote. Jei amžius yra tarp 0 ir 17 (imtinai), atspausdinkite Too young to vote. Jei amžius yra mažiau nei 0, atspausdinkite You are a time traveller.
Žemiau galima įvesti duomenis programai (angl. "input")

Vėliau, 9 pamokoje, sužinosite, kaip tikrinti kelis sąlygos variantus naudojant else („kitu atveju“) ir elif („else if“), bei apie loginius veiksmus "and", "or", "not". Kolkas, eikime į kitą pamoką.