Hirdetés

Új hozzászólás Aktív témák

  • sonar
    addikt

    Kössz!

    ez a git akkor verzió követő, a repó meg ahova feltolja a kódot. Gondolom akkor ezt lehet lokálisan is csinálni.
    Ebbe akkor bele kell ásnom magam egy pöttyet.

  • EQMontoya
    veterán

    Hi

    Nem kimondottan python, de hátha.
    Verzió követést ti hogyan oldjátok meg?
    Van egy két scriptem amit két három havonta ki kell egésziteni. Eddig kommentbe irogattam meg release után egy zippelt verziót lementek magamnak.

    Illetve van-e vmi olyan oldal ahol rendszeresen mutatnak be python-os modulokat technikákat...
    (most nem a python.org -ra gondolok)

    Git, vannak ingyenes repók is, pl. bitbucket.

  • tvamos
    nagyúr

    Hi

    Nem kimondottan python, de hátha.
    Verzió követést ti hogyan oldjátok meg?
    Van egy két scriptem amit két három havonta ki kell egésziteni. Eddig kommentbe irogattam meg release után egy zippelt verziót lementek magamnak.

    Illetve van-e vmi olyan oldal ahol rendszeresen mutatnak be python-os modulokat technikákat...
    (most nem a python.org -ra gondolok)

    Gitt+doxygen. (Mondjuk nem csak Python. )

  • sonar
    addikt

    Hi

    Nem kimondottan python, de hátha.
    Verzió követést ti hogyan oldjátok meg?
    Van egy két scriptem amit két három havonta ki kell egésziteni. Eddig kommentbe irogattam meg release után egy zippelt verziót lementek magamnak.

    Illetve van-e vmi olyan oldal ahol rendszeresen mutatnak be python-os modulokat technikákat...
    (most nem a python.org -ra gondolok)

  • DrojDtroll
    veterán

    Típushibára :DDD

    Kattints rá a linkre (vagy keresd meg a kérdéses fájlok kérdéses sorát), hogy lásd, mit csinál. Én ennyi infóból azt mondanám, hogy a MediumMotor() osztály példányosításakor lefut az __init__() függvény, ami valamit inicializálna, pl. egy szótár változóból (dictionary) olvasna ki egy elemet, de a szótár helyett egy None-t kap. Nem lehet, hogy valamilyen paramétert kéne átadni az osztálynak?

    Mod: a válasz elvileg nem. Én ezt találtam: [link], bár gyanítom, hogy ez a kód nem teljesen ugyanaz a verzió, mint a tied, mert ennek a sornak le se szabadna futnia, max a 334-től kezdve, de szerintem abban sem indokolja semmi ezt a hibát.

    Nem olyan fontos, lehet a motorok mozgatásához inkább go-t kellene használnom.

  • cousin333
    addikt

    Pontosan így van ahogy írod.

    >>> from ev3.lego import *
    >>> d = MediumMotor()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "build/bdist.linux-armv5tejl/egg/ev3/lego.py", line 217, in __init__
    File "build/bdist.linux-armv5tejl/egg/ev3/ev3dev.py", line 330, in __init__
    TypeError: 'NoneType' object has no attribute '__getitem__'

    Ez milyen hibára utal?

    Típushibára :DDD

    Kattints rá a linkre (vagy keresd meg a kérdéses fájlok kérdéses sorát), hogy lásd, mit csinál. Én ennyi infóból azt mondanám, hogy a MediumMotor() osztály példányosításakor lefut az __init__() függvény, ami valamit inicializálna, pl. egy szótár változóból (dictionary) olvasna ki egy elemet, de a szótár helyett egy None-t kap. Nem lehet, hogy valamilyen paramétert kéne átadni az osztálynak?

    Mod: a válasz elvileg nem. Én ezt találtam: [link], bár gyanítom, hogy ez a kód nem teljesen ugyanaz a verzió, mint a tied, mert ennek a sornak le se szabadna futnia, max a 334-től kezdve, de szerintem abban sem indokolja semmi ezt a hibát.

  • DrojDtroll
    veterán

    Tehát ha jól értem, egy virtuális környezethez volt fenn a modul (nem használtam még a virtualenv-et), indításkor viszont a normál környezet futott, ami persze nem látta.

    Úgy látom reszeltek a programkód beágyazáson. Színes meg minden...

    Pontosan így van ahogy írod.

    >>> from ev3.lego import *
    >>> d = MediumMotor()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "build/bdist.linux-armv5tejl/egg/ev3/lego.py", line 217, in __init__
    File "build/bdist.linux-armv5tejl/egg/ev3/ev3dev.py", line 330, in __init__
    TypeError: 'NoneType' object has no attribute '__getitem__'

    Ez milyen hibára utal?

  • cousin333
    addikt

    Akkor leírom mi volt a gond.

    Virtualenv-el volt feltelepítve a könyvtár. Következő indításkor nem tudtam, hogy kell a workon.

    Tehát ha jól értem, egy virtuális környezethez volt fenn a modul (nem használtam még a virtualenv-et), indításkor viszont a normál környezet futott, ami persze nem látta.

    Úgy látom reszeltek a programkód beágyazáson. Színes meg minden...

  • DrojDtroll
    veterán

    Ennyi erővel már a konkrét problémát is beírhattad volna ide :)

    Ez olyan "Megkérdezhetem, hogy mennyi az idő? Persze, kérdezd csak meg nyugodtan!" típusú hozzászólás volt. :D

    Akkor leírom mi volt a gond.

    Virtualenv-el volt feltelepítve a könyvtár. Következő indításkor nem tudtam, hogy kell a workon.

  • cousin333
    addikt

    Nem nagyon sikerül egy rendszerre feltepiteni egy python könyvtárat.

    Ez Linuxos vagy python os kérdés inkább?

    Ennyi erővel már a konkrét problémát is beírhattad volna ide :)

    Ez olyan "Megkérdezhetem, hogy mennyi az idő? Persze, kérdezd csak meg nyugodtan!" típusú hozzászólás volt. :D

  • DrojDtroll
    veterán

    Ez itt inkább programozós topic, lehet a linuxosban több sikerrel jársz. Nekem ubuntura a sima sudo apt-get install python3 paranccsal gond nélkül felment.

    már írtam a linuxos topikba, nem is a pythonnal van a gond, hanem egy speciális library-vel.

  • Noddy
    senior tag

    Tudsz olyat, hogy megadsz rövidebb verziót az argparse-nak.

    Pl. így:

    parser.add_argument('--debug','-d', dest='debug', action='store_true', help='Debug - print the structure of order')
    parser.add_argument('--profile','-p', dest='profile', action='store_true', default=False, help='Show time spent in each phases')
    parser.add_argument('--id','-i', help='ID list - separated by \',\'', required=True)

    mondjuk korábban annyi volt, hogy csak beírtam a számértékeket megfelelő sorrendben

    Persze, így viszont nem tudsz opcionális argumentumokat megadni.
    Tehát ezzel így az a baj, hogy mondjuk akkor is ki kell ínrod mindhármat, ha mondjuk 17 szögmásodpercet szeretnél átváltani.

    Köszi! Le is rövidítettem -d, -m és -s-re. Gyakorlásnak ez jó volt :)

  • EQMontoya
    veterán

    Köszi! :)
    Így már működik, mondjuk korábban annyi volt, hogy csak beírtam a számértékeket megfelelő sorrendben:
    program.py 180 23 40 és számolta is, de most program.py --degree 180 --minute 23 --secundum 40
    Persze legalább működik :)
    Az a2,a3 és b változónak float típust adtam most már meg, elvileg nekem most így működik. Érdekes hogy nem találtam olyan netes konvertert ami fok, perc, másodpercet számol radianba csak fok-radiant számolót, biztos van csak nem találtam.

    Tudsz olyat, hogy megadsz rövidebb verziót az argparse-nak.

    Pl. így:

    parser.add_argument('--debug','-d', dest='debug', action='store_true', help='Debug - print the structure of order')
    parser.add_argument('--profile','-p', dest='profile', action='store_true', default=False, help='Show time spent in each phases')
    parser.add_argument('--id','-i', help='ID list - separated by \',\'', required=True)

    mondjuk korábban annyi volt, hogy csak beírtam a számértékeket megfelelő sorrendben

    Persze, így viszont nem tudsz opcionális argumentumokat megadni.
    Tehát ezzel így az a baj, hogy mondjuk akkor is ki kell ínrod mindhármat, ha mondjuk 17 szögmásodpercet szeretnél átváltani.

  • Noddy
    senior tag

    Nem nagyon sikerül egy rendszerre feltepiteni egy python könyvtárat.

    Ez Linuxos vagy python os kérdés inkább?

    Ez itt inkább programozós topic, lehet a linuxosban több sikerrel jársz. Nekem ubuntura a sima sudo apt-get install python3 paranccsal gond nélkül felment.

  • Noddy
    senior tag

    Kimaradt a dest, nem tudja hová tárolni, így nem fog működni.

    parser.add_argument("--degree", dest='degree', help="This program calculate degree to radian.", default=0, type=int)
    parser.add_argument("--minute", dest='minute', help="You can add Minute value.", type=int, default=0)
    parser.add_argument("--secundum", dest='secundum', help="You can add secundum value.", type=int, default=0)

    Így már működni fog bármilyen kombinációval, pl. lehet olyan, hogy csak percet adsz meg, vagy fokot és másodpercet, bármi.

    Azért van még baj, az egészosztások miatt a percek és a másodpercek nem működnek, de ezt nem lövöm le előre, ebből tanulsz. :)

    Köszi! :)
    Így már működik, mondjuk korábban annyi volt, hogy csak beírtam a számértékeket megfelelő sorrendben:
    program.py 180 23 40 és számolta is, de most program.py --degree 180 --minute 23 --secundum 40
    Persze legalább működik :)
    Az a2,a3 és b változónak float típust adtam most már meg, elvileg nekem most így működik. Érdekes hogy nem találtam olyan netes konvertert ami fok, perc, másodpercet számol radianba csak fok-radiant számolót, biztos van csak nem találtam.

  • EQMontoya
    veterán

    Sziasztok!

    Kipróbáltam az argparse dolgot de egy olyan problémába ütköztem, hogyha nem adok meg értéket akkor nem fut le a program, pedig elvileg van egy olyan opció, ha nem adok meg semmit akkor is lefut a program egy default értékkel. De ez nekem nem működik... Mi lehet a baj?

    #degrees to radian calculator
    import argparse
    import math
    parser = argparse.ArgumentParser()
    parser.add_argument("degree", help="This program calculate degree to radian.", default=0, type=int)
    parser.add_argument("minute", help="You can add Minute value.", type=int, default=0)
    parser.add_argument("secundum", help="You can add secundum value.", type=int, default=0)
    args = parser.parse_args()
    a2=args.minute/60 #minute to degree
    a3=(args.secundum/60)/60 #secundum to degree
    a=float(args.degree+a2+a3)
    b=(a*math.pi)/180
    print('The result is %lf radian.' %b)

    Megadom, hogy a default 0 legyen, de mégse működik, pedik jó lenne, ha pl. csak fokot akarok számolni akkor ne keljen a percet és a másodpercet is megadni és további variációk.

    Kimaradt a dest, nem tudja hová tárolni, így nem fog működni.

    parser.add_argument("--degree", dest='degree', help="This program calculate degree to radian.", default=0, type=int)
    parser.add_argument("--minute", dest='minute', help="You can add Minute value.", type=int, default=0)
    parser.add_argument("--secundum", dest='secundum', help="You can add secundum value.", type=int, default=0)

    Így már működni fog bármilyen kombinációval, pl. lehet olyan, hogy csak percet adsz meg, vagy fokot és másodpercet, bármi.

    Azért van még baj, az egészosztások miatt a percek és a másodpercek nem működnek, de ezt nem lövöm le előre, ebből tanulsz. :)

  • Noddy
    senior tag

    Sziasztok!

    Kipróbáltam az argparse dolgot de egy olyan problémába ütköztem, hogyha nem adok meg értéket akkor nem fut le a program, pedig elvileg van egy olyan opció, ha nem adok meg semmit akkor is lefut a program egy default értékkel. De ez nekem nem működik... Mi lehet a baj?

    #degrees to radian calculator
    import argparse
    import math
    parser = argparse.ArgumentParser()
    parser.add_argument("degree", help="This program calculate degree to radian.", default=0, type=int)
    parser.add_argument("minute", help="You can add Minute value.", type=int, default=0)
    parser.add_argument("secundum", help="You can add secundum value.", type=int, default=0)
    args = parser.parse_args()
    a2=args.minute/60 #minute to degree
    a3=(args.secundum/60)/60 #secundum to degree
    a=float(args.degree+a2+a3)
    b=(a*math.pi)/180
    print('The result is %lf radian.' %b)

    Megadom, hogy a default 0 legyen, de mégse működik, pedik jó lenne, ha pl. csak fokot akarok számolni akkor ne keljen a percet és a másodpercet is megadni és további variációk.

  • DrojDtroll
    veterán

    Nem nagyon sikerül egy rendszerre feltepiteni egy python könyvtárat.

    Ez Linuxos vagy python os kérdés inkább?

  • AeSDé Team
    őstag

    Az OpenCV tényleg alkalmasnak látszik a feladatra, én ezzel kezdeném: [link]

    Mivel itt arról van szó, hogy a kamera képét képként beolvasod, majd azt elemzed, szerintem nincs különösebb szükség komolyabb támogatásra.

    Nem tudom, mit és hogyan akarsz irányítani vele, de egér és billentyűzet automatizált kezelésére egy lehetséges opció a pyAutoGUI.

    Az egér mozgatósdit a ctypes könyvtárral oldottam meg, ez már működő rendszer, tudom pl. X360 gamepaddel mozgatni és kattintgatni is.
    A képfeldolgozásban viszont nem vagyok otthon, de szeretném beleásni magam. Köszi a linket, ez tényleg jónak tűnik :K

  • cousin333
    addikt

    Vajon hogyan valósíthatnám ezt meg?
    Szeretnék egy színes LED-et relatíve sötét háttér mellett követni webkamerával, és kalibrálható koordináta transzformációs megoldással az egeret mozgatni vele.
    Úgy néztem hogy az OpenCV bővítmények bírnak hasonló képességekkel, valaki tudna tippet adni hogy merre induljak el? Bármilyen webkamera ideális lehet vagy vannak fejlesztő-barátabb példányok? Izgalmas projekt lenne a nyárra.

    Később érdekes lehetne egy pisztoly-szerű hardvert építeni hozzá ami több színkódra is képes, pl. jobb és bal kattintások is jelezhetőek lennének. De egyenlőre maradjunk 1 színnél.

    Az OpenCV tényleg alkalmasnak látszik a feladatra, én ezzel kezdeném: [link]

    Mivel itt arról van szó, hogy a kamera képét képként beolvasod, majd azt elemzed, szerintem nincs különösebb szükség komolyabb támogatásra.

    Nem tudom, mit és hogyan akarsz irányítani vele, de egér és billentyűzet automatizált kezelésére egy lehetséges opció a pyAutoGUI.

  • AeSDé Team
    őstag

    Vajon hogyan valósíthatnám ezt meg?
    Szeretnék egy színes LED-et relatíve sötét háttér mellett követni webkamerával, és kalibrálható koordináta transzformációs megoldással az egeret mozgatni vele.
    Úgy néztem hogy az OpenCV bővítmények bírnak hasonló képességekkel, valaki tudna tippet adni hogy merre induljak el? Bármilyen webkamera ideális lehet vagy vannak fejlesztő-barátabb példányok? Izgalmas projekt lenne a nyárra.

    Később érdekes lehetne egy pisztoly-szerű hardvert építeni hozzá ami több színkódra is képes, pl. jobb és bal kattintások is jelezhetőek lennének. De egyenlőre maradjunk 1 színnél.

  • Noddy
    senior tag

    Általánosságban értettem: alapvetően nem szeretünk interaktív programot írni, ami b..tatja a usert, hogy:
    -Add meg ezt
    -Biztos ezt akarod?
    -De tényleg?
    -Fűzfán fütyüljek a végén?

    Akkor inkább: foo --input_file ./bar.txt, --force --fuzfan_futyul
    Aztán enter, és megtörténik minden.

    Így már értem.

  • EQMontoya
    veterán

    Az argparse-t hogy lehetne ennél a példánál használni? Utánanéztem hogy mi lenne ez, de itt nem tudom, hogy lehetne használni.

    Általánosságban értettem: alapvetően nem szeretünk interaktív programot írni, ami b..tatja a usert, hogy:
    -Add meg ezt
    -Biztos ezt akarod?
    -De tényleg?
    -Fűzfán fütyüljek a végén?

    Akkor inkább: foo --input_file ./bar.txt, --force --fuzfan_futyul
    Aztán enter, és megtörténik minden.

  • Noddy
    senior tag

    else:
    kerdes==('n')

    Hm? :U
    Egyébként elsőre nem rossz ez, sőt.
    Sok interakció helyett inkább argparse-t használjatok.

    Az argparse-t hogy lehetne ennél a példánál használni? Utánanéztem hogy mi lenne ez, de itt nem tudom, hogy lehetne használni.

  • cousin333
    addikt

    Igen, most én a Tab-ot 4-re állítottam. Régebben a gedit-et használtam, de átszoktam a vim-re... :DD

    A GUI-t illetôen igazad van, én is az egészet abban írnám :) Egyébként ami kizárólag a fájl mentéséhez kell, az minimális plusz kódot igényel; én egy sima FileChooserDialog-ra gondoltam. Bár tény, hogy vegyíteni lehet nem a legjobb, már csak azért sem, mert ha valaki még a tanulás elején van, akkor valószínûleg korai :)

    Sajnos az eseményvezérléses és objektumorientált programírást nagyon gyakorolnom kellene :)

    A GUI-t én arra használom, hogy a telefonomra írjak hasznos appokat :)

    Az objektum orientált Python programozáshoz egy remek video:
    Python's Class Development Toolkit

  • cousin333
    addikt

    Python szerkesztéshez szerintem a Pycharm elég frankó, ahhoz képest, hogy nem fordított nyelv, nagyon baba az autocomplete.

    Szerintem is talán a legprofibb eszköz Python fejlesztéshez (is), ha nagy projektem lenne, valószínűleg abban nyomnám. Kis projektekhez viszont - épp az autocomplete és a hozzá hasonló funkciók miatt - elég fejnehéznek tűnik. Értsd: túl komplex egy pár soros programhoz (a telepítője 160 MB) és túl sokat molyol a háttérben, amitől kissé darabosnak érződik a számomra.

    Aki nem ismerné: PyCharm

  • EQMontoya
    veterán

    Na igen, a Python más nyelveknél is sokkal háklisabban reagál a vegyesen alkalmazott behúzásokra... :)

    Az általam használt szövegszerkesztők (Notepad++, Spyder, IPython... stb.) szinte mindegyikének van olyan funkciója, hogy a Tab-ot automatikusan a kívánt számú (esetemben 4) szóközre cseréli. A behúzás csökkentése is megoldható Shift + Tab használatával.

    Ami a GUI-t illeti: én sem használom a tk-t, sőt, mást se nagyon (kivéve a Jupyter Notebook-ot). Csak azért javasoltam, mert az alapból része a Python telepítésnek és ilyen egyszerűbb feladatra vélhetően ez a legjobb.

    Valóban egyszerűbb lehet kiválasztani a fájlt, mint begépelni az egész elérési utat, de a szkriptnyelves és a GUI-s implementálásnál csak egy rosszabb van: a kettő vegyítése - legalábbis ha utóbbit vegyítjük az előbbibe. Egy GUI implementálása más szemléletet igényel, hiszen "folyamat-alapú" működés helyett eseményvezéreltté válik. Nem is beszélve az integráláshoz szükséges, arányaiban sok extra kódról.

    Ha pedig GUI, akkor én nem csak a fájl-választót írnám bele, hanem az egészet, a generálás gombtól kezdve a kimeneti címkéig. Úgy legalább megspórolná az eléggé esetleges while ciklust is.

    Python szerkesztéshez szerintem a Pycharm elég frankó, ahhoz képest, hogy nem fordított nyelv, nagyon baba az autocomplete.

  • justmemory
    senior tag

    Na igen, a Python más nyelveknél is sokkal háklisabban reagál a vegyesen alkalmazott behúzásokra... :)

    Az általam használt szövegszerkesztők (Notepad++, Spyder, IPython... stb.) szinte mindegyikének van olyan funkciója, hogy a Tab-ot automatikusan a kívánt számú (esetemben 4) szóközre cseréli. A behúzás csökkentése is megoldható Shift + Tab használatával.

    Ami a GUI-t illeti: én sem használom a tk-t, sőt, mást se nagyon (kivéve a Jupyter Notebook-ot). Csak azért javasoltam, mert az alapból része a Python telepítésnek és ilyen egyszerűbb feladatra vélhetően ez a legjobb.

    Valóban egyszerűbb lehet kiválasztani a fájlt, mint begépelni az egész elérési utat, de a szkriptnyelves és a GUI-s implementálásnál csak egy rosszabb van: a kettő vegyítése - legalábbis ha utóbbit vegyítjük az előbbibe. Egy GUI implementálása más szemléletet igényel, hiszen "folyamat-alapú" működés helyett eseményvezéreltté válik. Nem is beszélve az integráláshoz szükséges, arányaiban sok extra kódról.

    Ha pedig GUI, akkor én nem csak a fájl-választót írnám bele, hanem az egészet, a generálás gombtól kezdve a kimeneti címkéig. Úgy legalább megspórolná az eléggé esetleges while ciklust is.

    Igen, most én a Tab-ot 4-re állítottam. Régebben a gedit-et használtam, de átszoktam a vim-re... :DD

    A GUI-t illetôen igazad van, én is az egészet abban írnám :) Egyébként ami kizárólag a fájl mentéséhez kell, az minimális plusz kódot igényel; én egy sima FileChooserDialog-ra gondoltam. Bár tény, hogy vegyíteni lehet nem a legjobb, már csak azért sem, mert ha valaki még a tanulás elején van, akkor valószínûleg korai :)

    Sajnos az eseményvezérléses és objektumorientált programírást nagyon gyakorolnom kellene :)

    A GUI-t én arra használom, hogy a telefonomra írjak hasznos appokat :)

  • cousin333
    addikt

    Nem csak téged zavar :) Mondjuk ezeket már nem is néztem (zárójel, szóközök, stb.).
    Én korábban 2 szóközzel írtam a scripteket, aztán egy programozó cimborám mondta, hogy 4-el kellene. Viszont mivel vim-et használok, a tabulátort állítottam át 4 szóköznyire alapértelmezetten... Ebből esetleg lehet gond a behúzások érzékelésekor, főleg, ha utólag módosítok a korábbi scripteken... :) Nem tudom mi legyen, Tab-ot nyomni könnyebb, mint 4 szóközt :)

    A GUI-val kapcsolatosan igazad lehet; mondjuk nekem a tk csak minimálisan "jött be", hamar elkezdtem a gtk-t használni inkább. Azért gondoltam csak a GUI-ra, mert ha valódi program lesz a scriptből, szerintem a user-ek számára egyszerűbb így használni, mint gépelni, hogy pl. /home/Desktop/akármi/akármimimimimi/valami.txt.

    Windows alatt... jah, jogos :) Annyira alapvetés már számomra a Linux, hogy a Windows-ról hajlamos vagyok megfeledkezni, ami ilyenformán nyilván nem jó :)

    Igen, a with is hasznos, valóban :)

    Na igen, a Python más nyelveknél is sokkal háklisabban reagál a vegyesen alkalmazott behúzásokra... :)

    Az általam használt szövegszerkesztők (Notepad++, Spyder, IPython... stb.) szinte mindegyikének van olyan funkciója, hogy a Tab-ot automatikusan a kívánt számú (esetemben 4) szóközre cseréli. A behúzás csökkentése is megoldható Shift + Tab használatával.

    Ami a GUI-t illeti: én sem használom a tk-t, sőt, mást se nagyon (kivéve a Jupyter Notebook-ot). Csak azért javasoltam, mert az alapból része a Python telepítésnek és ilyen egyszerűbb feladatra vélhetően ez a legjobb.

    Valóban egyszerűbb lehet kiválasztani a fájlt, mint begépelni az egész elérési utat, de a szkriptnyelves és a GUI-s implementálásnál csak egy rosszabb van: a kettő vegyítése - legalábbis ha utóbbit vegyítjük az előbbibe. Egy GUI implementálása más szemléletet igényel, hiszen "folyamat-alapú" működés helyett eseményvezéreltté válik. Nem is beszélve az integráláshoz szükséges, arányaiban sok extra kódról.

    Ha pedig GUI, akkor én nem csak a fájl-választót írnám bele, hanem az egészet, a generálás gombtól kezdve a kimeneti címkéig. Úgy legalább megspórolná az eléggé esetleges while ciklust is.

  • justmemory
    senior tag

    Az a 12 karakteres behúzás csak engem zavar? Már a 8-at is sokallom, a 2 meg kevés, én a 4-re szavazok. Természetesen szóközzel, nem tabulátorral.

    "A fájl mentését én valószínűleg gtk-val oldanám meg"

    Amit írsz, az igaz, de egy szkriptnyelvnél a GUI szerintem minimum a második lépés, vagy még későbbi. Akkor is inkább a tk-t próbálnám ilyen egyszerű feladatra, mert az része az alap Python telepítésnek.

    "Tennék bele egy olyan apróságot is, hogy az "i" és "n""

    Meg a zárójelezés is teljesen felesleges az == után. Kivéve talán ezt az esetet:

    if kerdes in ('i', 'n'):

    "#!/usr/bin/python - nem feltétlenül szükséges, csak könnyebb futtatni;"

    Windows alatt is? :)

    "#-*- coding:Utf-8 -*-; nem tudom, hogy ez utóbbi feltétlenül kell-e"

    Python 3 alatt nem kell, az már tudtommal full Unicode, ékezettel, meg amit akarsz.

    Még a fájlkezelésnél használnék context managert. Szerintem szebb, elegánsabb, és minden körülmények között automatikusan bezárja a fájlt:

    with open(fajlnev, 'w') as f:
    f.write(akarmi)

    Nem csak téged zavar :) Mondjuk ezeket már nem is néztem (zárójel, szóközök, stb.).
    Én korábban 2 szóközzel írtam a scripteket, aztán egy programozó cimborám mondta, hogy 4-el kellene. Viszont mivel vim-et használok, a tabulátort állítottam át 4 szóköznyire alapértelmezetten... Ebből esetleg lehet gond a behúzások érzékelésekor, főleg, ha utólag módosítok a korábbi scripteken... :) Nem tudom mi legyen, Tab-ot nyomni könnyebb, mint 4 szóközt :)

    A GUI-val kapcsolatosan igazad lehet; mondjuk nekem a tk csak minimálisan "jött be", hamar elkezdtem a gtk-t használni inkább. Azért gondoltam csak a GUI-ra, mert ha valódi program lesz a scriptből, szerintem a user-ek számára egyszerűbb így használni, mint gépelni, hogy pl. /home/Desktop/akármi/akármimimimimi/valami.txt.

    Windows alatt... jah, jogos :) Annyira alapvetés már számomra a Linux, hogy a Windows-ról hajlamos vagyok megfeledkezni, ami ilyenformán nyilván nem jó :)

    Igen, a with is hasznos, valóban :)

  • EQMontoya
    veterán

    Az a 12 karakteres behúzás csak engem zavar? Már a 8-at is sokallom, a 2 meg kevés, én a 4-re szavazok. Természetesen szóközzel, nem tabulátorral.

    "A fájl mentését én valószínűleg gtk-val oldanám meg"

    Amit írsz, az igaz, de egy szkriptnyelvnél a GUI szerintem minimum a második lépés, vagy még későbbi. Akkor is inkább a tk-t próbálnám ilyen egyszerű feladatra, mert az része az alap Python telepítésnek.

    "Tennék bele egy olyan apróságot is, hogy az "i" és "n""

    Meg a zárójelezés is teljesen felesleges az == után. Kivéve talán ezt az esetet:

    if kerdes in ('i', 'n'):

    "#!/usr/bin/python - nem feltétlenül szükséges, csak könnyebb futtatni;"

    Windows alatt is? :)

    "#-*- coding:Utf-8 -*-; nem tudom, hogy ez utóbbi feltétlenül kell-e"

    Python 3 alatt nem kell, az már tudtommal full Unicode, ékezettel, meg amit akarsz.

    Még a fájlkezelésnél használnék context managert. Szerintem szebb, elegánsabb, és minden körülmények között automatikusan bezárja a fájlt:

    with open(fajlnev, 'w') as f:
    f.write(akarmi)

    Én a 2 karakteres behúzásra esküszöm. 5-6 mélységű függvények simán vannak, ott már a 4 karakter szerintem sok.

  • cousin333
    addikt

    Sziasztok!

    Szerintem sincs szükség arra, hogy ha már "else", akkor a "kerdes" változónak másik értéket adjunk...
    Illetve nem tudom, hogy a sys miért van importálva, használva nincsen :D

    A fájl mentését én valószínűleg gtk-val oldanám meg, mert így ha terminálban adja meg a fájlnevet a user, akkor két dolog van, szerintem: vagy az abszolút elérési utat gépeli be (macera), vagy abba a könyvtárba fogja menteni a txt fájlt, amelyben a script fut...
    Tennék bele egy olyan apróságot is, hogy az "i" és "n" betűkön kívül mást ne tudjon megadni a user, mert ebben a formában ha nem "i"-t nyom, azt "n"-nek fogja érzékelni a program.
    Az elejére valószínűleg betennék még annyit, hogy
    #!/usr/bin/python - nem feltétlenül szükséges, csak könnyebb futtatni;
    #-*- coding:Utf-8 -*-; nem tudom, hogy ez utóbbi feltétlenül kell-e; python 2.5-öt használok (régi, tudom, de ez van), ott az ékezetes karakterek miatt kell; nem tudom, hogy a 2.7 vagy akár a 3 tudja-e kezelni alapból az ékezetes karaktereket.

    Az a 12 karakteres behúzás csak engem zavar? Már a 8-at is sokallom, a 2 meg kevés, én a 4-re szavazok. Természetesen szóközzel, nem tabulátorral.

    "A fájl mentését én valószínűleg gtk-val oldanám meg"

    Amit írsz, az igaz, de egy szkriptnyelvnél a GUI szerintem minimum a második lépés, vagy még későbbi. Akkor is inkább a tk-t próbálnám ilyen egyszerű feladatra, mert az része az alap Python telepítésnek.

    "Tennék bele egy olyan apróságot is, hogy az "i" és "n""

    Meg a zárójelezés is teljesen felesleges az == után. Kivéve talán ezt az esetet:

    if kerdes in ('i', 'n'):

    "#!/usr/bin/python - nem feltétlenül szükséges, csak könnyebb futtatni;"

    Windows alatt is? :)

    "#-*- coding:Utf-8 -*-; nem tudom, hogy ez utóbbi feltétlenül kell-e"

    Python 3 alatt nem kell, az már tudtommal full Unicode, ékezettel, meg amit akarsz.

    Még a fájlkezelésnél használnék context managert. Szerintem szebb, elegánsabb, és minden körülmények között automatikusan bezárja a fájlt:

    with open(fajlnev, 'w') as f:
    f.write(akarmi)

  • justmemory
    senior tag

    else:
    kerdes==('n')

    Hm? :U
    Egyébként elsőre nem rossz ez, sőt.
    Sok interakció helyett inkább argparse-t használjatok.

    Sziasztok!

    Szerintem sincs szükség arra, hogy ha már "else", akkor a "kerdes" változónak másik értéket adjunk...
    Illetve nem tudom, hogy a sys miért van importálva, használva nincsen :D

    A fájl mentését én valószínűleg gtk-val oldanám meg, mert így ha terminálban adja meg a fájlnevet a user, akkor két dolog van, szerintem: vagy az abszolút elérési utat gépeli be (macera), vagy abba a könyvtárba fogja menteni a txt fájlt, amelyben a script fut...
    Tennék bele egy olyan apróságot is, hogy az "i" és "n" betűkön kívül mást ne tudjon megadni a user, mert ebben a formában ha nem "i"-t nyom, azt "n"-nek fogja érzékelni a program.
    Az elejére valószínűleg betennék még annyit, hogy
    #!/usr/bin/python - nem feltétlenül szükséges, csak könnyebb futtatni;
    #-*- coding:Utf-8 -*-; nem tudom, hogy ez utóbbi feltétlenül kell-e; python 2.5-öt használok (régi, tudom, de ez van), ott az ékezetes karakterek miatt kell; nem tudom, hogy a 2.7 vagy akár a 3 tudja-e kezelni alapból az ékezetes karaktereket.

  • Szerintem jó kis programot készítettél :) Én is most ismerkedek a pythonnal és én se tudtam volna elsőre tökéletesen megcsinálni, pl a random string generálást eddig nem ismertem. Csak feltűnt, hogy bár létre hoztad a q változót nem hivatkoztál rá.

    Jó azért be kell vallanom, hogy nem saját fejből dolgoztam.
    Csak azt tudtam, hogyan kellene működnie és mivel lehetne megvalósítani.
    Lehet még bennem van az a fél év az egyetemen, amikor c++ kellett tanulnom.
    Nagyon nagyon büszke lennék magamra, ha az érettségi feladatokat meg tudnám oldani.

  • EQMontoya
    veterán

    import random
    import string
    import sys
    import os

    s=string.digits+string.punctuation+string.ascii_letters
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (q)

    kerdes=input("Másikat, i vagy n?")

    while kerdes==('i'):
    q=str(''.join(random.sample(s,10)))
    print (q)
    kerdes=input("Másikat, i vagy n?")
    else:
    kerdes==('n')
    mentes=input('Szeretné menteni .txt fájlban?, i vagy n?')
    if mentes==('i'):
    h=input('A fájl helye legyen:')
    os.chdir(h)
    f=open(input("Adja meg a fájl nevét:")+'.txt','w')
    f.write(q)
    f.close()
    print('Köszönöm, hogy ezt a programot választotta.')
    print('Köszönöm, hogy ezt a programot választotta.')

    Elvileg így most működik, de az os.chdir() nem tudom hogy működik konzolban, mármint, hogy kell megadni, hogy hova mentsen.

    else:
    kerdes==('n')

    Hm? :U
    Egyébként elsőre nem rossz ez, sőt.
    Sok interakció helyett inkább argparse-t használjatok.

  • Noddy
    senior tag

    Egy kicsit bekavartam már magam a végére, kezdő vagyok.
    Jó lenne egy emelt szintű érettségi és gondoltam belevágok.
    Kerestem olyan témát ami érdekel.
    Ez a jelszó generáló program jutott először eszembe.
    Lehetne még fejlesztgetni, de már örültem, hogy egy majdnem jó progi elkészült.

    Szerintem jó kis programot készítettél :) Én is most ismerkedek a pythonnal és én se tudtam volna elsőre tökéletesen megcsinálni, pl a random string generálást eddig nem ismertem. Csak feltűnt, hogy bár létre hoztad a q változót nem hivatkoztál rá.

  • Ha az elkészült jelszó a q változóban van, miért nem azt íratod ki és miért generáltatsz újat a .join(random.sample(s,10) sorral?
    Nem úgy kellene, hogy:
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (q)

    És ugyan így a fájlba íratásnál is.

    Egy kicsit bekavartam már magam a végére, kezdő vagyok.
    Jó lenne egy emelt szintű érettségi és gondoltam belevágok.
    Kerestem olyan témát ami érdekel.
    Ez a jelszó generáló program jutott először eszembe.
    Lehetne még fejlesztgetni, de már örültem, hogy egy majdnem jó progi elkészült.

  • Noddy
    senior tag

    Sziasztok!

    Akadt egy kis problémám az alábbi kóddal.
    Ez egy jelszó készítő program, a problémám pedig az, hogy amikor menteni akarom txt-be akkor nem azt menti ami az utolsó képernyőre kiírott jelszó volt volt.
    Kellene egy új változó aminek az értéke mindig az utolsó kiírott jelszó lesz?

    Köszönöm a segítséget!

    import random
    import string
    import sys
    import os

    s=string.digits+string.punctuation+string.ascii_letters
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (''.join(random.sample(s,10)))

    kerdes=input("Másikat, y or n?")

    while kerdes==('y'):
    print (''.join(random.sample(s,10)))
    kerdes=input("Másikat, y or n?")
    else:
    kerdes==('n')
    #print('Köszönöm, hogy ezt a programot választotta.')
    mentes=input('Szertné menteni .txt fájlban?, y or n?')
    if mentes==('y'):
    h=input('A fájl helye legyen:')
    os.chdir(h)
    f=open(input("Adja meg a fájl nevét:")+'.txt','w')
    f.write((''.join(random.sample(s,10))))
    f.close()

    import random
    import string
    import sys
    import os

    s=string.digits+string.punctuation+string.ascii_letters
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (q)

    kerdes=input("Másikat, i vagy n?")

    while kerdes==('i'):
    q=str(''.join(random.sample(s,10)))
    print (q)
    kerdes=input("Másikat, i vagy n?")
    else:
    kerdes==('n')
    mentes=input('Szeretné menteni .txt fájlban?, i vagy n?')
    if mentes==('i'):
    h=input('A fájl helye legyen:')
    os.chdir(h)
    f=open(input("Adja meg a fájl nevét:")+'.txt','w')
    f.write(q)
    f.close()
    print('Köszönöm, hogy ezt a programot választotta.')
    print('Köszönöm, hogy ezt a programot választotta.')

    Elvileg így most működik, de az os.chdir() nem tudom hogy működik konzolban, mármint, hogy kell megadni, hogy hova mentsen.

  • Noddy
    senior tag

    Sziasztok!

    Akadt egy kis problémám az alábbi kóddal.
    Ez egy jelszó készítő program, a problémám pedig az, hogy amikor menteni akarom txt-be akkor nem azt menti ami az utolsó képernyőre kiírott jelszó volt volt.
    Kellene egy új változó aminek az értéke mindig az utolsó kiírott jelszó lesz?

    Köszönöm a segítséget!

    import random
    import string
    import sys
    import os

    s=string.digits+string.punctuation+string.ascii_letters
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (''.join(random.sample(s,10)))

    kerdes=input("Másikat, y or n?")

    while kerdes==('y'):
    print (''.join(random.sample(s,10)))
    kerdes=input("Másikat, y or n?")
    else:
    kerdes==('n')
    #print('Köszönöm, hogy ezt a programot választotta.')
    mentes=input('Szertné menteni .txt fájlban?, y or n?')
    if mentes==('y'):
    h=input('A fájl helye legyen:')
    os.chdir(h)
    f=open(input("Adja meg a fájl nevét:")+'.txt','w')
    f.write((''.join(random.sample(s,10))))
    f.close()

    Ha az elkészült jelszó a q változóban van, miért nem azt íratod ki és miért generáltatsz újat a .join(random.sample(s,10) sorral?
    Nem úgy kellene, hogy:
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (q)

    És ugyan így a fájlba íratásnál is.

  • Sziasztok!

    Akadt egy kis problémám az alábbi kóddal.
    Ez egy jelszó készítő program, a problémám pedig az, hogy amikor menteni akarom txt-be akkor nem azt menti ami az utolsó képernyőre kiírott jelszó volt volt.
    Kellene egy új változó aminek az értéke mindig az utolsó kiírott jelszó lesz?

    Köszönöm a segítséget!

    import random
    import string
    import sys
    import os

    s=string.digits+string.punctuation+string.ascii_letters
    q=str(''.join(random.sample(s,10)))
    print ('Az Ön jelszava')
    print (''.join(random.sample(s,10)))

    kerdes=input("Másikat, y or n?")

    while kerdes==('y'):
    print (''.join(random.sample(s,10)))
    kerdes=input("Másikat, y or n?")
    else:
    kerdes==('n')
    #print('Köszönöm, hogy ezt a programot választotta.')
    mentes=input('Szertné menteni .txt fájlban?, y or n?')
    if mentes==('y'):
    h=input('A fájl helye legyen:')
    os.chdir(h)
    f=open(input("Adja meg a fájl nevét:")+'.txt','w')
    f.write((''.join(random.sample(s,10))))
    f.close()

  • #82595328
    törölt tag

    Na, milyen nagy élet lett itt hirtelen... :)

    A Python 3-ban a print már egy függvény, így ezt is lehet használni:

    with open('D:\\teszt.csv', 'w') as f:
    for sor in lista:
    print(*sor, sep=', ', file=f)

    Működik :)

    De akkor is a pandas a legegyszerűbb, csak itt a lista egy Pandas.DataFrame objektum:

    import pandas as pd
    ...
    lista.to_csv("D:\\teszt.csv", sep=',')

    ui: Ezt gyorsan felejtsd el... :)
    for i in range(len(lista)):

    Helyette inkább használd így:
    for elem in lista:

    Vagy ha mindenképpen kell az index is, akkor így:
    for i,elem in enumerate(lista):

    "Na, milyen nagy élet lett itt hirtelen... :)"

    Pedig az az igazság, hogy végre sikerült befejeznem életem első "programját" pythonban. Szóval egy darabig csendben leszek. :)
    Majdnem 100 sor lett. Még egy pici grafikus felületet is gyártottam(átvettem valahonnan) neki. Igaz látszik, hogy nagyon kezdetleges, tele van gyerekbetegségekkel, de kész van. Az alap problémát megoldja.

    A canvas modult megjegyzem. Bár egyelőre az osztályok jelentik számomra a következő lépést. Modulból így is épp eleget használtam. Viszont osztályok nélkül nem tudok tovább lépni.

  • #82595328
    törölt tag

    Nagyon szívesen!

    Egyébként ideális kérdező vagy, mert pontosan leírtad, hogy mi helyett mit szeretnél és a végén mi lett belőle.
    :R

    Köszönöm még egyszer. Azzal végül is nem lehetett vádolni, hogy nem tudom, mit akarok. :)

  • csaszizoltan
    csendes tag

    Köszönöm!
    Ez lett a vége:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in lista:
    f.write(', '.join([str(elem) for elem in i]) +'\n')

    Legközelebb használd a Programkód gombot!

    Nagyon szívesen!

    Egyébként ideális kérdező vagy, mert pontosan leírtad, hogy mi helyett mit szeretnél és a végén mi lett belőle.
    :R

  • cousin333
    addikt

    Köszönöm!
    Ez lett a vége:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in lista:
    f.write(', '.join([str(elem) for elem in i]) +'\n')

    Legközelebb használd a Programkód gombot!

    Na, milyen nagy élet lett itt hirtelen... :)

    A Python 3-ban a print már egy függvény, így ezt is lehet használni:

    with open('D:\\teszt.csv', 'w') as f:
    for sor in lista:
    print(*sor, sep=', ', file=f)

    Működik :)

    De akkor is a pandas a legegyszerűbb, csak itt a lista egy Pandas.DataFrame objektum:

    import pandas as pd
    ...
    lista.to_csv("D:\\teszt.csv", sep=',')

    ui: Ezt gyorsan felejtsd el... :)
    for i in range(len(lista)):

    Helyette inkább használd így:
    for elem in lista:

    Vagy ha mindenképpen kell az index is, akkor így:
    for i,elem in enumerate(lista):

  • #82595328
    törölt tag

    lista = ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    string_lista = []
    for elem in lista:
    string_lista.append(str(elem))
    print ', '.join(string_lista)

    console:
    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651

    vagy egyszerűbben, de nem annyira érthetően.

    lista = ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    print ', '.join([str(elem) for elem in lista])

    Remélem az első kód magáért beszél, ha nem, csak nyugodtan kérdezz!

    Köszönöm!
    Ez lett a vége:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in lista:
    f.write(', '.join([str(elem) for elem in i]) +'\n')

    Legközelebb használd a Programkód gombot!

    [ Módosította: Karma ]
  • csaszizoltan
    csendes tag

    Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
    [[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

    Ezt fájlba írtam az alábbi paranccsal:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in range(len(lista)):
    f.write((str(lista)+'\n'))

    Ez majdnem jó is lenne, csak ezt kapom:

    ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
    ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

    Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
    Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
    Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

    lista = ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    string_lista = []
    for elem in lista:
    string_lista.append(str(elem))
    print ', '.join(string_lista)

    console:
    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651

    vagy egyszerűbben, de nem annyira érthetően.

    lista = ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    print ', '.join([str(elem) for elem in lista])

    Remélem az első kód magáért beszél, ha nem, csak nyugodtan kérdezz!

  • EQMontoya
    veterán

    OK, a lenyeg hogy a megoldas egy harmadik:) en csak netto algoirasra - versenyek - hasznalom a pythont azt se regota, sorry, nem kellett volna beleszolnom

    Szerk. korrekt, sztem volt ahol en is hasznalhattam volna csak eszembe nem jutott keresni - nekem a list, map, set es problemamentes int az ami altalaban fontos a pythonbol, de akkor mar erdemes mas nyelvi finomsagokat is megtanulni

    No para, csak nem akarom, hogy a kolléga valami tákolást tanuljon meg, amikor van a nyelvben kifejezetten szép megoldás az adott problémára. :)
    Nálam sem fő profil egyébként, de úgy elbénázok benne.

  • axioma
    veterán

    elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

    Naa, ne taknyoljunk!

    ", ".join(list)

    OK, a lenyeg hogy a megoldas egy harmadik:) en csak netto algoirasra - versenyek - hasznalom a pythont azt se regota, sorry, nem kellett volna beleszolnom

    Szerk. korrekt, sztem volt ahol en is hasznalhattam volna csak eszembe nem jutott keresni - nekem a list, map, set es problemamentes int az ami altalaban fontos a pythonbol, de akkor mar erdemes mas nyelvi finomsagokat is megtanulni

  • EQMontoya
    veterán

    Vagy megcsinalod azt, hogy a beepitett str(lista[i]) helyett te mesz rajta vegig es osszeraksz egy stringet; vagy az str(lista[i]) stringet gyurogatod, amig jo nem lesz. Utobbi a kevesbe szep megodlas... elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

    Szerk. hat igen, a szogletes zarojelben i index egy italic formazas lett neki is... ott van az eredetileg.

    elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

    Naa, ne taknyoljunk!

    ", ".join(list)

  • axioma
    veterán

    Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
    [[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

    Ezt fájlba írtam az alábbi paranccsal:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in range(len(lista)):
    f.write((str(lista)+'\n'))

    Ez majdnem jó is lenne, csak ezt kapom:

    ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
    ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

    Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
    Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
    Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

    Vagy megcsinalod azt, hogy a beepitett str(lista[i]) helyett te mesz rajta vegig es osszeraksz egy stringet; vagy az str(lista[i]) stringet gyurogatod, amig jo nem lesz. Utobbi a kevesbe szep megodlas... elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

    Szerk. hat igen, a szogletes zarojelben i index egy italic formazas lett neki is... ott van az eredetileg.

  • EQMontoya
    veterán

    Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
    [[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

    Ezt fájlba írtam az alábbi paranccsal:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in range(len(lista)):
    f.write((str(lista)+'\n'))

    Ez majdnem jó is lenne, csak ezt kapom:

    ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
    ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

    Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
    Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
    Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

    Az a problémád, hogy nem egy listád van, hanem listákat tartalmazó listád.
    A kiírás pedig úgy biztosan nem jó, ahogy bemásoltad, úgy az egész listát kiírni n-szer.

  • #82595328
    törölt tag

    Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Hát a konkrét teendő kb. ez :) :
    Megtanulni pythonul + grafikus felület + sql szerver. A program lefordítása win-re és linuxra.

    A viccet félretéve a kódot már megírtam, amit le akarok futtatni, csak be kellene ágyaznom ebbe a programba. A gondom az, hogy beolvasott sor dátumot is tartalmaz, amit a datetime modulnak át kellene adnom.
    A dátum ilyen formátumú lehet: 2016-01-01 vagy 2016.01.01
    A dtdate függvénynek pedig így kellene előállítanom: (2016,1,1). Na ezt nem tudom, egyelőre hogy kell. Bár gondolom splittel,

    if '-' in dátum
    spit1
    elif '.' in dátum
    spit2

    Igaz egyelőre azt sem tudom, hogy kell fájlba kiírni a végeredményt, de az menni fog, csak még nem jutottam el az anyagban odáig.

    Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
    [[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

    Ezt fájlba írtam az alábbi paranccsal:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in range(len(lista)):
    f.write((str(lista)+'\n'))

    Ez majdnem jó is lenne, csak ezt kapom:

    ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
    ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

    Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
    Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
    Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

  • justmemory
    senior tag

    :) köszi. Sajnos a pip install nem működik; azt nem tettem hozzá - és ezért kérdeztem rá az arm-ra -, hogy telefonra tenném föl, és a nokia n900 alap python-ja sajnos package error-t ír (már korábblan is próbáltam).

    Végső soron nem baj a függőség, legfeljebb forrásból próbálom feltenni; a mysql-hez szükséges modult is csak így tudtam föltenni. Úgy látom itt is ezt kell próbáljam, csak meg akartam spórolni a küzdést :)

    Még az előző dátumos kérdéshez: úgy láttam sql szerver is felmerült a kérdésben; mivel a python-nak van sql-hez modulja, ha sql adatbázisból kerül beolvasásra, akkor eleve lehet már a bekérésnél is picit "játszani" a dologgal... Mármint ha nem csv-ből kerül beolvasásra, hanem esetleg közvetlenül az adatbázisból.

    Végül a pandas 0.2-t sikerült feltennem forrásból úgy, hogy működjön is (a 0.1 valamiért scipy hibát írt ki az egyik .so fájlra...). Tudom, hogy régi, de a numpy verzióm 1.4.0, python 2.5... Az alapdolgokra és tanulni azért remélem jó lesz :)

  • justmemory
    senior tag

    pip install pandas ??? :)

    Talán mehetne, legfeljebb a C-optimalizált részek helyett a Python kód futna. Tehát működne, csak lassabban. Ha viszont nincs dateutils, akkor szerintem nem települ, mert még a 0.12-es verziónak is függősége.

    :) köszi. Sajnos a pip install nem működik; azt nem tettem hozzá - és ezért kérdeztem rá az arm-ra -, hogy telefonra tenném föl, és a nokia n900 alap python-ja sajnos package error-t ír (már korábblan is próbáltam).

    Végső soron nem baj a függőség, legfeljebb forrásból próbálom feltenni; a mysql-hez szükséges modult is csak így tudtam föltenni. Úgy látom itt is ezt kell próbáljam, csak meg akartam spórolni a küzdést :)

    Még az előző dátumos kérdéshez: úgy láttam sql szerver is felmerült a kérdésben; mivel a python-nak van sql-hez modulja, ha sql adatbázisból kerül beolvasásra, akkor eleve lehet már a bekérésnél is picit "játszani" a dologgal... Mármint ha nem csv-ből kerül beolvasásra, hanem esetleg közvetlenül az adatbázisból.

  • cousin333
    addikt

    Ha már belekeveredtem itt a dolgokba: arról esetleg van infója valakinek, hogy a python pandas ARM architektúrán elfut-e...? Az angol nyelvű oldalakon különböző véleményeket olvasok erről... Numpy van, viszont olyan verziót keresek, amihez nem kell a python-dateutils illetve pytz; már ha van ilyen... Eleve python 2.5-höz gondoltam feltenni.

    pip install pandas ??? :)

    Talán mehetne, legfeljebb a C-optimalizált részek helyett a Python kód futna. Tehát működne, csak lassabban. Ha viszont nincs dateutils, akkor szerintem nem települ, mert még a 0.12-es verziónak is függősége.

  • cousin333
    addikt

    Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Hát a konkrét teendő kb. ez :) :
    Megtanulni pythonul + grafikus felület + sql szerver. A program lefordítása win-re és linuxra.

    A viccet félretéve a kódot már megírtam, amit le akarok futtatni, csak be kellene ágyaznom ebbe a programba. A gondom az, hogy beolvasott sor dátumot is tartalmaz, amit a datetime modulnak át kellene adnom.
    A dátum ilyen formátumú lehet: 2016-01-01 vagy 2016.01.01
    A dtdate függvénynek pedig így kellene előállítanom: (2016,1,1). Na ezt nem tudom, egyelőre hogy kell. Bár gondolom splittel,

    if '-' in dátum
    spit1
    elif '.' in dátum
    spit2

    Igaz egyelőre azt sem tudom, hogy kell fájlba kiírni a végeredményt, de az menni fog, csak még nem jutottam el az anyagban odáig.

    Az első pár dologban nem tudok kellően segíteni, de legalább a programot nem is kell lefordítani... :)

    A leírtak alapján továbbra is a pandas modult favorizálnám, mivel nagyon sokrétűen használható. Hogy a példádnál maradjak:

    - képes beolvasni a csv és más strukturált fájlokat

    - beolvasásnál meg lehet mondani, hogy melyik oszlop(ok) tartalmaznak dátumot (pl. akár akkor is, ha az év, hónap, nap és idő 4 külön oszlopban szerepel)

    - a dátum értelmezéséhez megadható saját függvény, de az ésszerűség határain belül képes értelmezni őket. Például az alábbi tesztfájlt gond nélkül beolvassa:

    Szam,Datum,Szoveg,Pont
    11,2016-01-01,Valami,12
    21,2016-03-05,Masik, 23
    31,2016-1-5,Harmadik,34
    41,2016-feb-8,Negyedik,48
    51,2016.08.12,Otodik,56

    Ehhez csak az alábbi kódot használtam:

    import pandas as pd
    data = pd.read_table('D:\\pandas_test.txt', sep=',', parse_dates=[1])

    Az eredmény pedig egy Pandas.DataFrame objektum lesz:

    >>> data.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 4 columns):
    Szam 5 non-null int64
    Datum 5 non-null datetime64[ns]
    Szoveg 5 non-null object
    Pont 5 non-null int64
    dtypes: datetime64[ns](1), int64(2), object(1)
    memory usage: 240.0+ bytes

    Látható, hogy a Datum oszlop típusa datetime64. A beolvasott táblázat valahogy így néz ki (A legelső oszlop az index, amit jelen esetben ő maga generált):

    >>> print(data)
    Szam Datum Szoveg Pont
    0 11 2016-01-01 Valami 12
    1 21 2016-03-05 Masik 23
    2 31 2016-01-05 Harmadik 34
    3 41 2016-02-08 Negyedik 48
    4 51 2016-08-12 Otodik 56

    A dt.date függvényednek szükséges formátumot is könnyen előállíthatod:

    >>> x = data['Datum']
    >>> x.dt.date.values
    array([datetime.date(2016, 1, 1), datetime.date(2016, 3, 5),
    datetime.date(2016, 1, 5), datetime.date(2016, 2, 8),
    datetime.date(2016, 8, 12)], dtype=object)

    Ezt már megetetheted a függvényeddel. De igazából nem is biztos, hogy kell, hiszen az oszlop már dátum formátumú.

  • justmemory
    senior tag

    Ha már belekeveredtem itt a dolgokba: arról esetleg van infója valakinek, hogy a python pandas ARM architektúrán elfut-e...? Az angol nyelvű oldalakon különböző véleményeket olvasok erről... Numpy van, viszont olyan verziót keresek, amihez nem kell a python-dateutils illetve pytz; már ha van ilyen... Eleve python 2.5-höz gondoltam feltenni.

  • justmemory
    senior tag

    #example timestamp: Mar 30 11:49:04.880 - the last part can be milisecs or microsecs (6 digits) as well.
    timestamp_regex = re.compile('[A-Z][a-z][a-z] \d+ \d+:\d+:\d+\.\d+')
    time_in_line = datetime.strptime(timestamp_regex.findall(msg)[0],"%b %d %H:%M:%S.%f")

    Szóval ilyenkor ez van. :)

    Jaaa, aham, nem is annyira vészes :)

    Ha változik a formátum, akkor valószínűleg ez a legjobb megoldás :))

  • EQMontoya
    veterán

    Igen, én első körben az if-re gondoltam, de a try is jó, nyilván.
    Az a gond, hogy nem tudni, hogy a kétféle dátumformátum honnan és milyen módon kerül beolvasásra, de gondolom egy fájl-ból, simán str-ként vagy int-ként.

    Ha a formátuma változhat, akkor arra ki kell találni valamit, mert nyilván a sok try és if nem szép :) Arról nem is beszélve, hogy a formátumonbanl akár az is változhat, hogy 2016-01-01 vagy 2016-1-1... :)

    Regex-et még nem írtam, nem volt rá szükségem... :) Relatíve alapszinten vagyok még, bár erre nincsen rálátásom, mert amúgy közöm nincs az informatikához végzettségileg

    #example timestamp: Mar 30 11:49:04.880 - the last part can be milisecs or microsecs (6 digits) as well.
    timestamp_regex = re.compile('[A-Z][a-z][a-z] \d+ \d+:\d+:\d+\.\d+')
    time_in_line = datetime.strptime(timestamp_regex.findall(msg)[0],"%b %d %H:%M:%S.%f")

    Szóval ilyenkor ez van. :)

  • justmemory
    senior tag

    Szerintem még kétféle formátumra is elég rusnya lesz.
    Kb. megoldások:
    -Felismered Te magad, hogy melyik formátum, és ifelsz.
    -try strptime(format 1) expect: blabla strptime(format 2)... (azaz megpróbálod az egyikkel, ha nem sikerül, a másikkal is)
    -Írsz valami regexet, hogy mi lehet a pattern. Aki nem használt még regexet, az szenvedni fog.

    Igen, én első körben az if-re gondoltam, de a try is jó, nyilván.
    Az a gond, hogy nem tudni, hogy a kétféle dátumformátum honnan és milyen módon kerül beolvasásra, de gondolom egy fájl-ból, simán str-ként vagy int-ként.

    Ha a formátuma változhat, akkor arra ki kell találni valamit, mert nyilván a sok try és if nem szép :) Arról nem is beszélve, hogy a formátumonbanl akár az is változhat, hogy 2016-01-01 vagy 2016-1-1... :)

    Regex-et még nem írtam, nem volt rá szükségem... :) Relatíve alapszinten vagyok még, bár erre nincsen rálátásom, mert amúgy közöm nincs az informatikához végzettségileg

  • EQMontoya
    veterán

    Hát igen; a végcél ismeretlen, így nehezebb konkrétumot mondani; én olykor használom az strptime-ot, mert tutifix a formátum :)
    Ha változik, az nyilván más helyzet; elvileg fixen kétféle lehet a kérdés szerint. Ha dinamikusabb a helyzet, akkor nyilván kezelni kell :)

    Szerintem még kétféle formátumra is elég rusnya lesz.
    Kb. megoldások:
    -Felismered Te magad, hogy melyik formátum, és ifelsz.
    -try strptime(format 1) expect: blabla strptime(format 2)... (azaz megpróbálod az egyikkel, ha nem sikerül, a másikkal is)
    -Írsz valami regexet, hogy mi lehet a pattern. Aki nem használt még regexet, az szenvedni fog.

  • justmemory
    senior tag

    Az egyetlen baja az strptime-nak, hogy flexibilitása szerintem egy márványtömbbel vetekszik.
    Ha kicsit is változik az idő kiírásának formátuma, szórja az exceptiont, mint muter a lisztet a rétes alá.
    Kivéve, ha írsz egy elég okos regexet a format részbe, de úgy meg már nem sokkal könnyebb használni, mint megcsinálni kézzel.
    Az strftime viszont tényleg baba.

    Hát igen; a végcél ismeretlen, így nehezebb konkrétumot mondani; én olykor használom az strptime-ot, mert tutifix a formátum :)
    Ha változik, az nyilván más helyzet; elvileg fixen kétféle lehet a kérdés szerint. Ha dinamikusabb a helyzet, akkor nyilván kezelni kell :)

  • EQMontoya
    veterán

    Szia(sztok)!

    Autodidakta pythonozó vagyok, leginkább öncélú szórakozásképpen írok magamnak programokat, tehát közel sem biztos, hogy a válaszom megfelelő; javítson ki, aki okosabb ebben!

    Szerintem nem kell split; .strptime és .strftime átalakításokkal sok mindent el lehet érni attól függően, hogy mi a végcél.

    Kiírni majd az open("fájlnév", "rw")-el tudod például.

    Az egyetlen baja az strptime-nak, hogy flexibilitása szerintem egy márványtömbbel vetekszik.
    Ha kicsit is változik az idő kiírásának formátuma, szórja az exceptiont, mint muter a lisztet a rétes alá.
    Kivéve, ha írsz egy elég okos regexet a format részbe, de úgy meg már nem sokkal könnyebb használni, mint megcsinálni kézzel.
    Az strftime viszont tényleg baba.

  • justmemory
    senior tag

    Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Hát a konkrét teendő kb. ez :) :
    Megtanulni pythonul + grafikus felület + sql szerver. A program lefordítása win-re és linuxra.

    A viccet félretéve a kódot már megírtam, amit le akarok futtatni, csak be kellene ágyaznom ebbe a programba. A gondom az, hogy beolvasott sor dátumot is tartalmaz, amit a datetime modulnak át kellene adnom.
    A dátum ilyen formátumú lehet: 2016-01-01 vagy 2016.01.01
    A dtdate függvénynek pedig így kellene előállítanom: (2016,1,1). Na ezt nem tudom, egyelőre hogy kell. Bár gondolom splittel,

    if '-' in dátum
    spit1
    elif '.' in dátum
    spit2

    Igaz egyelőre azt sem tudom, hogy kell fájlba kiírni a végeredményt, de az menni fog, csak még nem jutottam el az anyagban odáig.

    Szia(sztok)!

    Autodidakta pythonozó vagyok, leginkább öncélú szórakozásképpen írok magamnak programokat, tehát közel sem biztos, hogy a válaszom megfelelő; javítson ki, aki okosabb ebben!

    Szerintem nem kell split; .strptime és .strftime átalakításokkal sok mindent el lehet érni attól függően, hogy mi a végcél.

    Kiírni majd az open("fájlnév", "rw")-el tudod például.

  • #82595328
    törölt tag

    Már írták, hogyan lehet két with-et egymásba ágyazni, Ettől függetlenül én még nem ijednék meg pár ezer sorocskától, hanem egyben beolvasnám, hacsak nem kvarcórán akarod futtatni... :) Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

    Fejlécet tartalmazó, több oszlopos csv fájlra meg javaslom a pandas modult. Van pl. külön egy read_csv függvénye, ami igen gyorsan képes nagy mennyiségű adatot beolvasni és jónéhány trükköt is ismer. Ezt szintén gyorsan képes feldolgozni, soronként, oszloponként vagy elemenként, majd a to_csv függvénnyel kiírathatod. Arra is van lehetőség, hogy kisebb csomagokban (chunk) olvasd és írd a fájlt. Néhány millió sornál már én is elgondolkoznék ezen a megoldáson.

    Biztosra veszem, hogy lényegesen gyorsabb lesz, mint a sima open függvény meg a soronkénti iterálás. Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Hát a konkrét teendő kb. ez :) :
    Megtanulni pythonul + grafikus felület + sql szerver. A program lefordítása win-re és linuxra.

    A viccet félretéve a kódot már megírtam, amit le akarok futtatni, csak be kellene ágyaznom ebbe a programba. A gondom az, hogy beolvasott sor dátumot is tartalmaz, amit a datetime modulnak át kellene adnom.
    A dátum ilyen formátumú lehet: 2016-01-01 vagy 2016.01.01
    A dtdate függvénynek pedig így kellene előállítanom: (2016,1,1). Na ezt nem tudom, egyelőre hogy kell. Bár gondolom splittel,

    if '-' in dátum
    spit1
    elif '.' in dátum
    spit2

    Igaz egyelőre azt sem tudom, hogy kell fájlba kiírni a végeredményt, de az menni fog, csak még nem jutottam el az anyagban odáig.

  • cousin333
    addikt

    Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

    Az a durva, hogy nem nagyon.
    Mostanság dolgoztam egy logminer alkalmazáson, amit pythonban raktam össze, és a sima open + soronkénti iterálásnál cache-el, chunk-kal, mindenhogy próbáltam jobbat írni, de nem sikerült.
    Nagyon jól meg van írva alatta az API, és szerintem behúzza memóriába kb. az egész filet.
    Pedig néhány gigás textfile-okat olvasgattam, szóval elég jól mérhető lett volna a különbség.

    Melyik Python verzió volt? A 3-asban nyilván iterátort használ, minden ciklusban kér (és kap) pontosan egy új sort, ezáltal kevés memóriát fogyaszt. Akkor tölti be az egészet egyszerre, ha listát készítesz belőle. Viszont a Python for ciklus nem a sebességéről híres, de talán a fájllal könnyebb dolga van, bár az sem fix, hogy összefüggő memóriacímen helyezkedik el.

    Én a fájl olvasgatásnál mondjuk a numpy genfromtxt függvényét vetettem össze a pandas from_table függvényével és meglepetésre utóbbi látványosan gyorsabb volt.

  • EQMontoya
    veterán

    Már írták, hogyan lehet két with-et egymásba ágyazni, Ettől függetlenül én még nem ijednék meg pár ezer sorocskától, hanem egyben beolvasnám, hacsak nem kvarcórán akarod futtatni... :) Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

    Fejlécet tartalmazó, több oszlopos csv fájlra meg javaslom a pandas modult. Van pl. külön egy read_csv függvénye, ami igen gyorsan képes nagy mennyiségű adatot beolvasni és jónéhány trükköt is ismer. Ezt szintén gyorsan képes feldolgozni, soronként, oszloponként vagy elemenként, majd a to_csv függvénnyel kiírathatod. Arra is van lehetőség, hogy kisebb csomagokban (chunk) olvasd és írd a fájlt. Néhány millió sornál már én is elgondolkoznék ezen a megoldáson.

    Biztosra veszem, hogy lényegesen gyorsabb lesz, mint a sima open függvény meg a soronkénti iterálás. Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

    Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

    Az a durva, hogy nem nagyon.
    Mostanság dolgoztam egy logminer alkalmazáson, amit pythonban raktam össze, és a sima open + soronkénti iterálásnál cache-el, chunk-kal, mindenhogy próbáltam jobbat írni, de nem sikerült.
    Nagyon jól meg van írva alatta az API, és szerintem behúzza memóriába kb. az egész filet.
    Pedig néhány gigás textfile-okat olvasgattam, szóval elég jól mérhető lett volna a különbség.

  • cousin333
    addikt

    Egy olyan kérdésem van, hogy hogy tudok egyszerre 2 fájl-lal dolgozni. Az egyikből olvasni, a másikba írni.

    Hogy érthető legyen itt egy példa feladat:
    Azaz teszem azt van egy listám(forras.csv):
    Név Összeg
    Kis 1000
    Nagy 500
    Pici 200

    Beolvasom soronként listába, és mondjuk hozzáadok minden összeghez 10-t.

    Név Összeg
    Kis 1010
    Nagy 510
    Pici 210

    Aztán kiírom egy másik fájlba. Pl: cél.csv

    Ezt így szerintem meg tudom csinálni.

    A gondom az, hogy mi van akkor, ha a lista több 1.000 elemet tartalmaz? Mert akkor én úgy csinálnám, hogy:
    1. Megnyitom olvasásra a forrás fájlt.
    2. Megnyitom append-del a cél fájlt.
    3. Elkezdem soronként beolvasni a forrásfájlt.
    4. Elvégzem a műveletet.
    5. Kiírom soronként a célfájlba.
    5. Ha kész bezárom mindkét fájlt.

    Na ezt hogy kell csinálni?
    Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

    Már írták, hogyan lehet két with-et egymásba ágyazni, Ettől függetlenül én még nem ijednék meg pár ezer sorocskától, hanem egyben beolvasnám, hacsak nem kvarcórán akarod futtatni... :) Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

    Fejlécet tartalmazó, több oszlopos csv fájlra meg javaslom a pandas modult. Van pl. külön egy read_csv függvénye, ami igen gyorsan képes nagy mennyiségű adatot beolvasni és jónéhány trükköt is ismer. Ezt szintén gyorsan képes feldolgozni, soronként, oszloponként vagy elemenként, majd a to_csv függvénnyel kiírathatod. Arra is van lehetőség, hogy kisebb csomagokban (chunk) olvasd és írd a fájlt. Néhány millió sornál már én is elgondolkoznék ezen a megoldáson.

    Biztosra veszem, hogy lényegesen gyorsabb lesz, mint a sima open függvény meg a soronkénti iterálás. Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

  • EQMontoya
    veterán

    Egy olyan kérdésem van, hogy hogy tudok egyszerre 2 fájl-lal dolgozni. Az egyikből olvasni, a másikba írni.

    Hogy érthető legyen itt egy példa feladat:
    Azaz teszem azt van egy listám(forras.csv):
    Név Összeg
    Kis 1000
    Nagy 500
    Pici 200

    Beolvasom soronként listába, és mondjuk hozzáadok minden összeghez 10-t.

    Név Összeg
    Kis 1010
    Nagy 510
    Pici 210

    Aztán kiírom egy másik fájlba. Pl: cél.csv

    Ezt így szerintem meg tudom csinálni.

    A gondom az, hogy mi van akkor, ha a lista több 1.000 elemet tartalmaz? Mert akkor én úgy csinálnám, hogy:
    1. Megnyitom olvasásra a forrás fájlt.
    2. Megnyitom append-del a cél fájlt.
    3. Elkezdem soronként beolvasni a forrásfájlt.
    4. Elvégzem a műveletet.
    5. Kiírom soronként a célfájlba.
    5. Ha kész bezárom mindkét fájlt.

    Na ezt hogy kell csinálni?
    Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

    Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

    Persze.

    De lehet így is:
    with open('a', 'w') as a, open('b', 'w') as b:

    Whatever you want... :)

  • #82595328
    törölt tag

    Egy olyan kérdésem van, hogy hogy tudok egyszerre 2 fájl-lal dolgozni. Az egyikből olvasni, a másikba írni.

    Hogy érthető legyen itt egy példa feladat:
    Azaz teszem azt van egy listám(forras.csv):
    Név Összeg
    Kis 1000
    Nagy 500
    Pici 200

    Beolvasom soronként listába, és mondjuk hozzáadok minden összeghez 10-t.

    Név Összeg
    Kis 1010
    Nagy 510
    Pici 210

    Aztán kiírom egy másik fájlba. Pl: cél.csv

    Ezt így szerintem meg tudom csinálni.

    A gondom az, hogy mi van akkor, ha a lista több 1.000 elemet tartalmaz? Mert akkor én úgy csinálnám, hogy:
    1. Megnyitom olvasásra a forrás fájlt.
    2. Megnyitom append-del a cél fájlt.
    3. Elkezdem soronként beolvasni a forrásfájlt.
    4. Elvégzem a műveletet.
    5. Kiírom soronként a célfájlba.
    5. Ha kész bezárom mindkét fájlt.

    Na ezt hogy kell csinálni?
    Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

  • cousin333
    addikt

    Itt a feladatsor. A családban pont érettségi làz van, ezért elő tudtam keresni, talán segít a kérdésekben.

    Egyébként a nyelvi elemekből és az alap Python telepítésben lévő bármilyen modult lehet használni.

    Köszönöm!

    Így azért már más a megoldás, hiszen a feladat szerint nem lehet egyszerre beolvasni a teljes fájlt. Ebben az esetben az első 2 példa továbbra is érvényes, a harmadiktól kezdve más megközelítés szükséges. Én összevonnám a feladatokat, hogy a fájlt csak egyszer kelljen megnyitni és iterálni benne. Remélem nem maradt ki semmi, nem futtattam le a kódot:

    with open("kiserlet.txt", "r") as f:

    fej_db = 0 # Fejek száma
    iras_db = 0 # Írások száma
    dupla_db = 0 # A pontosan két egymást követő fejek száma

    csakfej = 0 # A csak fejekből álló sorozat aktuális hossza
    csakfej_max = 0 # A csak fejekből álló sorozat maximális hossza

    # A legutóbbi három dobás tárolása
    e1, e2, e3 = None, None, None

    # Szépen soronként végiglépdelünk a fájlon
    for line in f:
    line = line.strip('\n')

    if line == 'F':
    fej_db += 1

    # Számolás a 6. feladathoz
    csakfej += 1
    csakfej_max = max(csakfej_max, csakfej)

    if line == 'I':
    iras_db += 1

    # Számolás a 6. feladathoz
    csakfej_max = max(csakfej_max, csakfej)
    csakfej = 0

    # Számolás az 5. feladathoz
    if line == 'I' and e1 == 'F' and e2 == 'F' and e3 == 'I':
    dupla_db += 1

    # Eltároljuk a legutóbbi dobásokat
    e1, e2, e3 = line, e1, e2


    # 3. feladat: Az összes dobás száma a fejek és írások összege
    ossz_db = fej_db + iras_db
    print('A dobások száma: {}'.format(ossz_db))

    # 4. feladat
    print('A fejek relatív gyakorisága: {:.2%}'.format(fej_db/ossz_db))

    # 5.feladat
    print('A dupla fejek száma: {}'.format(dupla_db))

    # 6. feladat
    print('A leghosszabb fej-sorozat: {} dobás'.format(csakfej_max))

  • Karma
    félisten

    Nem találtam a feladatsort, ezért az általad írtakra hagyatkozom:

    Az első feladatban nem zártad be a megnyitott fájlt. Ezt megelőzheted a with használatával, az automatikusan bezárja, és amúgy is a preferált mód. Megnyitjuk a fájlt, egy lépésben beolvassuk és a sortörések (\n) mentén szétszedjük:

    with open('D:\\kiserlet.txt', 'r') as f:
    kiserlet = f.read().split('\n')

    A második példában feltétlenül számokat kell beírni? Használhatnád a random könyvtár choice függvényét is, ami egy lista-szerű elemből választ ki egyet találomra. Ez a lista most persze fej vagy írás:

    valasztek = ('F', 'I')

    tipp = input("Fej (F) vagy írás (I)? ")

    if tipp == random.choice(valasztek):
    print("Eltaláltad!")
    else:
    print("Sajnos tévedtél!")

    A harmadik feladat megoldása jó. Esetleg még így lehetne:

    print("A kiserlet {} mintabol allt.".format(len(kiserlet)))

    Tekintve, hogy a fenti beolvasás nyomán a kiserlet egy lista, a negyedik feladat megoldásához felesleges a for ciklus, és használhatjuk a sztring formázást is a céljainkhoz.

    arany = kiserlet.count("F") / len(kiserlet)
    print("A fejek relatív gyakorisága {:.2%}".format(arany))

    Az utolsó feladat pontos célja nem elég világos számomra, ezért most feltételezem, hogy nem lapolódhatnak át az "FF"-ek, tehát az "FFF" csak egynek számít, az "FFFF" meg kettőnek. Ebben az esetben használhatunk beépített függvényt, de ehhez a listánkból először egy sztringet gyártanunk a join használatával. Így egy lépésből megvan a kívánt szám:

    dupla = "".join(kiserlet).count("FF")
    print("A két egymást követő fejek száma: {}".format(dupla))

    Tényleg, mit lehet használni egy ilyen vizsgán?

    Itt a feladatsor. A családban pont érettségi làz van, ezért elő tudtam keresni, talán segít a kérdésekben.

    Egyébként a nyelvi elemekből és az alap Python telepítésben lévő bármilyen modult lehet használni.

  • cousin333
    addikt

    import random

    asd = open("kiserlet.txt", "r")
    kiserlet = asd.read()

    print "On szerint fej lesz vagy iras?"

    tipp=input("Irjon be 0-t ha fej, vagy egyest ha iras: ")

    gepi=random.randrange(0, 2)

    if int(tipp)==gepi:
    print "Eltalalta"
    else:
    print "Sajnos tevedett"

    #3-ik feladat

    print "a feleadatbeli kiserlet ", len(kiserlet), "darab mintabol all."

    #4-ik feladat

    fejekszama = 0

    for i in kiserlet:
    if i == "F":
    fejekszama = fejekszama + 1

    fejekszama = float(fejekszama)

    print "a fejek relativ gyakorisaga: ", (fejekszama/len(kiserlet))*100, "%."

    szamlalo = 0
    ketfej= 0

    while szamlalo < len(kiserlet):
    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
    ketfej = ketfej +1
    szamlalo = szamlalo + 1
    else:
    szamlalo = szamlalo + 1

    print ketfej

    Nem találtam a feladatsort, ezért az általad írtakra hagyatkozom:

    Az első feladatban nem zártad be a megnyitott fájlt. Ezt megelőzheted a with használatával, az automatikusan bezárja, és amúgy is a preferált mód. Megnyitjuk a fájlt, egy lépésben beolvassuk és a sortörések (\n) mentén szétszedjük:

    with open('D:\\kiserlet.txt', 'r') as f:
    kiserlet = f.read().split('\n')

    A második példában feltétlenül számokat kell beírni? Használhatnád a random könyvtár choice függvényét is, ami egy lista-szerű elemből választ ki egyet találomra. Ez a lista most persze fej vagy írás:

    valasztek = ('F', 'I')

    tipp = input("Fej (F) vagy írás (I)? ")

    if tipp == random.choice(valasztek):
    print("Eltaláltad!")
    else:
    print("Sajnos tévedtél!")

    A harmadik feladat megoldása jó. Esetleg még így lehetne:

    print("A kiserlet {} mintabol allt.".format(len(kiserlet)))

    Tekintve, hogy a fenti beolvasás nyomán a kiserlet egy lista, a negyedik feladat megoldásához felesleges a for ciklus, és használhatjuk a sztring formázást is a céljainkhoz.

    arany = kiserlet.count("F") / len(kiserlet)
    print("A fejek relatív gyakorisága {:.2%}".format(arany))

    Az utolsó feladat pontos célja nem elég világos számomra, ezért most feltételezem, hogy nem lapolódhatnak át az "FF"-ek, tehát az "FFF" csak egynek számít, az "FFFF" meg kettőnek. Ebben az esetben használhatunk beépített függvényt, de ehhez a listánkból először egy sztringet gyártanunk a join használatával. Így egy lépésből megvan a kívánt szám:

    dupla = "".join(kiserlet).count("FF")
    print("A két egymást követő fejek száma: {}".format(dupla))

    Tényleg, mit lehet használni egy ilyen vizsgán?

  • EQMontoya
    veterán

    import random

    asd = open("kiserlet.txt", "r")
    kiserlet = asd.read()

    print "On szerint fej lesz vagy iras?"

    tipp=input("Irjon be 0-t ha fej, vagy egyest ha iras: ")

    gepi=random.randrange(0, 2)

    if int(tipp)==gepi:
    print "Eltalalta"
    else:
    print "Sajnos tevedett"

    #3-ik feladat

    print "a feleadatbeli kiserlet ", len(kiserlet), "darab mintabol all."

    #4-ik feladat

    fejekszama = 0

    for i in kiserlet:
    if i == "F":
    fejekszama = fejekszama + 1

    fejekszama = float(fejekszama)

    print "a fejek relativ gyakorisaga: ", (fejekszama/len(kiserlet))*100, "%."

    szamlalo = 0
    ketfej= 0

    while szamlalo < len(kiserlet):
    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
    ketfej = ketfej +1
    szamlalo = szamlalo + 1
    else:
    szamlalo = szamlalo + 1

    print ketfej

    Ha jól sejtem, a végén kapsz egy exception-t. :)
    Index <x> is out of bounds.

    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":

    Itt ugyanis szamlalo+1 simán túlindexel.

    További problémák a kóddal, hogy rosszul számolsz.
    Mert 'IFFFI' sorozatot beszámítod kétszer, pedig ha jól értem, Neked azok az esetek kellenek, amikor pontosan két fej van egymás mögött.

  • szaszayanou
    aktív tag

    Van baj, de rakd be az egész kódot, úgy okosabbak leszünk.

    import random

    asd = open("kiserlet.txt", "r")
    kiserlet = asd.read()

    print "On szerint fej lesz vagy iras?"

    tipp=input("Irjon be 0-t ha fej, vagy egyest ha iras: ")

    gepi=random.randrange(0, 2)

    if int(tipp)==gepi:
    print "Eltalalta"
    else:
    print "Sajnos tevedett"

    #3-ik feladat

    print "a feleadatbeli kiserlet ", len(kiserlet), "darab mintabol all."

    #4-ik feladat

    fejekszama = 0

    for i in kiserlet:
    if i == "F":
    fejekszama = fejekszama + 1

    fejekszama = float(fejekszama)

    print "a fejek relativ gyakorisaga: ", (fejekszama/len(kiserlet))*100, "%."

    szamlalo = 0
    ketfej= 0

    while szamlalo < len(kiserlet):
    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
    ketfej = ketfej +1
    szamlalo = szamlalo + 1
    else:
    szamlalo = szamlalo + 1

    print ketfej

  • EQMontoya
    veterán

    Sziasztok!

    Érettségi feladatokat oldok, a konkrét esetben 2015 októberit.

    A feladat lényege: van egy txt fájl, amiben érme feldobások eredményei vannak (F a fej, I az írás). Minden eredmény új sorban van.

    Meg szeretném számolni, hogy hányszor dobtak kétszer fejet egymás után. A fájl kiserlet nevű objektumba való beolvasása után erre az alábbi kódot találtam ki, de nem igazán működik:

    szamlalo = 0
    ketfej= 0

    while szamlalo < len(kiserlet):
    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
    ketfej = ketfej +1
    szamlalo = szamlalo + 1
    else:
    szamlalo = szamlalo + 1

    print ketfej

    Van baj, de rakd be az egész kódot, úgy okosabbak leszünk.

  • szaszayanou
    aktív tag

    Sziasztok!

    Érettségi feladatokat oldok, a konkrét esetben 2015 októberit.

    A feladat lényege: van egy txt fájl, amiben érme feldobások eredményei vannak (F a fej, I az írás). Minden eredmény új sorban van.

    Meg szeretném számolni, hogy hányszor dobtak kétszer fejet egymás után. A fájl kiserlet nevű objektumba való beolvasása után erre az alábbi kódot találtam ki, de nem igazán működik:

    szamlalo = 0
    ketfej= 0

    while szamlalo < len(kiserlet):
    if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
    ketfej = ketfej +1
    szamlalo = szamlalo + 1
    else:
    szamlalo = szamlalo + 1

    print ketfej

  • DrojDtroll
    veterán

    Az, hogy a modulod hivatkozik egy másikra, ami még nincs meg neked.
    Olvasd el a hibaüzit. :)

    de megvan

    épp ez a gond

    de már megoldódott, az eggyel korábbi verzió tökéletesen működik

    a modul a hibás

  • EQMontoya
    veterán

    Van egy python könyvtár, amit nem sikerül telepítenem. Letöltöm a könyvtárat.

    tar -zxvf -el kicsomagolom
    tar -zxvf pynaoqi-python-2.7-naoqi-x.x-linux32.tar.gz

    Felveszem a kicsomagolási könyvtárat a pythonpath-be.

    export PYTHONPATH=${PYTHONPATH}:/path/to/python-sdk

    http://doc.aldebaran.com/2-1/dev/python/install_guide.html
    Ez alapján nincs más dolgom, mégis hibaüzenetet kapok.

    Python 2.7.10 (default, Oct 14 2015, 16:09:02)
    [GCC 5.2.1 20151010] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import naoqi
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/naoqi.py", line 7, in <module>
    import qi
    File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/qi/__init__.py", line 72, in <module>
    from _qi import Application as _Application
    ImportError: libqipython.so: cannot open shared object file: No such file or directory

    mi lehet a gond?

    Az, hogy a modulod hivatkozik egy másikra, ami még nincs meg neked.
    Olvasd el a hibaüzit. :)

  • DrojDtroll
    veterán

    Van egy python könyvtár, amit nem sikerül telepítenem. Letöltöm a könyvtárat.

    tar -zxvf -el kicsomagolom
    tar -zxvf pynaoqi-python-2.7-naoqi-x.x-linux32.tar.gz

    Felveszem a kicsomagolási könyvtárat a pythonpath-be.

    export PYTHONPATH=${PYTHONPATH}:/path/to/python-sdk

    http://doc.aldebaran.com/2-1/dev/python/install_guide.html
    Ez alapján nincs más dolgom, mégis hibaüzenetet kapok.

    Python 2.7.10 (default, Oct 14 2015, 16:09:02)
    [GCC 5.2.1 20151010] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import naoqi
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/naoqi.py", line 7, in <module>
    import qi
    File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/qi/__init__.py", line 72, in <module>
    from _qi import Application as _Application
    ImportError: libqipython.so: cannot open shared object file: No such file or directory

    mi lehet a gond?

  • sonar
    addikt

    Sajnos annál a magyar könyvnél nem fogsz találni jobbat.

    Szerinted. Szerintem pedig találhat, például Mark Summerfieldtől Python 3 programozást. Jól struktúrált, érthető, és főleg nem elavult a Tanuljunk meg programozni Python nyelvenhez képest.

    Valszeg nem én fogok ebben a témában igazságot tenni, de arra többen is irták, hogy nem a leginkább kezdőnek való, bármennyire is részletes...

  • Szenty
    tag

    Sajnos annál a magyar könyvnél nem fogsz találni jobbat.
    A nyelvezete is teljesen rendben van. Egyszerűen bizonyos fogalmakat nem lehet máshogy magyarázni.

    Sajnos annál a magyar könyvnél nem fogsz találni jobbat.

    Szerinted. Szerintem pedig találhat, például Mark Summerfieldtől Python 3 programozást. Jól struktúrált, érthető, és főleg nem elavult a Tanuljunk meg programozni Python nyelvenhez képest.

  • cousin333
    addikt

    Nekem c++ és shell script után már elég könnyen ment a python a hivatalos tutorial alapján is.

    De itt most arról volt szó, hogy egy kezdőnek mit ajánlanál. C++ után, jóhogy ment... :)

  • EQMontoya
    veterán

    Pedig én is azzal kezdtem, igaz, nekem már nem volt újdonság a for ciklus fogalma (bár a Python kicsit máshogy használja).

    Vannak "emelkedettebb" részek, de át is lehet őket ugrani. Annyit biztos ér, mint a sulinetes Free Pascal reklám :D Nagyobb probléma, hogy öreg, mint az országút, de az alapokhoz meg így is elég.

    De ha megy az angol, akkor persze több könyv is ajánlható. Viszont nem vagyok kezdő programozó (bár profi sem), így bevallom elég nehéz beleképzelnem magamat az ő helyzetükbe.

    Nekem c++ és shell script után már elég könnyen ment a python a hivatalos tutorial alapján is.

  • csaszizoltan
    csendes tag

    Pedig én is azzal kezdtem, igaz, nekem már nem volt újdonság a for ciklus fogalma (bár a Python kicsit máshogy használja).

    Vannak "emelkedettebb" részek, de át is lehet őket ugrani. Annyit biztos ér, mint a sulinetes Free Pascal reklám :D Nagyobb probléma, hogy öreg, mint az országút, de az alapokhoz meg így is elég.

    De ha megy az angol, akkor persze több könyv is ajánlható. Viszont nem vagyok kezdő programozó (bár profi sem), így bevallom elég nehéz beleképzelnem magamat az ő helyzetükbe.

    Az igaz, hogy a Udacity-n (angolul) tanultam meg a Pythont valamelyest és ott is el volt sütve pár szakkifejezés, de azért a könyvben nem kéne minden 2. mondatban elsütni egy-egy húzósabb szót, szerintem alkalmatlan ez a könyv az abszolút kezdőknek, tulajdonképpen pár oldalba néztem bele, és megijedtem, hogy ezt (a könyvet) kéne ajánlani beginnereknek, amit nem is tudnék jó szívvel megtenni, pedig a nyelv alkalmassá teszi önmagát ilyesmire például interpreter, az indentálással struktúrálás, kevés nyelvi elem stb.

  • cousin333
    addikt

    A magyar könyvre én is rábukkantam, de nem normális a szerzője. Nem tudom, hogy miért kell akadémikus szóhasználattal bevezetni az olvasót az alapokba, aki nem tud programozni, annak én egyáltalán nem ajánlanám ezt a könyvet, ebből nem lehet az alapokat nyugodtan megtanulni.

    Pedig én is azzal kezdtem, igaz, nekem már nem volt újdonság a for ciklus fogalma (bár a Python kicsit máshogy használja).

    Vannak "emelkedettebb" részek, de át is lehet őket ugrani. Annyit biztos ér, mint a sulinetes Free Pascal reklám :D Nagyobb probléma, hogy öreg, mint az országút, de az alapokhoz meg így is elég.

    De ha megy az angol, akkor persze több könyv is ajánlható. Viszont nem vagyok kezdő programozó (bár profi sem), így bevallom elég nehéz beleképzelnem magamat az ő helyzetükbe.

  • sonar
    addikt

    A magyar könyvre én is rábukkantam, de nem normális a szerzője. Nem tudom, hogy miért kell akadémikus szóhasználattal bevezetni az olvasót az alapokba, aki nem tud programozni, annak én egyáltalán nem ajánlanám ezt a könyvet, ebből nem lehet az alapokat nyugodtan megtanulni.

    Sajnos annál a magyar könyvnél nem fogsz találni jobbat.
    A nyelvezete is teljesen rendben van. Egyszerűen bizonyos fogalmakat nem lehet máshogy magyarázni.

  • csaszizoltan
    csendes tag

    Egy magyar könyv: [link]

    Ha meg megy az angol, akkor jó néhány könyv közül lehet válogatni. Pl. Think Python, Dive Into Python vagy mondjuk a Learning Python, ami elég alapos.

    A tipikus programozási struktúrák alapvető megértéséhez ott a Wikipedia: pl. ciklusok.

    A magyar könyvre én is rábukkantam, de nem normális a szerzője. Nem tudom, hogy miért kell akadémikus szóhasználattal bevezetni az olvasót az alapokba, aki nem tud programozni, annak én egyáltalán nem ajánlanám ezt a könyvet, ebből nem lehet az alapokat nyugodtan megtanulni.

  • cousin333
    addikt

    Sziasztok!
    Teljesen kezdő vagyok, talán a legalapvetőbb dolgokat tudom. Tényleg csak a legalapvetőbbeket ( else, if ezeket már nem értem ) Valaki nem tudná leírni az alapokat??

    Egy magyar könyv: [link]

    Ha meg megy az angol, akkor jó néhány könyv közül lehet válogatni. Pl. Think Python, Dive Into Python vagy mondjuk a Learning Python, ami elég alapos.

    A tipikus programozási struktúrák alapvető megértéséhez ott a Wikipedia: pl. ciklusok.

  • csaszizoltan
    csendes tag

    Sziasztok!
    Teljesen kezdő vagyok, talán a legalapvetőbb dolgokat tudom. Tényleg csak a legalapvetőbbeket ( else, if ezeket már nem értem ) Valaki nem tudná leírni az alapokat??

  • mark!
    őstag

    a vegere
    print(c)

    "c" -> egy c karakter
    c -> valtozo

    Ohh, most megmentetted egy ártalmatlan billentyűzet életét, köszi! :DD

  • Gyuri16
    senior tag

    Most egy ilyen problémával állok szemben:
    >>> a='The little fish'
    >>> b='become a big fish'
    >>> c=a+b
    >>> print ("c")
    c

    Vagy 10x próbáltam, egyszer sem rakta össze a 2 mondatot. Mit rontok el? :O Illetve próbáltam a Fibonacci-sorozatot, ott meg nem a számokat írta, hanem egy rakat b meg a betűt.

    a vegere
    print(c)

    "c" -> egy c karakter
    c -> valtozo

  • mark!
    őstag

    Szia!

    Ha van androidos telefonkészüléked, és nagyjából megy az angol, akkor ajánlom a Learn Python (SoloLearn a fejlesztő) nevű alkalmazást. Játszva tanít, és az alapokon végigmegy. Kezdésnek jó szerintem. Persze komolyabb dolgokhoz kevés.

    Esetleg ezt az online könyvet: [link]

    Most egy ilyen problémával állok szemben:
    >>> a='The little fish'
    >>> b='become a big fish'
    >>> c=a+b
    >>> print ("c")
    c

    Vagy 10x próbáltam, egyszer sem rakta össze a 2 mondatot. Mit rontok el? :O Illetve próbáltam a Fibonacci-sorozatot, ott meg nem a számokat írta, hanem egy rakat b meg a betűt.

  • evilskati
    aktív tag

    Sziasztok!
    Teljesen kezdő vagyok, talán a legalapvetőbb dolgokat tudom. Tényleg csak a legalapvetőbbeket ( else, if ezeket már nem értem ) Valaki nem tudná leírni az alapokat??

    Szia!

    Ha van androidos telefonkészüléked, és nagyjából megy az angol, akkor ajánlom a Learn Python (SoloLearn a fejlesztő) nevű alkalmazást. Játszva tanít, és az alapokon végigmegy. Kezdésnek jó szerintem. Persze komolyabb dolgokhoz kevés.

    Esetleg ezt az online könyvet: [link]

  • mark!
    őstag

    Sziasztok!
    Teljesen kezdő vagyok, talán a legalapvetőbb dolgokat tudom. Tényleg csak a legalapvetőbbeket ( else, if ezeket már nem értem ) Valaki nem tudná leírni az alapokat??

  • gt7100
    tag

    Teljesen igaz, amit írsz, a Python 2-ben a range egy komplett listát hoz létre és azon iterál végig. Ugyanakkor - bár nem szoktam kihangsúlyozni, de - Python 3 párti vagyok (és minden kezdőnek ezt javasolnám), tehát nekem az az alapértelmezett, hacsak nem írom ki, hogy Python 2. Márpedig a Python3 egyik előnye, hogy elhagyták az i-s és x-es hülyeségeket, és az alap kulcsszó már magát az iterátort jelenti. Tehát van a zip a régi izip, és a range a régi xrange helyett. Tisztább, szárazabb, biztonságosabb érzés. :D

    >>> for i in range(5):
    ... print(i)
    ...
    0
    1
    2
    3
    4
    >>> for i in xrange(5):
    ... print(i)
    ...
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'xrange' is not defined

    ui: Ha valaki a régi megoldásra vágyik, mert sok a RAM-ja, természetesen az is elérhető:

    list(range(10))

    O.K. - én azért ragadtam le a 2-es mellett, mert néhány framework/API csak 2-essel megy.
    (az is igaz, hogy közel két éve nem foglalkoztam vele. :( )

Új hozzászólás Aktív témák

Hirdetés