- 3D nyomtatás
- Végleg lemondott a régi gépekről a Steam
- Projektor topic
- Sikerült önállóan 1 GHz-re és két magra ugrania Indiának
- Milyen monitort vegyek?
- Milyen Blu-ray írót?
- Milyen TV-t vegyek?
- HiFi műszaki szemmel - sztereó hangrendszerek
- Milyen egeret válasszak?
- Kormányok / autós szimulátorok topikja
Új hozzászólás Aktív témák
-
-
-
kovisoft
őstag
Nézd meg ezt, hátha nálad is valami ilyen probléma van.
-
-
-
Van valakinek ötlete, hogyan kell leszerelni a Windows-ra fordított python program ImportError-t? Nem jutok vele dűlőre.
-
kovisoft
őstag
válasz
garga pista
#2991
üzenetére
Maga a hiba arról szól, hogy amikor a payload-ot be akarná tölteni, akkor megnézi, hogy amit beolvas, az 0x01020304-gyel kezdődik-e (big endian módban, azaz a payload a 0x04, 0x03, 0x02, 0x01 byte-okkal kezdődik-e). És nem ezt találja. Belenézve egy ilyen bin file-ba, ez a payload a 0x80-as offsetnél kezdődik, tehát jó lenne tudni, hogy mit csinál előtte a decode.py programod a file első 128 byte-jával. Tippre először be kellene olvasnia a read_header()-ben egy 16 byte-os header magic-et és egy 112 byte-os headert, és akkor el is jutna a 0x80-as offsethez, onnan jöhetne a payload.
-
garga pista
őstag
válasz
kovisoft
#2990
üzenetére
Igen, ezzel az üzenettel elszáll:
Traceback (most recent call last):
File "C:\speedport\decode.py", line 41, in <module>
main()
File "C:\speedport\decode.py", line 36, in main
payload_type = zcu.zte.read_payload_type(infile)
File "C:\Program Files\Python39\lib\site-packages\zcu-0.1.0-py3.9.egg\zcu\zte.py", line 51, in read_payload_type
File "C:\Program Files\Python39\lib\site-packages\zcu-0.1.0-py3.9.egg\zcu\zte.py", line 45, in read_payload
AssertionError
De nem csak a saját config fájlommal, a minták között lévővel is, amit tudnia kellene dekódolnia. Olyan, mintha az OS-el vagy Python verzióval lenne gond. Mondjuk már kínomban kipróbáltam egy rakás python verziót, minddel ugyanez a hibajelenség. -
kovisoft
őstag
válasz
garga pista
#2988
üzenetére
Az, hogy "nem akarja kinyitni", pontosabban mit jelent? Dob valami exceptiont?
-
válasz
garga pista
#2988
üzenetére
3.9 még lehet túl friss neki, de amúgy passz.
az is lehet hogy ezt a formátumot már nem támogatja a szkript. -
garga pista
őstag
Hozzáértőktől kérnék segítséget, leginkább futtatásban:
Ezt a scriptet szeretném futtatni a gépemen, de csak részben működik. Különböző ZTE router config fájlokat tud kicsomagolni bin-ből XML-be. A problémám az, hogy az AES kódolású fájlokat nem akarja kinyitni, a resources mappában vannak minta fájlok, azok se sikerülnek.
A szükséges pycryptodomex kiegészítőt is felraktam, a teszt parancs sikeresen le is fut. Valakinek esetleg van tippje mit csinálok rosszul? A decode.py prancsot admin cmd-ből hívom meg. (Ja és az egész dolog Win10x64, Python 3.9 64bit-ről megy) -
Igazából csak meg kellene nézni hogy hívja meg a logon-t és nem vacakolni az oldal parszolgatásával :/
-
kovisoft
őstag
válasz
Fecogame
#2982
üzenetére
Ha be tudsz lépni böngészőben, akkor nézd meg a belépés utáni oldal forráskódját is, és hogy abban hogyan szerepel a felhasználóneved. A kód ilyen formában keresi: <b>username</b></span>, de valószínűleg már változott az oldal és most másként jeleníti meg, tehát ennek megfelelően kellene módosítani a SEARCH_STR változót is.
Viszont ha az egésszel nem akarsz foglalkozni, akkor kommentezd ki az elif SEARCH_STR blokkot, és akkor kihagyja ezt az ellenőrzést. Ettől függetlenül már beléptetett, ha jó a jelszó. Ez utóbbi megoldásnak annyi a hátránya, hogy nem fogsz róla tudni, ha mégis valami hiba lépett fel login közben, és nem sikerült a belépés.
-
Silεncε
őstag
válasz
Fecogame
#2982
üzenetére
Utóljára 2014-ben lett frissítve a szkript, azóta az említett oldal már egyszer biztosan át lett designolva, ezért nem működik valszeg. (még a shebang is python2). De este ránézek, kíváncsi vagyok (valszeg az span, amiben keresi a felhnevet, már nem létezik).
Mondjuk a belépés ettől még működik, csak éppen a szkript hal meg a végén
-
válasz
kovisoft
#2981
üzenetére
Köszi, tényleg ez volt a gond

Most már továbbment, most ez jött elő:
Didn't find welcome message in response.Something might be wrong. Log in manually.Fogalmam sincs ehhez mit kellene módosítani, hogy elfogadja, illetve hogy lehet kiíratni, hogy jelenleg mit kap eredménynek a mech
-
Ezt a python scriptet próbáltam lefuttatni, de az alábbi hibára fut:
Traceback (most recent call last):File "ncore.py", line 53, in <module>mech['name'] = USERNAMEFile "build/bdist.linux-armv7l/egg/mechanize/_form.py", line 2780, in __setitem__File "build/bdist.linux-armv7l/egg/mechanize/_form.py", line 3101, in find_controlFile "build/bdist.linux-armv7l/egg/mechanize/_form.py", line 3185, in _find_controlmechanize._form.ControlNotFoundError: no control matching name 'name'Mi lehet a gond?
A settings.py fájl tartalma:
USERNAME = 'Fecogame'PASSWORD = 'AjELSZ6VAM' -
Sziasztok,
Python + levelezéssel kapcsolatos problémám/kérdésem van.
smtiplib-el küld egy program levelet, beállítottam a debuglevel szintjét 2-re (smtp.set_debuglevel(2)).Ennek a kiírásait akarom elrakni egy txt-be úgy, hogy mindig hozzáfűzze az új bejegyzéseket:
import sys
sys.stderr = open('teszt.txt', 'a+')Ez is működik. Viszont amikor crontab-al fut a program, nem ír be semmit a fájlba.
Arra tudok gondolni, hogy esetleg ütemezve más jogosultságokkal fut a program, és ezért nem fér hozzá?
Vagy crontab alól nincs stderr? -
akarmi[bB]{3}
mi akar a fenti lenni, ez?akarmibbb
akarmibbB
akarmibBb
akarmibBB
akarmiBbb
akarmiBbB
akarmiBBb
akarmiBBBSzerintem erre nincs általános megoldás, de egy fenti ilyenre használható a product függvény az itertools modulban:
import itertools
[f'akarmi{"".join(c)}' for c in itertools.product('bB', repeat=3)] -
sonar
addikt
-
sonar
addikt
Sziasztok,
A következő problémán agyalok, hogy ha megadok egy egyszerű range-t akarmi[1-5] akkor generálja le nekem belőle
akarmi1
akarmi2
...
akarmi5
Létezik erre valami modul? Vagy dolgozzam fel, mint string és ha van szögletes zárójel akkor a benne lévőt kezeljem range-ként? -
sonar
addikt
válasz
justmemory
#2966
üzenetére
Dettó. Ma hulla vagyok, de elsőre nem találtam konkrét infót, hogy mi van és miért nem megy.
-
justmemory
senior tag
Most hirtelen csak Androidon tudtam Termux alatt kipróbálni, ott hibát dob:
<Fault -32500: "RuntimeError: PyPI's XMLRPC API has been temporarily disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information."> -
sonar
addikt
Sziasztok,
A pip search nálatok megy?
-
tmslevi
tag
válasz
Mr Dini
#2962
üzenetére
Most sikerült csak idejutnom, hogy ránézzek. Sokat segítettél, most már értem, hogy mit kellene csinálni.
Már csak egyedül a legutolsó lépés nem megy. Hogyan használjam a PyMarshal_WriteObjectToFile-t a _PyEval_EvalFrameDefault függvényben?Egyébként egy halott HDD-n ragadt néhány forráskódom. Túlélem, ha nem lehet visszaállítani, mert meg tudom írni megint, de mindenképp jobb lenne visszaszerezni (jelentős időt spórolnék). Ha ezt a lépést nem sikerül megoldani, akkor hagyom.
-
concret_hp
addikt
google cloudból futtatott már valaki pythont?
azt meg lehet nézni valahogy hogy mindenestől mennyi ramot eszik egy script? (importált libekkel együtt)
-
Mr Dini
addikt
válasz
tmslevi
#2960
üzenetére
Egyrészt megírták a printes hibát, hogy miért történik. Másrészt ez így nem fog menni. Az addig jó, hogy megkaptad a lefordított py fájlt. Viszont a pytransform.so/.dll (a kiterjesztés attól függ, hogy win/linux a futtató) mindenképp kelleni fog, az a deobfuscator runtime kvázi. Aztán leszeded a python forráskódot és azon belül a direktívát, amit a fórum említ, átírod, hogy printelje ki a frameket egy fájlba, majd lefordítod és berakod PATH-ba ezt a módosított pythont.
Majd futtatod vele az eredeti obfuszkált anyagot. Ha lefut, akkor a kód base64-ben elvileg benne lesz majd a fájlban. Kicsit spammy lesz, de benne lesz a lényeg.
Viszont! 1) nem teszteltem; 2) ezt mindenképp csak akkor csináld, ha saját kódról van szó és elveszett a forráskód, vagy a készítő engedélyezte a műveletet. Ha ezek egyike sem applikálható az esetedre, akkor bizonyára joggal volt levédve a szkript és maradjon is úgy. + Ez a megoldás csak akkor működhet, ha van licenced is, tehát az eredeti obfuszkált kód lefut és nem fut hibára, hogy nincs licenced.
-
axioma
veterán
válasz
tmslevi
#2960
üzenetére
A print elteroen mukodik a 2-es es 3-as python-oknal - ezek kozott tobb kisebb-nagyobb elteres van (pl. egesz osztas kornyeken is, meg map az nem list csak iterable stb). Ha zarojel nelkuli print van a kodban, akkor 2-es python kell ahhoz, hogy futtasd, azt toltsd le es azzal inditsd. A pip-et is!
Ja a screen shot-okat nem is neztem, lehet hogy igy hogy gyanus a python verzio problema, lehet hogy a kicsomagolashoz is megfelelo verzio kell, de ez mar csak egy tipp ha igy se jo. -
tmslevi
tag
válasz
Mr Dini
#2956
üzenetére
Köszönöm a választ mindkettőtöknek!
Ránéztem az utóbbi linkre, de nem minden világos. Letöltöttem a tag tesztfájlját, szétkaptam az .exe-t, megkaptam a compiled python fájlt. Eddig jutottam el az én fájlom esetében is.
Ha jól értettem, innentől már akár le is lehetne futtatni a compiled py fájlt, de nem sikerül pyarmor-ral védett fájlok esetén, mert "No module named 'pytransform'" hibát kapok. Ezt pip segítségével telepíteném is, de ekkor ezt kapom: "SyntaxError: Missing parentheses in call to 'print'. Did you mean print("MDAnalysis requires Python 2.6 or better. Python %d.%d detected" % \)?"
[screenshot a hibáról]
[screen a decompiled forráskódról]
Valamit én rontottam el / félreértelmeztem? -
Siriusb
veterán
válasz
Siriusb
#2955
üzenetére
És a ráadás kérdés:
Hogy egyedivé tegyem a log fájlok neveit, a dictConfig meghívása előtt lefut az alábbi kódrészlet:frame = inspect.stack()[-1]caller_base_filename = os.path.splitext(os.path.basename(frame.filename))[0]for k in LOGGING_CONFIG['handlers'].keys():for key, value in LOGGING_CONFIG['handlers'][k].items():if key == 'filename':LOGGING_CONFIG['handlers'][k][key] = f'{caller_base_filename}_{value}'Van valami egyszerűbb megoldás erre a célra?
-
Siriusb
veterán
Kicsit foglalkoztam a log készítésével, próbálom modernizálni magam (addig csak a csupasz minimum szintjén használtam), no meg készíteni egy modult, amit csak be kell rántanom, ha esetleg szükségem van log-ra. Vegyük figyelembe, hogy kispályás vagyok, tehát semmi komoly munkáról nincs szó.
Első kérdés:
Ti yaml-t vagy dictConfig-ot használtok? A yaml-nak nem látom értelmét esetemben, mert úgyis csak egyszer kell összeraknom a konfigurációt, szóval az hogy esetleg átláthatóbb, nem lényeges számomra.Második kérdés:
Mi a jó megoldás akkor, ha nem akarom a különböző szintű üzeneteket (info, warn stb) látni a konzolban alapesetben, de néha mégis szükségem lenne rá? Olyankor hozzáadom a logger-hez a handler-t, majd törlöm?Harmadik kérdés:
Várjátok már a Jézuskát?
-
tmslevi
tag
Sziasztok!
Egy pyarmor-ral védett .py forráskódot szeretnék valamilyen módon visszaállítani olvasható formátumba. A kérdésem az lenne, hogy lehetséges-e egyeltalán? Az interneten nem igazán találtam róla infót. Előre is köszönöm a segítséget!
-
Siriusb
veterán
d = dict.fromkeys(ez_egy_list, [])Létrehozok egy dictionary-t, amivel az a baj, hogy minden key-hez ugyanaz az üres list objektum kerül. Miként lehet elegánsan megoldani, hogy a value mindegyiknél egy új list objektum legyen?
-
Siriusb
veterán
válasz
GaezhyFeri
#2947
üzenetére
Ez a modul segít, kösz a tippet.
Telepítettem és bele is kukucskáltam a kódba hogy lássam, mi a baj velem.
-
Siriusb
veterán
válasz
GaezhyFeri
#2944
üzenetére
-
kovisoft
őstag
válasz
GaezhyFeri
#2944
üzenetére
Kérésedre idemásoltam ezt a linket: [link]
-
Siriusb
veterán
gmx.com-ra csatlakozok IMAP4_SSL-lel. A list() által visszaadott találatokban az egyik könyvtárnév kódolva van, mert magyar ékezetes betű van benne, tehát az "á" betűt "&AOE-"-nek mondja (természetesen webes felületen minden rendben). Hogyan lehet ezt dekódolni, illetve ebben a protokollban az UTF-8-at? Az enable('UTF8=ACCEPT') is a kódolt á betűt adja vissza.
Nem fontos kérdés, nehogy valaki időt áldozzon rá, csak ha kisujjban van a megoldás, akkor válaszoljon. Kösz.
-
-
kovisoft
őstag
válasz
mylastage
#2935
üzenetére
Korábban azt hittem, hogy tényleg egy probléma megoldásáért fordultál a topikhoz. De most már látom, hogy nem ez a célod, hiszen a megoldásra kaptál már több javaslatot is, hogy ha a konkrét céljaidnak nem felel meg a lebegőpontos aritmetika, akkor milyen egyéb lehetőségeid vannak (egész számok, decimal, fractions, sympy, stb). De valahogy ezeket nem veszed figyelembe. Azt sem vagy hajlandó megérteni, amit szintén már számtalanszor leírtunk, hogy ez nem programnyelv, hanem számábrázolás függő. Más programnyelven is ugyanezzel a problémával fogsz szembesülni lebebőpontos számok használata esetén.
-
mylastage
csendes tag
válasz
velizare
#2933
üzenetére
Valami hasonló fapados volt igaz
de eltelt 30 év és még mindig nincs megoldás.
Függvények, eljárások, modulok, metódusok próbálnak segíteni az alap_problémán: miszerint nem tud számolni az istenített programnyelv.
A kérdés még mindig ugyanaz:
Hogy(an) írnak nem egyszerű scripteket ebben a programnyelvben, mikor nem tud számolni szegényke...?! -
axioma
veterán
válasz
mylastage
#2931
üzenetére
A paros szamosat szerintem benezted (maradjunk ennel a valtozatnal), pont hogy azert 0.
Az epitoiparban meg tok mind1 hogy mm pontosan szamolsz-e, a valosagban mindennek nagyobb ennel a turese (a teglanak is, nem csak a malternek) Barcsak ne lenne nagyobb gond minthogy "csak" 10 cm-rel szamoltak el magukat... sajna volt szerencsem epitkezni, nem a tervezo a leggyengebb lancszem.. Talan a spektrumos oriashid-epitoknel lehet, hogy mm pontossag kell par specialis muvelethez, de ott se mindenhez, es ott se a szamolason hanem a kivitelezesen szokott mulni. -
mylastage
csendes tag
Köszönöm a linkeket és az infót... de...
"Pascalban az int változó sose vett fel tört értéket. Szerintem az emlékeid ködösítik a múltat. Persze ettől függetlenül a Real így működött, de az már a régmúlt."
És mégis működött két integer használatával, és erre homályos foltok nélkül is emlékszem. Az egyik egész számokat, a másik a tört részét tárolta.
"...mivel a 0.5 mindig felfelé kerekítése mérhető mértékben eltolja a kerekített számok eloszlását."
OK, de hol marad a következetesség?! Van egy matematikai rendszer, aminek nem tudok megfelelni.
A másik, hogy 0.5 kerekítése "a páros szám " irányába az miért is nulla?"The Python 3.0 approach eliminates this issue."
...és mégsem...Mint mondottam volt vala... csak egy értelmes megoldást keresek, vagy egy következetes választ...
Az építőipar meg túltekint a www.malter.hu portálon, és már a tervezés is beletartozik, ahol nem mindegy fél cm eltérés sem. Kinek a papné, kinek a vakolat... -
válasz
mylastage
#2924
üzenetére
Pascalban az int változó sose vett fel tört értéket. Szerintem az emlékeid ködösítik a múltat. Persze ettől függetlenül a Real így működött, de az már a régmúlt.
Ráadásul ez nem egy python 'tulajdonság' igazából, az utóbbi időben (nem 25 évvel ezelőtt) már ez (banker's round) a sztenderd, azaz a felet mindig a közelebbi páros számhoz kell kerekíteni. Ez egy komolyabb (statisztikai) problémát old meg, mivel a 0.5 mindig felfelé kerekítése mérhető mértékben eltolja a kerekített számok eloszlását.
What’s New In Python 3.0:
The round() function rounding strategy and return type have changed. Exact halfway cases are now rounded to the nearest even result instead of away from zero. (For example, round(2.5) now returns 2 rather than 3.)
For the built-in types supporting round(), values are rounded to the closest multiple of 10 to the power minus n; if two multiples are equally close, rounding is done toward the even choice.
+
Python 3's way (called "round half to even" or "banker's rounding") is considered the standard rounding method these days, though some language implementations aren't on the bus yet.
The simple "always round 0.5 up" technique results in a slight bias toward the higher number. With large numbers of calculations, this can be significant. The Python 3.0 approach eliminates this issue. -
axioma
veterán
válasz
mylastage
#2924
üzenetére
Rendben, epitoipar 1 cm. Legnagyobb tavolsag az epitmenyeknel? 100m? Keme'ny 4 nagysagrend elteres van a ketto kozott (ertsd: viccesen keves, barhol abrazolhato). Szerintem pont egy rossz pelda, ez me'g mm-ben is csak szazezres nagysagrend, tehat siman lehet egesz mm-ben szamolni (de cm-ben me'g 16 biten is).
Ha az M7-est akarod modellezni akkor meg a kituzes/megvalositas nem lesz cm pontos, ott atrakod a leptekedet arra, hogy m/100km.
(Amugy van ahol fontosabb a sokadik szamjegy, pl. masodik/harmadik derivaltat hasznalo szabalyzokorok. De azt nem is pythonban vagy mas magas szintu nyelven irjak...) -
-
mylastage
csendes tag
Sajnálom, de nem tudom elfogadni "a számítógépes számábrázolás egyszerűen ilyen",
"a lebegőpontos ábrázolás így működik" stb. kijelentéseket - mert ez nem magyarázat.
15000 évvel ezelőtt (infotech szinten) mikor a Turbo Pascal volt a gyakorló nyelv az oktatásban, két 'int' változó megoldotta a helyi problémát - ami nem volt látható.
Valós időben 25-30 év nem elegendő egy ilyen kulcsprobléma kiküszöbölésére??!
Az ASM szintén 'két' változóban tárolja a tört kifejezést, ha ezt adom meg neki regiszter szinten.
A kérdés még mindig ua. : egy változó értéke hogyan kap értéket az "X" milliomodik helyen, mikor nem adtam meg semmit sem...
(Szeretem a pontosságot; az építőiparban fontos lehet 1-1 cm - szerintem) -
axioma
veterán
válasz
mylastage
#2918
üzenetére
Celhoz az eszkozt!
A jelenlegi megkozelites az esetek igen nagy szazalekaban jobban szolgalja az erdekeket, mit mas abrazolasi modok. Igen, lebegopontos abrazolasnal nem lehet egyenloseggel vizsgalni, hanem az elteres nagysagrendjet te meghatarozod ami me'g jo, es arra a kozelsegre vizsgalsz (ne felejtsd el hogy ekozben neked kell kovetned, hogy melyik muveletnel mi lesz a hibahatarod...). Ha ezt valasztod, akkor ezzel kell egyutt elned. Ha stringben tarolod a szamokat es megirod ra a muveleteket, akkor erre mar jo lesz, de (amellett hogy lassu) akkor a Pi-vel nem fog tudni mit kezdeni, vagy a gyok3-mal.
Szerencsere a gyakorlatban a nagyon sokadik ertekes jegynek ugysincs jelentosege, plane mikor tolomerovel mered aztan baltaval szabod le... [pl. a 3.3-bol egeszet kell a vegen csinalni]. -
-
kovisoft
őstag
válasz
mylastage
#2918
üzenetére
A MIÉRTet korábban már elmondtuk, de akkor megpróbálom jobban kifejteni. 10-es számrendszerben is csak azokat a törteket tudjuk véges alakban felírni, amelyek nevezőjében csak a 10 prímtényezőinek, azaz 2-nek és 5-nek valamilyen hatványa szerepel, mint pl. 1/5, 3/8, 17/40. Minden más végtelen tizedes tört lesz, mint pl. 1/6, 2/7, 8/11.
Ugyanez igaz a 2-es számrendszerre is: csak azokat a törteket tudjuk véges alakban felírni, amelyeknek a nevezőjében valamilyen 2-hatvány szerepel, mint pl. 1/2, 3/8, 47/256. Minden más végtelen kettedes tört lesz.
Vegyünk egy példát: 1/5. Ez tízes számrendszerben 0,2. Ha ugyanezt 2 (vagy 1/2) hatványaival akarjuk felírni, akkor mi lesz? 1/5 = 1/8+1/16+1/128+1/256+1/2048+1/4096+... ami ez a végtelen kettedes tört lesz: 0,001100110011... Mivel csak véges számjegyen ábrázolhatjuk mindezt, ezért itt mindenképpen lesz egy kerekítés, azaz az 1/5 nem pontosan 0,2, hanem egy icipicit kisebb vagy nagyobb számként lesz tárolva (a kerekítés irányától függően).
És ahogy előttem már írták, ennek semmi köze a Pythonhoz, ez minden programozási nyelven így van, ahol lebegőpontos számábrázolást használunk.
-
válasz
mylastage
#2918
üzenetére
Ez nem a python hibája, ez egy általános informatikai probléma, ami szinte az összes programozási nyelvet érinti. Értem, hogy laikus fejjel ez az egyik legnehezebben feldolgozható dolog, de ennek az a fő oka, hogy nem tudod, hogyan működik a számítógép (pontosabban az ALU) valójában.
-
mylastage
csendes tag
Köszönöm a válaszokat, de nem lettem meggyőzve...
Egy változóban tárolt érték, miért vesz fel vhol az 'X' milliomodikon bármilyen értéket is?!A "klasszikus példa" esetén még szorzásról-osztásról sincs szó, csak összeadás és kivonás; de nem tud számolni... a miértje lett volna a kérdés, de a kuzinomnak ez nem ment át.
A kerekítéstől mit várok??!
Nem ennek a futási eredményét...x = 0.5
x2 = round (x, 0)
print (x2)A Python nyalókáknak gondolom nem szimpatizál a kérdés - miért kell egy programnyelvet isteníteni, mikor alapvető múveleteket nem tud megoldani?
a MIÉRT érdekel, és a hogyan kerüljük ki a hibákat válaszok leginkább...
A Decimal-t ill. a sympy-t megnézem mit kreálnak - köszi az infót - -
cousin333
addikt
válasz
mylastage
#2912
üzenetére
"Előfordul, hogy az 5-öt lefelé kerekíti - és két tizedesnél ez 1%."
Példa? Remélem nem a 7.850000000005-től vártad, hogy 7.86 legyen...
"az apróban való tárolás tényleg egy jó ötlet, de még mindig zavar, hogy szorzás esetén - ahol nincs szó végtelen tizedes törtről - hibás eredményt ad."
Nem, nem ad. A "klasszikus példádban" meg pont nincs szorzás. Az említett számábrázolási hiba legtöbbször minimális pontatlansággal jár (nem 1%), ha meg mindenképpen el akarod kerülni ezeket, akkor Decimal osztály, vagy sympy modul valódi törtekkel
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
kovisoft
őstag
válasz
mylastage
#2914
üzenetére
Ennek is pont ugyanez az oka. Nem végtelen tizedes törtről, hanem végtelen kettedes törtről van szó. Tehát olyan véges tizedes törtről, amelyik csak tízes számrendszerben felírva véges, de kettes számrendszerben felírva végtelen. A gép ugyanis kettes számrendszerben tárolja a számokat, a lebegőpontosakat is.
Nem tudom, milyen hibás szorzásra gondolsz. Ha egész számokat szorzol, akkor az eredmény is egész és pontos lesz.
-
mylastage
csendes tag
-
kovisoft
őstag
válasz
mylastage
#2912
üzenetére
A sokadik tizedesjegynél való eltérés azért adódik, mert amikor nem egész számokkal dolgozik a számítógép, akkor lebegőpontosan tárolja azokat, kettedes tört formájában, és vannak véges tizedes törtek, amik csak végtelen kettedes törtként ábrázolhatóak (hasonlóan ahhoz, mint ahogy az 1/3-ot csak végtelen 0.33333... formájában tudjuk tizedes törtként ábrázolni, harmados törtként meg ez a 0.1), ezért óhatatlanul kerekítve lesznek. Ha egy ilyen végtelen kettedes törtet utána visszaalakítjuk tizedes törtté, akkor lesz ez a pici eltérés a tároláskori kerekítés miatt.
Ezért szokás a pénzügyi rendszereknél, ahol 1 fillér vagy cent sem térhet el, hogy egész számokkal dolgozunk, pl. mindent fillérben, egész számként tárolunk és számolunk, a számítások eredményét is egészre kerekítjük, kiírásnál pedig a 100-zal való osztás hányadosát és maradékát írjuk ki.
De én kipróbáltam a programodat egy round() beiktatásával, és nem látom, hogy hol adna rossz eredményt:
> while (szamlalo < 21):
... cad = round(arfolyam_eurtocad * szamlalo, 2)
... print (szamlalo, " EUR = ", cad, " CAD ")
... szamlalo = szamlalo + 1
...
1 EUR = 1.57 CAD
2 EUR = 3.14 CAD
3 EUR = 4.71 CAD
4 EUR = 6.28 CAD
5 EUR = 7.85 CAD
6 EUR = 9.42 CAD
7 EUR = 10.99 CAD
8 EUR = 12.56 CAD
9 EUR = 14.13 CAD
10 EUR = 15.7 CAD
11 EUR = 17.27 CAD
12 EUR = 18.84 CAD
13 EUR = 20.41 CAD
14 EUR = 21.98 CAD
15 EUR = 23.55 CAD
16 EUR = 25.12 CAD
17 EUR = 26.69 CAD
18 EUR = 28.26 CAD
19 EUR = 29.83 CAD
20 EUR = 31.4 CAD -
mylastage
csendes tag
Sziasztok,
egy kezdő Python könyvben volt egy árfolyam átváltó gyakorló feladat. Blender-hez akarok írni egy scriptet, ami a "padlóra" helyezi az objektum alját, ezért néztem bele a programnyelvbe (többek között a Blender scriptnyelve is a Python).Gondolom ismeritek...
# EUR to CAD
arfolyam_eurtocad = 1.57
szamlalo = 1
while (szamlalo < 21):
cad = arfolyam_eurtocad * szamlalo
print (szamlalo, " EUR = ", cad, " CAD ")
szamlalo = szamlalo + 1Valamiért nem tud számolni a Python, mert az 1.57-nél az 5.,10, 19. 20. sornál az X milliomodik résznél ad valamennyi értéket a változóhoz.
Utánanéztem, hogy a round() függvénnyel lehet kerekíteni pl. 2 tizedesjegyig.
Csak az a baj, hogy nem tud kerekíteni sem. Előfordul, hogy az 5-öt lefelé kerekíti - és két tizedesnél ez 1%.
Ha 100 millió EUR-t váltok CAD-ra (a példa alapján), akkor buktam 1 millát CAD-ban a Python miatt.
Azt rebesgetik, hogy komoly scripteket lehet vele írni - biztos van megoldás - csak nem tudom hogyan lehetne kivédeni ezt a kellemetlenséget.Ha valakinek van megoldása és megosztja, köszönöm szépen - érdekelne a miértje is...
Tegnap kezdtem a Pythont - szóval csak bonyolítás nélkül.
Köszi előre is... -
Siriusb
veterán
válasz
hierroo
#2907
üzenetére
Korábban csak tőmondatokban tudtam írni. Kicsit részletesebben:
pickle— Python object serializationEz rögtön a példára visz, hogy lásd milyen egyszerű.
A feladattól függően érdemes lehet megfontolni akár egy egyszerűbb adatbázis használatát is, pl. sqlite3.
-
hierroo
friss újonc
válasz
concret_hp
#2908
üzenetére
Igen, akár file-ba is jó volna, ha utána a file-ból visszaolvashatóak a változó értékek a pythonos programba valahogy!
-
hierroo
friss újonc
Sziasztok!
Nem tudja valaki, hogy ha van egy futó pythonos program amiben folyamatosan módosuló változók és listák meg szótárak vannak, akkor azokat hogy lehet kimenteni? Utána esetleg a kimentett változókat újra megnyitni akkor, amikor a programot újraindítottuk? -
Találkozott már valaki azzal, hogy a Visual Studio Code hozzárendeli magát a directory-khoz, így ha valamilyen programban meg akarom nyitni a directory-t, akkor VSC-ben nyílik meg? Mindez Debian 9-ben történik.
-
-
Finwe
őstag
Sziasztok!
Tudtok ajánlani valakit a ki szóban/korrepetálás jelleggel tudna nekem segíteni, hogy mihamarabb képbe kerüljek a python-nal? Haladok egy könyvvel és topikban is sok hasznos infó van, de szóban gyorsabban tanulok és most ez elég kritikus szempont.
Privátban is várom, ha van ajánlás.
Köszi szépen!
Új hozzászólás Aktív témák
- 187 - Lenovo LOQ (15IRX10) - Intel Core i7-13650HX, RTX 5070
- Apple iPhone 15 Pro 256GB, Kártyafüggetlen, 1 Év Garanciával
- Corsair Vengeance RGB DDR5 6000Mhz 2x16GB (32GB) DDR5 Memória
- Ducky One 3 FULL/TKL/SF/MINI billentyűzetek többféle színben és kapcsolókkal!
- REFURBISHED - DELL Thunderbolt Dock WD19TBS (210-AZBV)
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi

Vagy crontab alól nincs stderr?




