Pythonban hogyan kell menteni úgy, hogy ne a jegyzettömböt nyissa meg?
File -> Save as -> kimentem az asztalra valami.py néven és ha rámegyek a jegyzettömböt nyitja meg
Python 3.5.1-em van
tabaki, félreérted!!!!! :D nem arra gondolok amit te írtál. Azt könnyű átírni :)
Én a könyvben lévő feladatra gondoltam amikor x másodpercet átváltjuk évekre, napokra meg miegymásra.
Bocs, oké. Először is, meg kell határoznod, hogy egy évben, hónapban, hétben, napban, órában, percben hány másodperc van, és a kérdéses számú másodperceket ezekkel az értékekkel kell maradékos osztással elosztanod -- az osztás eredményét az int() függvénnyel kerekítve kapod meg az osztás egész részét, a maradékot pedig a modulóval, és mindig ezt osztod el azután a következő, kisebb egységgel.
Például 75 másodpercet akarsz percekre és másodpercekre átszámolni:
perc = int(75 / 60) # Ennyiszer van meg benne a 60 másodperc, vagyis 1 perc, és...
masodperc = 75 % 60 # Ennyi marad az osztás után, vagyis 15 másodperc
A feladat korrekt megoldása nemcsak az évek, hanem a hónapok hosszának eltérése miatt is problémás. Mivel a kérdésben nem esik szó a pontos kezdődátumról, világos, hogy igen sok helyes válasz lehetséges (ugyanakkor, mivel a naptár szerkezete ismert, nyilván nem végtelen számú). Bátran ki merem jelenteni, hogy a teljes megvalósítás egyelőre messze meghaladja a képességeidet, ezért javaslom, hogy a feladatot butítsd le oly módon, hogy minden évet 365, és minden hónapot 30 napnak számolj.
Itt közlök egy leegyszerűsített változatot, amely csak napokat, órákat, perceket és másodperceket számol. Gondolom, a bővítés nem okoz majd problémát. Nagy vonalakban:
A példában 123456 másodpercet tagolunk.
A teljes időt az ido változóban adjuk meg. Ugyanezt az értéket kapja a még nem tisztázott szerepű másodperceket számláló mp változó is.
Először kiszámoljuk a különféle időegységek másodpercben mért hosszát.
Az összes másodpercet elosztjuk egy nap hosszával, és egy nap nevű változóban tároljuk.
A maradékot modulóval meghatározva beolvassuk mp-be, amely így a napokban mérhető időn túli másodpercek számát mutatja.
Hasonlóan számoljuk ki az órák és percek számát és maradékát. Ezek után mp értelemszerűen az összes előző egységnél kisebb értéket, a másodpercek számát tartalmazza.
Végül sorban kiíratjuk a különböző változók értékét, majd ellenőrzésként az elején kiszámolt másodperchosszokkal felszorozva összeadjuk őket.
perchossz = 60
orahossz = perchossz * 60
naphossz = orahossz * 24
mp = ido = 123456
nap = int(mp / naphossz) # egesz osztas
mp = mp % naphossz # maradek (modulo)
ora = int(mp / orahossz)
mp = mp % orahossz
perc = int(mp / perchossz)
mp = mp % perchossz
print ido, "masodperc =", nap, " nap,", ora, "ora,", perc, " perc es", mp, "masodperc"
print "Ellenorzes: ", nap * naphossz + ora * orahossz + perc * perchossz + mp
Írd meg a program hiányzó részét. Kíváncsi vagyok, hogy sikerül.
perchossz = 60
orahossz = perchossz * 60
naphossz = orahossz * 24
honaphossz = naphossz * 30
evhossz = honaphossz * 12
mp = ido = 123456
ev = int(mp/evhossz)
mp = mp%evhossz
honap = int(mp/honaphossz)
mp = mp%honaphossz
nap = int(mp / naphossz) # egesz osztas
mp = mp % naphossz # maradek (modulo)
ora = int(mp / orahossz)
mp = mp % orahossz
perc = int(mp / perchossz)
mp = mp % perchossz
print ido, "masodperc ="ev, " év,", honap, " hónap,", nap, " nap,", ora, "ora,", perc, " perc es", mp, "masodperc"
print "Ellenorzes: ", ev*evhossz+honap*honaphossz+ nap * naphossz + ora * orahossz + perc * perchossz + mp
Na. Az elvet láthatólag megértetted, négy megjegyzésem volna csak:
1. Az evhossz = honaphossz * 12 kifejezés annyiban tetszik, hogy nem ragaszkodtál az általam javasolthoz, hanem saját ötlettel oldottad meg. Így viszont egy év hossza 360 napra jön ki, ami elég durva kerekítés az általánosnak mondható 365 naphoz képest, pedig az még mindig csaknem egy negyed nappal rövidebb az év valóságos hosszánál. Ezért én az év esetén is a napok számának felszorzását javasolom inkább.
2. Az rendben van, hogy elég jól megírtad a programot, de futtattad is? Nálam ugyanis nem működött egy vesszőhiba, illetve az ékezetes betűk miatt. Addig sohase tekintsd befejezettnek a programot, amíg nem sikerül ténylegesen lefuttatnod. Nem tudom, te mivel szerkeszted a kódot, én javaslom a Geany nevű kis szerkesztőprogramot, amely nem sokkal bonyolultabb a Jegyzettömbnél, viszont képes arra, hogy .pyc fájlba lefordítsa és/vagy futtassa a kódodat (természetesen csak akkor, ha a python-értelmezőt már telepítetted, de ez nálad megvan).
3. A műveleti jeleket valóban nem kell szóközökkel elválasztani az értékektől, tehát például az általad írt mp%honaphossz kifejezés tökéletesen rendben van, mégis érdemes szellősebbre venni, mert úgy sokkal áttekinthetőbb a kód, ami a hibakeresést nagyban megkönnyíti.
4. Az általam írt változatot itt olvashatod:
Mint látható, én heteket is számoltam, tulajdonképpen csak trehányságból, mert nem vettem a fáradságot, hogy gondosabban elolvassam a feladatot. Neked is javaslom, hogy az esetleges további programjaidat a pastie.org-ra tedd fel, mivel a Gyakori Kérdések nem engedik a behúzások használatát, aminek pedig a pythonban különleges szerepe van.
Arra gondoltam, hogy megpróbálhatnád a pontosabb számolást más alapon is elvégezni. Az év tényleges hossza 365,24218967 nap, ha ezt számolod át kerek másodpercekre, bizonyos szempontból az is tekinthető egy évnek (nem a szökőévekkel váltakozó naptári év, hanem az úgynevezett tropikus év, amely egyébként csak az egyik értelmezés, bővebben lásd a [link] oldalon). Ha ezt osztod el 12 felé, megkapod az átlagos hónaphosszt. Természetesen ez öncélú játék, és a másodpercekre kerekítés miatt csak pontosabb, de nem tökéletes eredményt ad, de a programozás szempontjából megint egy kis lépéssel előbbre visz.
1: A hónap tűnt logikusnak.
2: Ezt így ebben a formában nem. Leírtam egyet a gépbe, az működött. Amit ide írtam azt telefonról pötyögtem, mert nem voltam gépközelben.
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!