Lehet ezt egyszerűbben (alapok)?
Jövőre Proginfóra fogok járni, ezért, hogy ne érjen teljes sokk az elején elkezdtem autodidakta módon kicsit tanulgatni programozni, elsőnek python nyelven. Azt szeretném kérdezni, hogy a következő feladatra van-e egyszerűbb, jobb, kevesebb változót igénylő megoldás? Mert így nekem egy kicsit komplikáltnak tűnik.
A feladat: Írjon egy programot, ami a kiindulásul radiánokban megadott szögeket fokokba, percekbe és másodpercekbe számolja át
Megoldás:
rad=float(input("Adja meg a kiindulási radiánt:"))
fok=float(rad*57.345)
fokEgesz=int(rad*57.345)
fokPerc=float((fok-fokEgesz)*60)
fokPercEgesz=int((fok-fokEgesz)*60)
fokMasodEgesz=int((fokPerc-fokPercEgesz)*60)
print("Az ön által radiánban megadott érték fokokban:", fokEgesz,"fok",fokPercEgesz,"szögperc",fokMasodEgesz,"szögmásodperc")
Előre is köszönöm a válaszokat :)
A Pythonnak igazából van beépített függvénye, ami radiánból fokra, és fokból radiánba vált (meg fogsz lepődni, radians és degrees a nevük), mindkettő a math függvénykönyvtárban.
Amúgy nem tudom, pontosan hova készülsz, de nem kell nagyon összetojnod magad, a proginfó képzés a programozást eléggé az alapoktól kezdi építeni, azzal az indokkal, hogy "nem mindenki jön ide programozási ismeretekkel" :D
Annyit szerintem ezen a szinten is lehet rajta faragni, hogy nem számolsz ki újra mindent az egész értékekehez.
fokEgesz = int(fok)
stb.
Haladóbb szinten meg úgyis mindig az lesz az első kérdés: van-e már erre kész könyvtár? 😃
Először is átváltásnál érdemes mindig a beépített konstansokat és/vagy függvényeket használni hogy pontos legyen a számítás. Nem nagyon fordul elő olyan eset hogy neked kéne beadnod kézzel egy ismert konstanst.
fok = rad*180/math.pi
vagy
fok = math.degrees(rad)
Másrészt köved figyelemmel a típusokat. Ha valami már float, nem váltsd át még egyszer floatba mert egyfelől felesleges kód, másfelől pedig megzavarja az embert: ha floatba váltjuk akkor miben volt eddig?
Ezek után pedig az átváltás: ilyen átváltásoknál maradékos osztást szoktunk használni. Egész osztással megkapjuk az egész részét a foknak, maradékos osztással megkapjuk a maradékot amit tovább tudunk számolni percre, majd ugyan így másodpercre is.
123 perc = 123//60 óra (=2), 123%60 perc (=3)
Amint látod érdemes a nagy értékek felől indulni és leosztani ahelyett hogy a kisebbeket szorzod fel mert akkor nem kell tárolni a részeredményt.
12.34 fok = 44424 másodperc (12.34 * 60 * 60)
44424 másodperc = 44424 // 60 perc (=740) és 44424 % 60 másodperc (=24)
740 perc = 740 // 60 fok (=12) és 740 % 60 (=20) perc
Így 12.34 fok = 12 fok, 20 perc, 24 másodperc
És akkor jönnek megint a beépített függvények: ha egyszer meg akarod tudni egy szám egész és tört részét is akkor nem kell külön elvégezni az egész és maradékos osztást, el lehet azt egyszerre is a divmod függvénnyel, így a végeredmény valahogy így néz ki:
rad = float(input("Balh blah: "))
perc, másodperc = divmod(math.degrees(rad) * 3600, 60)
fok, perc = divmod(perc, 60)
print("Blah blah: ", fok, perc, másodperc)
Természetesen úgy is jó ahogy te csináltad, csupán két elérő megoldás ugyan arra a problémára. Sokszor ha rövidítesz a kódon csak átláthatatlanabb lesz, ami viszont szúrta a szemem az ez és az ehhez hasonló sor párok:
fokPerc=float((fok-fokEgesz)*60)
fokPercEgesz=int((fok-fokEgesz)*60)
helyett legyen
fokPerc = (fok - fokEgesz) * 60
fokPercEgesz = int(fokPerc)
Ehhez a feladathoz nem is kellene input(), ez nem a könyv hibája...
A rad változónak értéket adsz és már számolhatsz is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!