Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!
Python,számos
hszesze
kérdése
412
Írj egy Python programot, amely bekér három számot a felhasználótól és kiírja a képernyőre, hogy a számok közül bármelyik kettőnek az összege egyenlő-e a harmadik számmal!
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Középiskola / Informatika
Válaszok
3
VF{ Informatikus }
megoldása
szam_lista = [int(input(str(szam + 1) + '. szám: ')) for szam in range(3)]
szam_lista.sort()
if szam_lista[0] + szam_lista[1] == szam_lista[2]:
print(szam_lista[0], '+', szam_lista[1], '=', szam_lista[2])
else:
print('Nem találok összefüggést a számok közt')
Amennyiben negatív számokat is kell kezeljünk, már kevésbé szép:
Ezen lehet ugyan picit egyszerűsíteni, de attól még nem lesz szebb:
def egyenloe(egy, ketto, harom):
if egy + ketto == harom:
print(egy, '+', ketto, '=', harom)
return True
szam1 = int(input('1. szám: '))
szam2 = int(input('2. szám: '))
szam3 = int(input('3. szám: '))
egyenloe(szam1, szam2, szam3) or \
egyenloe(szam2, szam3, szam1) or \
egyenloe(szam3, szam1, szam2) or \
print('Nem találok összefüggést a számok közt')
Ha viszont segítségül vehessük az itertools module-t, akkor a cycle() használatával átírhatjuk az első megoldást csúnya kódismétlések nélkül:
from itertools import cycle
szam_lista = cycle([int(input(str(szam + 1) + '. szám: ')) for szam in range(3)])
for _ in range(3):
if next(szam_lista) + next(szam_lista) == next(szam_lista):
print(next(szam_lista), '+', next(szam_lista), '=', next(szam_lista))
break
else:
next(szam_lista)
else:
print('Nem találok összefüggést a számok közt')
Módosítva: 1 éve
2
ifigazsi:
Nagyon szép megoldás, de odaírnám mi történik. (sort -> emiatt csak azt vizsgálod, hogy a legnagyobb számmal egyenlő-e a két másik összege)
1 éve0
VF:
Arra gondolsz, hogy lehetnek negatív számok is? Azt valóban nem veszi figyelembe. :(
1 éve0
Nayem:
Talán egy kicsit túl lett tolva Beírtam én is a megoldásom.
1 éve0
Nayem:
Ja igen, és nem volt arról szó, hogy egész szám legyen.
1 éve0
VF:
Nayem, viszont lebegőpontos értékek egyenlőségéről meg csak tűréshatárral érdemes szót ejteni. Nincs rá garancia, hogy egy float 2-szer eltárolt példányai egyenlőek lesznek. Művelet eredményeként még kevésbé.
1 éve0
ifigazsi
válasza
VF megoldásai teljesen jók, pozitív számok esetén. A., egy megoldás., B egy kicsit bővített kiirja, hol történt egyezés. ((de VF átírt kódja már ugyanaz)).
for i in itertools.permutations([szam1, szam2, szam3]):
if eval(f"{i[0]} + {i[1]}") == i[2]:
print(f"{i[0]} + {i[1]} = {i[2]}")
else:
print("Nincs két olyan szám, melyek összege a 3. szám.")
break
Ha nem kell úgy, hogy a + b = c és b + a = c formában kiírni, akkor raksz egy break-et az első print után.