A Pythonban az if, az elif (az 'else and if' összevonása) és az else utasítások segítségével szabályozhatod a program végrehajtásának menetét, és döntéseket hozhatsz benne.
Sok más programozási nyelvtől eltérően a Python 3.9-es és korábbi verziói nem kínálnak formális case-switch utasítást, helyette több elif utasítással érnek el hasonló eredményt.
A Python 3.10 egy structural pattern matching nevű, a case-switch-hez hasonló utasítást vezet be, amelyet egy másik fogalomban tárgyalunk majd külön.
A feltételes utasítások olyan kifejezéseket használnak, amelyeknek True vagy False értékre kell kiértékelődniük, akár úgy, hogy közvetlenül bool típust adnak vissza, akár úgy, hogy „truthy” vagy „falsy” értékként értékelődnek ki.
x = 10
y = 5
# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
print("x is greater than y")
...
>>> x is greater than y
Ha az if-fel együtt szerepel, az opcionális else kódblokk akkor fut le, amikor az eredeti if feltétel False értékre értékelődik ki:
x = 5
y = 10
# The comparison '>' here returns the bool 'False',
# so the 'else' block is executed instead of the 'if' block.
if x > y:
print("x is greater than y")
else:
print("y is greater than x")
...
>>> y is greater than x
Az elif segítségével több feltételt is kiértékelhetsz, illetve több ágra bonthatod a kódot.
x = 5
y = 10
z = 20
# The 'elif' statement allows for the checking of more conditions.
if x > y:
print("x is greater than y and z")
elif y > z:
print("y is greater than x and z")
else:
print("z is greater than x and y")
...
>>> z is greater than x and y
A Boolean-műveleteket és az összehasonlításokat össze is kapcsolhatod feltételes utasításokkal, hogy összetettebb vizsgálatokat végezhess:
>>> def classic_fizzbuzz(number):
if number % 3 == 0 and number % 5 == 0:
say = 'FizzBuzz!'
elif number % 5 == 0:
say = 'Buzz!'
elif number % 3 == 0:
say = 'Fizz!'
else:
say = str(number)
return say
>>> classic_fizzbuzz(15)
'FizzBuzz!'
>>> classic_fizzbuzz(13)
'13'
Ebben a feladatban egy egyszerű vezérlőrendszert fejlesztünk egy atomreaktorhoz.
Ahhoz, hogy egy reaktor energiát termeljen, kritikus állapotban kell lennie. Ha a reaktor a kritikus állapotnál alacsonyabb szinten van, károsodhat. Ha a reaktor állapota túllépi a kritikus szintet, túlterhelődhet, és zónaolvadáshoz vezethet. Szeretnénk csökkenteni a zónaolvadás esélyét, és megfelelően kezelni a reaktor állapotát.
A következő három részfeladat mindegyike ahhoz kapcsolódik, hogy kódot írjunk az ideális reaktorállapot fenntartásához.
A vezérlőrendszer legelső feladata, hogy ellenőrizze, a reaktor kritikussági szempontból kiegyensúlyozott-e. A reaktor akkor van kritikussági szempontból kiegyensúlyozott állapotban, ha teljesíti a következő feltételeket:
Valósítsd meg az is_criticality_balanced() függvényt, amely a kelvinben mért temperature és a neutrons_emitted paramétert várja, és True értéket ad vissza, ha a kritikussági feltételek teljesülnek, False értéket, ha nem.
>>> is_criticality_balanced(750, 600)
True
Amint a reaktor elkezd energiát termelni, meg kell határozni a hatásfokát. A hatásfok négy sávba sorolható:
green -> 80% vagy annál nagyobb hatásfok,orange -> 80%-nál kisebb, de legalább 60%-os hatásfok,red -> 60% alatti, de még legalább 30%-os hatásfok,black -> 30%-nál kisebb hatásfok.A százalékos értéket a (generated_power/theoretical_max_power)*100 képlettel számíthatod ki,
ahol generated_power = voltage * current.
Figyelj rá, hogy a százalékos érték általában nem egész szám, ezért ügyelj a
< és <= összehasonlítások megfelelő használatára.
Valósítsd meg a reactor_efficiency(<voltage>, <current>, <theoretical_max_power>) függvényt három paraméterrel: voltage,
current és theoretical_max_power.
A függvény a reaktor hatásfoksávját adja vissza: 'green', 'orange', 'red' vagy 'black'.
>>> reactor_efficiency(200,50,15000)
'orange'
Az utolsó részfeladatodban egy hibabiztos mechanizmust hozol létre, amely megakadályozza a túlterhelést és a zónaolvadást. Ez a mechanizmus meghatározza, hogy a reaktor az ideális kritikussági küszöb alatt, annál, vagy afölött van-e. A kritikusság ezután növelhető, csökkenthető vagy leállítható a szabályozórudak reaktorba helyezésével (vagy eltávolításával).
Valósítsd meg a fail_safe() függvényt, amely három paramétert vár: a kelvinben mért temperature,
a neutrons_produced_per_second és a threshold értékét, és egy állapotkódot ad ki a reaktorhoz.
Ha a temperature * neutrons_produced_per_second a threshold 90%-ánál kisebb, a kimenet a 'LOW'
állapotkód, ami azt jelzi, hogy a szabályozórudakat el kell távolítani az energiatermeléshez.
Ha a temperature * neutrons_produced_per_second érték a threshold 10%-os sávján belül van (tehát 0-10%-kal kisebb a küszöbnél, egyenlő vele, vagy 0-10%-kal nagyobb nála), a reaktor kritikus állapotban van, és a 'NORMAL' állapotkódot kell kiadni, ami azt jelzi, hogy a reaktor optimális állapotban van, és a szabályozórudak ideális helyzetben vannak.
Ha a temperature * neutrons_produced_per_second nincs a fent megadott tartományokban, a reaktor
zónaolvadás felé halad, és a 'DANGER' állapotkódot kell kiadni, hogy azonnal leállítsák a reaktort.
>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.