Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!
Python,számos
hszesze
kérdése
81
Í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 hónapja
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 hónapja0
VF:
Arra gondolsz, hogy lehetnek negatív számok is? Azt valóban nem veszi figyelembe. :(
1 hónapja0
Nayem:
Talán egy kicsit túl lett tolva Beírtam én is a megoldásom.
1 hónapja0
Nayem:
Ja igen, és nem volt arról szó, hogy egész szám legyen.
1 hónapja0
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 hónapja0
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.