Az előző gyakorló részben írtun egy másodfokúfüggvény számoló programot. Most készítsünk egy olyan programot, ami kiszámítja egy másodfokó egyenlet két gyökét! A felhasználó meg fogja tudni adni az egyenlet három paraméterét. Mivel egy másodfokú egyenletnek lehet nulla, egy vagy két valós gyöke, ezért ezeket a lehetőségeket különbözően fogjuk kiírni a szöveges konzolra. Jól fog tehát jönni a nemrég tanult feltételhez kötött végrehajtás.
def quadratic_eq_roots(a, b, c):
...
def quadratic_eq_roots(a, b, c):
discr = b**2 - 4.0 * a * c
def quadratic_eq_roots(a, b, c):
discr = b**2 - 4.0 * a * c
if discr > 0:
pass
elif discr == 0:
pass
else:
pass
A pass kulcsszó jelzi a Pythonnak, hogy még nem írtunk tényleges törzset a feltételekhez.
Egyfajta üres implementáció. Aggodalomra semmi ok, pillanatokon belül át fogjuk írni.
Korábban szó esett arról, hogy lebegőpontos számokat (float) nem érdemes == operátorral összehasonlítani.
Ebben az esetben azért indokolt az egyenlőség vizsgálata, mert a 0 diszkriminánst mégis csak külön szeretnénk kezelni.
Figyeljük meg, hogy a harmadik esethez nem kell külön feltételt megfogalmazni,
mivel a korábbi két feltétel már lefedte a pozitív és 0 értékeket.
Kizárásos alapon csak a negatív számok maradtak.
if discr > 0:
r1 = (-b - discr**0.5) / 2.0 * a
r2 = (-b + discr**0.5) / 2.0 * a
print(f'Az egyenlet gyökei {r1} és {r2}.')
elif discr == 0:
r12 = -b / 2.0 * a
print(f'Az egyenlet kettős gyöke {r12}.')
else:
print(f'Az egyenletnek nincs valós gyöke.')
Ezzel ez a függvény elkészült.
if __name__ == '__main__':
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
quadratic_eq_roots(a, b, c)
Itt a teljes programkód:
def quadratic_eq_roots(a, b, c):
discr = b**2 - 4.0 * a * c
if discr > 0:
r1 = (-b - discr**0.5) / 2.0 * a
r2 = (-b + discr**0.5) / 2.0 * a
print(f'Az egyenlet gyökei {r1} és {r2}.')
elif discr == 0:
r12 = -b / 2.0 * a
print(f'Az egyenlet kettős gyöke {r12}.')
else:
print(f'Az egyenletnek nincs valós gyöke.')
if __name__ == '__main__':
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
quadratic_eq_roots(a, b, c)
A zöld nyíllal futtassuk a kódot! A konzolban kérni fogja sorban a három paramétert. A számok beírása után enterrel léphetünk tovább. Azt is kipróbálhatjuk, hogy mi történik, ha nem számot adunk meg. Igen, így van: ekkor csúnyán leesik az egész. (Sad story...) A hiba oka, hogy a float() függvény nem tudja számmá konvertálni az olyan szöveget, amely nem csak számjegyekből és tizedespontból áll. Egyelőre tekintsünk el ettől! Majd később nézünk valamilyen megoldást. Bízzunk továbbra is a felhasználó felvilágosultságában és jóindulatában!