Python Academy · Oppitunti

Vartijat ja jokerimerkit

Lisää ehtoja ja kaikenkattavia tapauksia

Oppitunti 4/413 vaihetta

Vartijat ja jokerimerkit on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Sovitusten tarkentaminen

Joskus rakenteellinen hahmo ei riitä, vaan tarvitsette lisäksi ehdon. Suojausehdot lisäävät if-testin tapaukseen, ja jokerimerkit tarjoavat joustavia yleissovittimia.

Suojausehdon lisääminen

Kirjoittakaa if <condition> hahmon jälkeen. Tapaus täsmää vain, kun hahmo sopii ja suojausehto on tosi.

n = 7

match n:
    case x if x < 0:
        print('negative')
    case x if x == 0:
        print('zero')
    case x if x > 0:
        print('positive')

Suojausehdot käyttävät sidottuja nimiä

Suojausehto voi viitata hahmon sitomiin muuttujiin. Tässä sidotun parin yhtäsuuruus tarkistetaan.

point = [3, 3]

match point:
    case [x, y] if x == y:
        print('on the diagonal')
    case [x, y]:
        print('off the diagonal')

Jos suojausehto epäonnistuu

Jos rakenne täsmää mutta suojausehto on epätosi, sovittaminen jatkuu seuraavaan tapaukseen eikä pysähdy.

value = 5

match value:
    case n if n > 100:
        print('big')
    case n:
        print('fell through to here:', n)

Suojausehdot luokkahao?mojen kanssa

Suojausehdot toimivat kaikentyyppisten hahmojen, myös luokkahao?mojen, kanssa ja mahdollistavat tarkat ehdot objektin attribuuteille.

from dataclasses import dataclass

@dataclass
class Order:
    total: float

def discount(order):
    match order:
        case Order(total=t) if t > 100:
            return 'free shipping'
        case Order():
            return 'standard shipping'

print(discount(Order(150)))
print(discount(Order(50)))

Jokerimerkin kertaus

Yksinäinen alaviiva _ täsmää mihin tahansa eikä sido mitään. Viimeisenä tapauksena se käsittelee kaiken, mikä ei täsmännyt aiemmin.

x = 'unexpected'

match x:
    case 'a':
        print('letter a')
    case _:
        print('catch-all')

Sidonta vai jokerimerkki

Nimetty sidonta täsmää myös mihin tahansa, mutta säilyttää arvon, kun taas _ hylkää sen. Käyttäkää nimeä, kun tarvitsette arvon rungossa.

value = 42

match value:
    case 0:
        print('zero')
    case other:        # capture: keeps the value
        print('value was', other)

Jokerimerkit hahmojen sisällä

Alaviiva voi esiintyä suurempien hahmojen sisällä niiden osien ohittamiseksi, joista ette ole kiinnostuneita.

record = ('user', 42, 'ignore_me')

match record:
    case ('user', user_id, _):
        print('user id:', user_id)

OR-operaattorin, suojausehtojen ja jokerimerkkien yhdistäminen

Nämä ominaisuudet toimivat yhdessä. OR-hahmo, sitä seuraava suojausehto ja lopuksi yleissovitin muodostavat ilmaisuvoimaisen luokittelijan.

def classify(n):
    match n:
        case 0 | 1:
            return 'binary digit'
        case x if x % 2 == 0:
            return 'even'
        case _:
            return 'odd'

print(classify(0))
print(classify(4))
print(classify(7))

Kattavuus

Toisin kuin jotkin muut kielet, Python ei vaadi hahmonsovitusta kattavaksi. Jos mikään tapaus ei täsmää, lause ei yksinkertaisesti tee mitään. Lisätkää lopuksi case _, kun haluatte varmistaa, että jokin haara suoritetaan aina.

color = 'purple'
result = 'no match'

match color:
    case 'red':
        result = 'stop'
    case 'green':
        result = 'go'

print(result)

Suojausehdot puretulle datalle

Suojausehdot sopivat luontevasti yhteen sekvenssi- ja kuviomallien kanssa, joten voitte testata juuri poimimianne arvoja.

data = [10, 20]

match data:
    case [a, b] if a + b > 25:
        print('sum is large')
    case [a, b]:
        print('sum is small')

Pikakertaus

Mitä tapahtuu, kun hahmo täsmää rakenteeltaan mutta sen suojausehto on epätosi?

Kertaus

Opitte lisäämään ehtoja ja kaiken kattavia tapauksia.

  • Suojausehdot lisäävät if-testin, joka voi käyttää sidottuja nimiä.
  • Epäonnistunut suojausehto siirtää käsittelyn seuraavaan tapaukseen.
  • _ täsmää ja hylkää arvon, kun taas nimi sitoo sen.
  • Lisätkää viimeiseksi case _, kun haluatte varmistetun haaran.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”Vartijat ja jokerimerkit” ilmainen?

Kyllä – oppitunnin ”Vartijat ja jokerimerkit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Vartijat ja jokerimerkit”?

Lisää ehtoja ja kaikenkattavia tapauksia Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Vartijat ja jokerimerkit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. match- ja case-perusteet
  2. Sekvenssien ja kuvausten täsmäytys
  3. Luokkamallit
  4. Vartijat ja jokerimerkit
← Takaisin: Python Academy