Új hozzászólás Aktív témák
-
cousin333
addikt
válasz
szucstom
#898
üzenetére
Könyv szempontjából elsősorban az a kérdés, hogy 2-es vagy 3-as verzió, az alverziók kevésbé számítanak. Ez azért is jó, mert pl. a 3.6 vadonat új, könyv aligha van hozzá, de szerencsére a korábbiak is jók: [link]
Értelemszerűen a mindenkori legfrissebb, de inkább referenciának mintsem tanulásra való oldal a hivatalos Python dokumentáció: [link]
-
cousin333
addikt
válasz
szucstom
#896
üzenetére
Használd a Programkód kapcsolót.
Az a problémád, hogy a könyv, amit használsz, a Python 2.7-ről (vagy még régebbiről) szól, te viszont valamelyik 3-as változatot használod. Abban a
printmár függvény, ezért kell a zárójel. Tehát helyesen:a = 150
if a > 100:
print("a meghaladja a szazat") -
szucstom
őstag
Sziasztok!
Most lehet, totál hülyének fogtok nézni, hogy egy totál egyszerű kiíratást nem tudok megcsinálni, de már agybajt kapok, amiért nem sikerül. Adott egy python-os könyv, melyben vannak példák. Ezeket én próbálom megcsinálni, de kb. a második sor után mindig vmi hibát ír ki folyamatosan. (nem a legszebben lesz leírva, de igyekszem)
// a=150
// if(a>100):
// print "a meghaladja a szazat"Na, a print sor után enter, majd jön a hibaüzenet: SyntaxError: Missing parentheses in call to print.
Ez mit takarhat?
-
cousin333
addikt
válasz
cadtamas
#893
üzenetére
A fájlbeli coding sor tudtommal a forrásfájl karakterkódolását definiálja.
Kezdjük azzal a kérdéssel, hogy hogyan írod/olvasod a fájlt? Ha a klasszikus
openfüggvénnyel, akkor annak van egy encoding paramétere, amit célszerű megadni. A lehetséges kódolások listája (bár kicsit régi): [link]. Innen az UTF-8 vagy a cp1250 ajánlott.ui: Mindez a Python 3.x szériára vonatkozik, de remélhetőleg azt használod...
-
cadtamas
tag
Újabb problémával szembesültem.
A fájlkezelésnél/létrehozásnál tartunk és ha létrehozok egy .txt fájlt, akkor az ékezetes karakterek helyére hülye szimbólumokat rak.pl: F�rfi;
És amikor visszaolvastatom a fájl tartalmát, ugyanezt olvassa vissza.Mit lehet tenni, hogy megfelelően kódolja a létrehozott fájlt?
Az első sorom ezzel kezdődik:
# -*-coding:utf-8;-*-
windows-os pycham. -
-
cadtamas
tag
válasz
cousin333
#890
üzenetére
Basszus, igazad van!
Leteszteltem python interpreterben.
Sose gondoltam volna, hogy a listák így működnek.>>> x=[1,2,3]
>>> y=x
>>> x[0]=5
>>> x
[5, 2, 3]
>>> y
[5, 2, 3]
>>>Nagyon köszönöm!!!
Ezt a deque módszert még nem említette a könyv.
Keresek más megoldást. De legalább tudom, hogy mi okozza a problémát.update:
így már működik:
def kocka_mozgato():
global x, y,xt,yt
i = 0
xt,yt=[],[]
while i < n:
xt.append(x[i])
yt.append(y[i])
if i==0:
x[0]=x[0]+iranyx*racs
y[0]=y[0]+iranyy*racs
if i!=0:
x[i]=xt[i-1]
y[i]=yt[i-1]
can1.coords(kockak[i], x[i], y[i], x[i] + racs, y[i] + racs)
i += 1
abl1.after(1500, kocka_mozgato) -
cousin333
addikt
válasz
cadtamas
#889
üzenetére
Hát, lehet, hogy rosszul látom, de az
xt,yt=x,ysor hatására szerintem annyi történik, hogy az xt nem olyan lesz, mint az x, hanem maga lesz az x csak másik elnevezéssel. Magyarul amint módosítod az egyiket, módosul a másik is. Így azifmáshogy elnevezettelseága (a másodikif) az első elemmel másolja felül az összes többit.Nem teljesen világos nekem a program működése, de ha a listában egy elem kimegy, egy másik meg be, de a többi marad, akkor azt másolgatnám, hanem csak az utolsó elemet törölném, az elsőt meg hozzácsapnám. Erre a legmegfelelőbb típus mondjuk nem a list, hanem a deque, mondjuk ez azért elég speciális és tudtommal inkább teljesítmény okokból létezik. A te kígyód meg sosem lesz olyan hosszú, hogy ez problémát jelentsen...

Listával valahogy így tudsz elé beszúrni egy új elemet:
x = uj_x0 + x[:-1] -
cadtamas
tag
Úgy látom a kérdésemet inkább itt kellett volna feltennem.
Szeretnék egy kígyós tkinter programot írni. A Gerard Swinnen könyvből tanulok pythonul. (Ez az első programnyelvem). Még csak a 100. oldal környékén járok, így az ismereteim nem túl mélyrehatóak.

Elakadtam egy egyszerű problémánál és nem jövök rá mit rontok el.
def kocka_mozgato():
global x, y, xt, yt,
i = 0
xt,yt=x,y
while i < n:
if i==0:
x[0]=x[0]+iranyx*racs
y[0]=y[0]+iranyy*racs
if i!=0:
x[i]=xt[i-1]
y[i]=yt[i-1]
can1.coords(kockak[i], x[i], y[i], x[i] + racs, y[i] + racs)
i += 1
abl1.after(1500, kocka_mozgato)ez rajzolná ki a mozgó kígyó testét, szeretném úgy megoldani, hogy eltárolom a kígyó testének x,y koordinátáit egy xt,yt listában, hogy később a kígyó teste innen olvassa ki, hogy mely pizícióra kell mozognia, de valamiért a listák összes eleme felveszi a [0] pozíció értékét.
Lehet, hogy inkább péknek kellett volna mennem. A liszt nem csinál ilyet. -
EQMontoya
veterán
Szerintem csak úgy, hogy ha le tudod valamilyen úton-módon kérdezni, hogy mi van fent a honlapon. Pl. rest api, vagy egy sima http get, aztán
regexxel parse-olsz htmltépítesz belőle egy szép kis DOMot, és kitúrod belőle az adat.Ezt az adatot összeveted a mappád tartalmával, és ha van a mappában olyan, ami már fent van, akkor move. Az egészet meg lehet egy timerre / cron jobra kötni.
-
Fido01
aktív tag
Helló!
Teljesen amatőr vagyok a témában (oly annyira, hogy abban sem vagyok biztos hogy Python kell nekem a gondomhoz)
Szóval adódott egy probléma a munkahelyemen, eddig úgy nézett ki a dolog, hogy 1-1 dokumentum elkészítésekor a fájl belekerült a "küldendő" mappába majd mikor egy honlapon feltöltésre került automatikusan átkerült az "elküldött" mappába így átláthatóbbá téve a feltöltéseket mivel a "küldendő" mappában mindig csak az szerepelt ami még nem lett online közzétéve, ez azonban néhány (rajtam kívülálló) okból megváltozott és most már a "küldendő" mappa tartalma nem törlődik a feltöltést követően.Első körben csak simán írtam erre egy batch scriptet amit minden alkalommal lefuttatok mikor feltöltöttem egy fájlt, ez működik is, egyszerű és rettentő unalmas.
Meg lehet oldani valahogyan ezt a problémát úgy, hogy ez a folyamat automatikusan lefusson minden alkalommal a feltöltést követően?
Kieg.: sem a honlap sem pedig a program amivel a dokumentumok készülnek nem módosíthatóak.
Köszönöm szépen.
-
cousin333
addikt
válasz
EQMontoya
#883
üzenetére
Ha már optimalizálás, tud valaki javasolni egyszerűen használható grafikus könyvtárat, amivel mindenféle interaktív grafikonok készíthetők és könnyen elboldogul több millió adatponttal?
Amiket néztem: matplotlib (jó, de nem túl gyors), Seaborn (kb. ugyanaz), Plot.ly (netes, fizetős is, nem érdekel), Bokeh (ezt még nem ismerem eléggé), Vispy (ez lenne a favoritom, de még mindig félkésznek tűnik). Jó lenne valami, ahol a
data.plot()-nél nem sokkal bonyolultabb szerkezetekkel célt lehet érni. -
EQMontoya
veterán
Tisztában vagyok vele, voltam pár progverseny döntőjében (Ericsson, NNG, stb), és hidd el, sokat tud számítani a megfelelő algoritmus megtalálása után némi bitbaszkurálás, amivel mondjuk 3 óráról leviszed a futási időt félre.

A legutóbbi nagyobb cucc, amit Pythonban csináltam, több gigás logfile-okat parse-ol fel. Nem árt ésszel csinálni.
-
axioma
veterán
válasz
EQMontoya
#881
üzenetére
Nyilvan vannak extrem esetek: anno amig az xrange() helyett range()-t hasznaltam (2.7) a for ciklusnak, es osszejott valami huzosabb kombinacio, na akkor neztem nagyot hogy miert lassu... igen, alapveto dolgokkal tisztaban kell lenni, de egy 2-es konstans szorzo tenyleg nem jellemzo hogy szamit, vagy nagyon max par %-nyi pontot lehet veszteni vele (a tobbi teszteset lefut).
Masreszt azert en algoritmusokrol szolo versenyekrol beszelek, ott a kezdo feladatok utan a naiv algo mint megoldas nem fog ugyse bejonni... valami pluszt kell belevinni. -
Szenty
tag
Javasolt olvasmány: Python Patterns - An Optimization Anecdote
-
#82595328
törölt tag
válasz
#82595328
#876
üzenetére
Közben megoldottam, hátha valakit érdekel.
A probléma az volt, hogy a
listaelem= (nev, datum, cegnev, kezdes, vege, orak, megjegyzes)
változóba bekerült megjegyzés string néha " is tartalmazott azaz így nézett ki:
' "szöveg' és ez meghülyítette a .join-t. Mondjuk még mindig fura, hogy Win7-n ez miért baj Win10-n meg miért nem. Na mindegy, javítottam az importot. Így már működik. -
#82595328
törölt tag
Egy nagyon érdekes (számomra nagyon kellemetlen) problémába futottam bele.
A történet:
Írtam egy kisebb programot, ami egy tabulátorral elválasztott szövegfájlból beolvassa sorokat, kiválaszt belőle elemeket, berakja egy listába, azt pedig kiírja egy másik fájlba. Igazából hobbiból, de munkahelyre. A programot Windows 10 írtam, hibátlanul lefutott. Lefordítottam. A munkahelyemen lefuttattam Windows 7-en. Nem működött, vagyis kimaradtak sorok. Jó. Akkor csináljuk másképp. Átírtam ';'-vel elválasztott .csv-re. Otthon hibátlanul működik Windows 10-n. Munkahelyen megint nem. Megint kimaradnak (azt hiszem) ugyanazok a sorok. Először azt gondoltam, hogy a lefordított .exe fut valami hibára, de ezt így nehéz tesztelni, hogy nincs hibaüzenet, ezért tegnap otthon felraktam a Windows 7-t. A hiba .py fájl futtatásakor is jelentkezett. Következő ötletem az volt, hogy a hibakezelés miatt a listaelem változó nem jön létre. Tévedtem, létrejön. Eddig jutottam tegnap. Az a gond, hogy innentől már csak 2 helyen lehet hiba, és egyik sem a programom hibája.
1. Az append fut hibára
2. A kiírás fut hibára.
Ezt még kiderítem.
A kérdésem az, látott már valaki ilyet? Hogy ugyanaz a program ugyanazt a fájlt beolvasva Windows 10-n eltérő eredményt ad mint Windows 7-n?
Ja és nem kódolási hiba. utf-8-cal is ugyanezt csinálja.foLista = []
with open(name, 'r',encoding="latin-1")as f:
for sor in f:
try:
sor = sor.strip().split(';')
if sor[0] == 'EMPLOYEE:':
neve = sor[4].strip().split(',')
vezeteknev = neve[1]
keresztnev = neve[0]
nev = (vezeteknev+' '+keresztnev)
if sor[0][0] == '2' and len(sor[9]) == 0:
datum = sor[0]
if float(sor[12][-1]) >= 0:
cegnev = sor[0]
kezdes = sor[8]
vege = sor[10]
orak = sor[12]
megjegyzes = sor[13]
listaelem= (nev, datum, cegnev, kezdes, vege, orak, megjegyzes)
foLista.append(listaelem)
except:
continue
lista = list(foLista)
with open('kesz.csv', 'w', encoding="latin-1") as f:
for i in lista:
f.write(';'.join([str(elem) for elem in i]) + '\n') -
Mint emlitettem nem.vagyok nagy programozó, így bocsánat ha nem jól fogalmazok.

Köszönöm a segitséget, remélem igy már menni fog

-
axioma
veterán
Varj, a valtozonak az erteket akarod futtatasi parameterbol feltolteni, nem? A valtozot letrehozod valamilyen neven, nem azt adod kivulrol a programnak...
Keresni is igy kene, nem a valtozo tulajdonsaga ez, hanem a parameterek atvetelenek szintaktikaja kell szerintem neked.
Szerk. sys.argv, de ez mint mashol is tartalmazza a futtatott script neve't. Igy az elso argumentum [nem param a jo terminologia, bocs] az a sys.argv[1]
sonar: kosz, mobilrol lassu voltam... -
Sziasztok,
Nem vagyok egy nagy programozó, de a python tetszik, és egesz jól el boldogulok az alapokkal, viszont most elakadtam. Szeretnék ugy megadni egy változót hogy az futtatás parancsakor kerüljön hozzá. Tehát python akarmi.py alma
És itt az alma lenne a változó amit beviszek a kódba. Ezt hogyan tudnám mecsinálni?
Illetve jol selytem hogy ezt hivják globális változoknak? Ha igen, akkor google-val sem jutottam előrébb a megoldashoz
Előre is köszönöm a segitseget.
-
cousin333
addikt
Félreértés ne essék, a te megoldásod is teljesen jó, sőt, rövid tesztem alapján valamivel gyorsabb is. Csak nekem meg valahogy a list comprehension rögzült, talán azért, mert a Java nem fertőzött meg
.A tuple meg azért az, mert elvégre tuple unpacking-ről van szó
. Egyébként teljesen jó a lista is. -
axioma
veterán
válasz
cousin333
#868
üzenetére
Koszi a kiegeszitest!
Igazabol mikor java-skent elkezdtem pythonban versenyfeladatozni, akkor nem tutorial-oztam, hanem masik versenyzotol szedtem ki az input beolvasast, azt se tudtam akkor, hogy mi az a map... [pl. akkor a map sort modositgattam, h int/float sot volt hogy str-t irtam oda ;-)] persze azota [lassan 2 eve? huhh] ennek, meg az ilyeneknek utananeztem, meg hasznalom a listagyartast for-ral is, de ez az input igy ragadt meg. Lehet, hogy nem a leghatekonyabb... vegulis atszokhatok. De nekem az ilyen 'best practice-ek hianyoznak, mas python kodot ritkan latok a magamen kivul. [Peldaul h miert ugy irtad, h az elso tuple, nem list...]
Amugy meg map-pel rovidebb begepelni ;-)
A xor meg plane jogos, kosz.+1. Nekem ilyen beolvasos progik kellenek, a verseny futtatokornyezet brtolja automatikusan az inputot, de a pycharm-ban nem jottem ra, hogy lehetne a weboldalrol copy-zott inputot betolni debug kozben [rendszeresen a kodba editalom, a minta kicsi szokott lenni]. Probaltam a futtatoablakban beirni, kezzel es enterrel megy, a beillesztesnel viszont 1 sorkent erkezik a kodba, pedig a beillesztesnel jol tordelve latom. Erre nincs esetleg tippje valakinek?
-
cousin333
addikt
Azt hiszem a helyes megoldás ez lenne, ami mellesleg megszünteti a félreértéseket is:
if a%2 == 1 is not winningSit(n/a):Egy másik érdekesség számomra ez a két sor:
n,m=map(int,raw_input().split())
arr=map(int,raw_input().split())Nekem valahogy nem a map jut eszembe megoldásként, sokkal inkább a list comprehension, különösen a második sornál:
n, m = (int(i) for i in raw_input().split())
arr = [int(i) for i in raw_input().split()] -
cousin333
addikt
A zárójeles megjegyzésed (szó szerint) adja meg a választ. A Python támogatja az összehasonlítások összefűzését, például ez teljesen rendben van:
if 3 < a < 10:
print('Közötte van')
else:
print('Nincs közötte')A 2.7-es Pythonban így írnak erről: [link]
Tehát ez azonos azzal, hogy 3 < a és a < 10, valamint az egész sor rögtön hamis lesz, ha a%2 egyenlő nullával.Ezek alapján a kérdéses sorod azt jelenti, hogy a%2 egyenlő 1 és 1 nem egyenlő winningSit(n/a). Ha kiteszed a zárójeleket (ahogy írtad), akkor már azt jelenti, amire te gondoltál.
-
axioma
veterán
válasz
cousin333
#863
üzenetére
Olyan kicsi a kod, hogy akar be is szurhatom. Az inputot garantaljak hogy a leirasnak megfelel. Feladat: [link]
Megoldasom egy pontban logikailag hibas, igy bizonyos tipusu (ritkabb) inputtipusra rossz eredmenyt ad, de azon most lepjunk tul, meg a rossz stilusu berogzodeseken is (ez most nem percre ment de van hogy igen es ahhoz igazodom), csak az if kiertekeleset nezzuk, mert ebben a formaban tovabbi hibas valaszt kaptam, a lenti javitassal meg azok jok lettek:wins=set([])
arr=[]
def winningSit(n):
if n in wins:
return True
for a in arr:
if n%a==0:
if a%2==1 != winningSit(n/a):
wins.add(n)
return True
return False
n,m=map(int,raw_input().split())
arr=map(int,raw_input().split())
wins=set(arr)
print "First" if winningSit(n) else "Second"Szoval ezt szeretnem a tapasztaltabbaktol megkerdezni, hogy me'gis mit nem vettem figyelembe. (Amugy az is eleg javitas, ha zarojelbe teszem az (a%2==1) reszt, legalabbis eredmeny alapjan ugy tunik.)
-
Vesporigo
aktív tag
Sziasztok,
Valakinek van bármi infója róla, hogy hol lehet kapni Koós Antal Python a gépben c. könyvét nyomtatott formában? Csak elektronikusan találtam meg. Továbbá mi a véleményetek erről a könyvről? Még csak most kezdtem a Pythont, jelenleg Gérard Swinnen Tanuljunk meg programozni Python nyelven c. könyvét olvasom (bár többek szerint eléggé elavult, nekem nagyon tetszik eddig), plusz egy Coursera tanfolyamot csinálok. A Koós-féle könyv mennyire lenne segítségemre a tanulásban?
Ha már itt tartunk, angol nyelven szerintetek melyik a legjobb könyv python tanuláshoz?
Bocsi a sok kérdésért, nagyon érdekel!
Előre is köszi!
-
axioma
veterán
Ez melyik side effect? Mar ugy hozzaszoktam (a #@%&#@ szivatos << es >> zarojelezesen tul), hogy nem kell varatlan hatasra szamitanom, de egy versenyfeladatban kulonbseg lett:
if a%2==1 != winningSit(n/a):
wins.add(n)Ugyanis ezzel meg azt csinalja amit akarok, nevezetesen a ket boolean xor-ja eseten belepni az if-be:
isOdd=a%2==1
isWin=winningSit(n/a)
if isOdd!=isWin:
wins.add(n)
Azaegy egesz valtozo, a winningSit meg tutira True vagy False erteket ad vissza minden egeszre (python 2.7.6, azert egy osztasjel). -
hallador
addikt
Sziasztok,
A Programming in Python 3, Mark Summerfield féle könyv mennyire aktuális ma? 2009-ben adták ki. Azt nézegettem, hogy eléggé beszédes.
Köszönöm szépen.
-
EQMontoya
veterán
Ebbe most futottam bele, kellett egy dict, ami a c++-os maphez hasonlóan működik, és megtaláltam az ehhez kellő python függvényt:
setdefault(key[, default])¶
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.Asszem, mind az elnevezésért, mind a leírásért járna a nyers hal a készítőknek.
-
cousin333
addikt
válasz
Orionhilles
#857
üzenetére
Javaslom, hogy járd körül egy kicsit a szeletelés témakörét: [link]
Ebben az esetben így néz ki:
lista[-tól:-ig]
Tehát egy tartományt választ ki, nem egy elemet. A 3. elemhez elég csak egy indexet megadni:
lista[2]Ez valóban a 3. elem lesz, mert a számozás nullától indul. Fentebb listát írtam, de ez ugyanígy működik sztringeken is. Pl.
>>> a = "Szöveg"
>>> a[1:4]
'zöv'Az 1:4 tehát az második elemtől a negyedikig lévőket írja ki. Kicsit fura talán, de az alábbi ábra nekem is segített:

-
-
EQMontoya
veterán
válasz
Orionhilles
#855
üzenetére
int(n) -> integerré konvertálja n-t, ami esélyesen string. Legalábbis gondolom.
Ez elég csúnya megoldás, mert ez dobhat exception-t, és ez esetben nem írsz ki semmit.A [:n] (itt n már ugye int) pedig annyit fog csinálni, hogy 0 és n-1. karakter közötti részét kiírja a stringednek.
-
Sziasztok!
Kellene egy kis segítség:
print str(stringem)[:int(n)]A [:int_stb_] rész mit jelent? leginkább az int jelentésére vagyok kíváncsi!
Válaszokat előre is köszi!
-
cousin333
addikt
válasz
Willy_Billy
#853
üzenetére
Az első esetben nyilván az volt a probléma, hogy a szöveget nem tetted idézőjelek közé. Egyébként a "hozzáadás" mást jelent, használd inkább a hozzárendelés vagy értékadás kifejezéseket.
A második eset arra mutat rá, hogy Python 3.x-es verzióját használod, az általad nézegetett példák viszont a 2.x-hez vannak. Nos a
printaz egyik leggyakoribb és leglátványosabb különbség.
-
Willy_Billy
csendes tag
válasz
Willy_Billy
#852
üzenetére
Ez aztán mégiscsak megoldódott, most a "print"-tel vannak gondjaim:
>>> print 17 + 3
File "<stdin>", line 1
print 17 + 3
^
SyntaxError: Missing parentheses in call to 'print'Közben rájöttem, párszori próbálkozás után, ha zárójelbe írom ami a
printután van, akkor gond nélkül megjeleníti az adatokat.
bocs, a floodért
-
Willy_Billy
csendes tag
Sziasztok! Elkezdtem tanulni a Python nyelvet, és már az elején adódott egy kis gondom:
a változóknál járok, szeretnék értéket hozzáadni, az alábbi példát veszem alapul:
>>>
n = 7
# n-nek a 7-et adjuk értékül
>>>msg = "Mi újság ?"
# A "Mi újság ?" értéket adjuk msg-nek
>>>pi = 3.14159
# pi nevű változóhoz hozzárendeljük az értékétAz n-t hozzáadja, a pi-t is hozzáadja, de az msg-t nem hajlandó,
invalid syntaxüzenet fogad, mégis mit csinálok rosszul?msg = után bármit írok mindvégig syntax error lesz.
SyntaxError: invalid syntax
>>> msg = mi ujsag
File "<stdin>", line 1
msg = mi ujsag -
Mr Dini
addikt
Üdv!
Még csak most ismerkedem a nyelvvel, illetve azon belül a kivy-s GUI gyártással... Azt le kell szögezzem, hogy ez előtt még soha nem foglalkoztam GUI.val, csak CSS és Android fronton...
No, tehát lenne egy ilyen puritán tesztkódom(részlet):
def callback(instance):
print('The button <%s> is being pressed' % instance.text)
button = Button(text='Hello world', font_size=14,pos=(100,100))
button1 = Button(text='Dlrow olleh', font_size=14,pos=(200,100))
button.bind(on_press=callback)Igen, tudom gyönyörű.

Amit szeretnék, az egy űrlap gyártása egy pár checkbox, list és textbox segítségével. Nomeg ezzel a pár gombbal. A nagy kérdés csak az, hogy a gombokat a pos=(100,100) helyett hogyan tudom még rendezgetni?
Illetve tudtok jó tutorialt hozzá?
Ezer köszi!

-
cousin333
addikt
Egy kicsit zsúfoltan kaotikusnak tűnik ez a kód...

Ha megvan a sor, pl:
sor = "C [29 9 8 16 92 79 1 4 0 0 1 4 0 0 14 5 23 24 ]"akkor egyszerűen strip(), ahol "felsorolod" a mindkét oldalról törlendő karaktereket, valahogy így:
sor.strip('ACGT[] ')Az eredmény:
'21 9 10 29 0 0 31 47 52 25 17 19 7 2 22 45 40 15' -
Thusor
őstag
Tudnátok nekem abban segíteni, hogy egy matrix listát hogy tudnék átalakítani mátrixonként egy-egy fileba pythonnal:
Ez egy példa lista a matrixokról:
>MA0001.2 AGL3
A [22 16 25 27 0 0 82 40 56 35 65 25 64 0 33 52 45 21 ]
C [29 9 8 16 92 79 1 4 0 0 1 4 0 0 14 5 23 24 ]
G [34 29 4 13 0 0 2 3 1 0 4 3 28 92 15 7 13 26 ]
T [10 41 58 39 3 16 10 48 38 60 25 63 3 3 33 31 14 24 ]
>MA0002.2 RUNX1
A [ 287 234 123 57 0 87 0 17 10 131 500 ]
C [ 496 485 1072 0 75 127 0 42 400 463 158 ]
G [ 696 467 149 7 1872 70 1987 1848 251 81 289 ]
T [ 521 814 656 1936 53 1716 13 93 1339 1325 1053 ]
>MA0003.3 TFAP2A
A [1706 137 0 0 33 575 3640 1012 0 31 1865 ]
C [1939 968 5309 5309 1646 2682 995 224 31 4726 798 ]
G [ 277 4340 139 11 658 1613 618 5309 5309 582 1295 ]
T [1386 47 0 281 2972 438 56 0 0 21 1350 ]
>MA0004.1 Arnt
A [ 4 19 0 0 0 0 ]
C [16 0 20 0 0 0 ]
G [ 0 1 0 20 0 20 ]
T [ 0 0 0 0 20 0 ]
>MA0005.2 AG
A [21 9 10 29 0 0 31 47 52 25 17 19 7 2 22 45 40 15 ]
C [20 3 0 8 66 65 3 2 0 0 15 8 0 0 17 4 6 10 ]
G [ 6 3 1 8 0 0 6 0 1 1 11 20 57 54 5 5 9 16 ]
T [19 51 55 21 0 1 26 17 13 40 23 19 2 10 22 12 11 25 ]
>MA0006.1 Ahr::Arnt
A [ 3 0 0 0 0 0 ]
C [ 8 0 23 0 0 0 ]
G [ 2 23 0 23 0 24 ]
T [11 1 1 1 24 0 ]A feladat az lenne, hogy ezeket > utáni nevek alapján nevezi a fileokat .pfm kiterjesztéssel, valamint matrixonként. Illetőleg a matrixokból el kellene távolítania a kezdő "A", "C", "G", "T" betűket, valmint mindegyik sorból a "[" "]" jeleket is és úgy írja ki egy fileba.
Eddig jutottal a python scripttel:
import os
import sys
if len(sys.argv) < 2:
print 'Please, specify the input file name'
exit()
url = sys.argv[1]
f = open(url, 'r')
data = f.read()
f.close()
dirName = url.split('\\').pop().split('/').pop().split('.')[0]
if not os.path.exists('./' + dirName): os.makedirs('./' + dirName)
for matrix in data.split('>'):
if not matrix:
continue
name = matrix.splitlines()[0].replace('/', '_') + '.pfm'
f1 = open(dirName + '/' + name, 'w')
f1.write('\n'.join(matrix.splitlines()[1:]).replace('\t', ' '))
f1.close()Hozzá kéne még tenni a betűk és zárójelek eltávolítását. Ezt hogy tudnám megtenni? Előre is köszönöm a segítségeteket.
-
cousin333
addikt
Valóban, a hivatalos dokumentáció inkább referencia, mintsem olvasmányos segédanyag. Akkor jó, ha már az alapok megvannak (de akkor nagyon
).Én 3 könyvet tudok javasolni, ami megfelel a kitételeknek. Ha elolvasod az első néhány fejezetet, már el tudod dönteni, melyik áll a legközelebb a te stílusodhoz.
Ingyenes, angol nyelvű könyvek Python 3-hoz:
- Dive Into Python (pdf)
- Think Python (pdf)
- Learn Python the Hard Way -
Aureal
őstag
Angolul? Ez ugye nem volt komoly kérdés?!

docs.python.org/3/
-
whatnot
őstag
Olvasgatom, hogy kezdésnek ki milyen forrást használt tanulásra.
Python 3hoz angol nyelvű, ingyenesen elérhető forrást tudtok ajánlani? -
Aureal
őstag
válasz
Chesterfield
#827
üzenetére
Elég elavult egy könyv mára szvsz. Én ezt vettem inkább ki egy könyvtárból, de elég egy buzi amerikai szemlélete van. moly.hu/konyvek/mark-summerfield-python-3-programozas (Minden esetre scannelem lefele...)

Normális szájbarágós kezdőknek alapoktól magyarázó programozós könyveket csak a "Tanuljuk meg a .... használatát 24 óra alatt" sorozatban láttam magyarul, de abba sajna nincs Python.
-
Tigerclaw
nagyúr
Nem kifejezetten Python kérdés, de az érdekelne, hogy tudtok-e ingyenesen használható angol-magyar szótár adatbázis-ról? Mármint nem online szótárra gondolok, hanem adatbázisra, bármilyen formátumban.
-
cousin333
addikt
válasz
Tigerclaw
#834
üzenetére
Igen, fel. A megoldás a virtualenv. Az Anaconda csomag - amiből van "mindent bele" és minimalista (aka. Miniconda) minden jelentősebb oprendszerre - elég jól támogatja. Mindegy, hogy a 2.7-et vagy a 3.5-öst teszed fel alapból, könnyen létrehozhatsz egy új környezetet a másik verzióval is. Sőt, még a csomagokat és azok verzióját is megválaszthatod, ha például egy bizonyos feladathoz mindenképpen Numpy 10.1 kell.
Ami az eredeti kérdésedet illeti, nincsen konkrét válaszom, viszont én azt mondanám, hogy 2.7 a legacy projektekhez (pl. kiegészítő modulokhoz), minden máshoz minimum 3.5.
-
Tigerclaw
nagyúr
Egy gépre fel lehet tenni két verzióját a Pythonnak és választani, hogy melyik interpreter futtassa a programot?
Az eredeti kérdésem azt lett volna, mennyire sűrűn kérik azt, hogy 2.x Python alatt működjön a program, ne 3.x alatt?
-
válasz
Chesterfield
#831
üzenetére
Próbáld meg lambdával: [link]
-
Chesterfield
őstag
válasz
Chesterfield
#830
üzenetére
Mintha valami olyasmi lenne a probléma, hogy
gomb1=Button(ablak, text='első', command=karika(0))ebből nem engedné paraméterrel hívni a karika függvényt.Ha csinálok egy külön függvényt:
def a1():
karika(0)
és ezt hívom meg a Buttonból:gomb1=Button(ablak, text='első', command=a1)
így már működik -
Chesterfield
őstag
Meg tudnátok mondani, hogy miért rajzolja meg előre a karikákat, anélkül, hogy bármelyik gombra rányomnék?
#!/usr/bin/env python
# -*- coding: ISO-8859-2 -*-
from Tkinter import *
#karika rajzolása
def karika(n):
cord=coordinates[n]
vaszon.create_oval(cord[0]-r,cord[1]-r,cord[0]+r,cord[1]+r,width=5,outline=color[n])
#karikák koordinátái, színei és a sugár
coordinates=[[50,50],[160,50],[270,50],[105,115],[215,115]]
color=['blue','black','red','yellow','green']
r=47
#ablak
ablak=Tk()
vaszon=Canvas(ablak,height=200, width=340,bg='white')
gomb1=Button(ablak, text='első', command=karika(0))
gomb2=Button(ablak, text='második', command=karika(1))
gomb3=Button(ablak, text='harmadik', command=karika(2))
gomb4=Button(ablak, text='negyedik', command=karika(3))
gomb5=Button(ablak, text='ötödik', command=karika(4))
vaszon.pack(side=LEFT)
gomb1.pack()
gomb2.pack()
gomb3.pack()
gomb4.pack()
gomb5.pack()
ablak.mainloop()
-
justmemory
senior tag
válasz
Chesterfield
#827
üzenetére
Óóó... Én anno ezzel kezdtem el python-t tanulni...
Viszont nem értem rajta végig... 
Hamar inkább a gyakorlati rész érdekelt, és elkezdtem számomra fontos problémákat megoldani python-al, grafikai dolgokat is. Ennek persze lehet, hogy ma picit hátrányát is érzem, mert utólag kellene valahogyan az ismereteket összerendezni...
-
sonar
addikt
válasz
Chesterfield
#827
üzenetére
Le lehet hozzá tölteni a megoldásokat is

-
Chesterfield
őstag
Van itt olyan, aki sikeresen végigküzdötte magát ezen a mek.oszk.hu/08400/08435/08435.pdf-en?
Egész jól haladtam vele, de a 8. Fejezet : Az ablakok és a grafika használata résznél elszabadul a pokol
-
cousin333
addikt
válasz
Tigerclaw
#824
üzenetére
Ugye milyen jó?
Kár, hogy sajnos nem teljesen igaz... 
Szóval kicsit utána olvasgattam és az jött le nekem, hogy egyes típusok azért immutable-k, mert csak (nyilván emögött van elgondolás, az immutable objektum kb. olyan, mint valami konstans).. Nézzünk pár példát (az
idfüggvény az adott objektum memóriabeli kezdőcímét adja vissza):>>> a = [1, 2, 3]
>>> id(a)
2238629696072
>>> id(a[0])
1970405872
>>> id(a[1])
1970405904
>>> id(a[2])
1970405936
>>> type(a)
<class 'list'>
>>> type(a[0])
<class 'int'>
>>> b = (1, 2, 3)
>>> id(b)
2238629604520
>>> id(b[0])
1970405872
>>> id(b[1])
1970405904
>>> id(b[2])
1970405936A fenti esetben létrehoztam egy listát (
a) és egy tuple-t (b), mindkettőt ugyanazzal a három elemmel. A címeket kiolvasva a következő megállítások tehetők:- az
aés abkét külön objektum, egymástól viszonylag messze
- mindkettő elemeiint-ek és az elemek ugyanarra a memóriaterületre mutatnak!
- magyarul csak egy darab 1-es van a memóriában, és mind a lista, mind a tuple ugyanarra hivatkozik
- úgy tűnik azintobjektum tárolására 32 bájtot használ a rendszer>>> b[1] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[1] = 4
>>> id(a)
2238629696072
>>> id(a[0])
1970405872
>>> id(a[1])
1970405968
>>> id(a[2])
1970405936
>>> id(b[1])
1970405904
>>> id(b[2])
1970405936Itt azt látjuk, hogy a
bmásodik elemét nem engedi módosítani (hiszen az egy tuple eleme), aza-ét viszont igen, noha mindkettő ugyanarra az elemre mutatott! Ha a lista módosítása után is megnézzük a címeket, akkor azt látjuk, hogy az 1, 2 és 3 a "helyén" maradt, viszont a rendszer létrehozott egy új, 4 értékűint-et és aza[1]már erre hivatkozik.>>> c = "szoveg"
>>> id(c)
2238629677408
>>> for x in c:
... print(id(x))
...
2238534181640
2238539112832
2238534182144
2238538540512
2238534181696
2238538838680A harmadik példa egy
sztringobjektum, aminek az elemei a memóriában nem egymás mellett, hanem elszórtan helyezkednek el. Ellentétben azzal, amit korábban írtam.Python data model: "The value of some objects can change. Objects whose value can change are said to be mutable; objects whose value is unchangeable once they are created are called immutable."
ui: csak nekem tűnik randomnak a Programkód kapcsoló hatása?
-
sonar
addikt
válasz
Tigerclaw
#823
üzenetére
Általánosságban el lehet mondani, hogy a whitelista jobb.
Tehát ha magad szűröd ki, hogy mi minden mehet be.
Kivétel kezelés sem rossz, de ott nehezebb felkészülni minden féle kivételre.
De program függő, van amikor nincs értelme whitelistázni és nehéz karbantartani.
De amikor túl sok a kivétel és nem átlátható akkor inkább whitelista. -
Tigerclaw
nagyúr
Adatbekérésnél hasznosabb írni egyedi szűrőt, vagy kivételkezeléssel érdemesebb megoldani, ha lehet?
-
cousin333
addikt
válasz
Tigerclaw
#820
üzenetére
Nem vagyok expert, de valahogy a következőképpen tudom elképzelni (ez most vélhetően elég pongyola lesz): meg kell különböztetni magát az objektumot és az arra mutató referenciát:
a = 13
b = aA fenti kód esetében a 13 mint egész szám, eltárolódik a memóriába, és erre az a változó hivatkozik. A második sor egy b nevű referenciát hoz létre, ami azonban szintén ugyanarra a 13 objektumra vonatkozik! Ha most az alábbi kódot írod:
a = "szoveg"akkor tulajdonképpen nem az a-t változtatod meg, hanem létrehozol egy "szoveg" tartalmú sztringet és az a ezen túl arra az objektumra fog mutatni. Ha ugyanezt mondjuk a b-vel is eljátszod (ami most még mindig a 13-ra mutat!):
b = 9.817akkor létrejön a 9,817 lebegőpontos szám és a b arra mutat. A 13-ra már nem mutat semmi, azért a szemétgyűjtő (garbage collector) előbb-utóbb összegyűjti ("megsemmisíti").
Tehát amikor a "sztringből egész számot csinálsz", akkor nem magát a sztringet változatod meg, hanem csak a hivatkozásod (változóneved) már egy más memóriaterületen lévő, másik objektumra fog utalni. Ha egy karaktert írnál át akkor viszont ugyanazt az objektumot módosítanád, ami nem lehet, hiszen immutable. "Módosítani" csak úgy tudod, ha létrehozol egy teljesen új sztringet, ami már tartalmazza a kívánt módosítást (pl. "alma" -> "elme") és azt ugyanúgy nevezed el, ahogy a régit hívták. Ekkor az eredeti sztring még ott van, csak már nem kell senkinek és megy a "kukába". Tehát:
a = "alma"
a = "elme"A két sztring objektum teljesen különbözik, az l és az m sem "közös". Csak mindkettőt ugyanúgy hívják, a Python meg "elfelejti" az elsőt és mindig csak az utolsóra emlékszik.
Azon objektumokat, amiket helyben nem, csak másolással és aközbeni módosítással lehet "módosítani" nevezzük immutable-nak.
Ezzel szemben egy Python lista például nem olyan mint pl. a C tömb, ahol azonos típusú elemek vannak egymás után a memóriában. A lista egy viszonylag bonyolult objektum, ami többek között mutatókat tartalmaz az egyes listaelemekre. Ezért tartalmazhat egy lista tetszőleges típusú elemeket, akár listákat is vegyesen. Ebben az esetben egy listaelem módosítása tulajdonképpen az adott elem referenciájának módosítását jelenti (pl. mostantól a
23helyett a "szöveg" sztringre mutat), viszont minden más elemet érintetlenül hagy. Volt erről egy jó kis Youtube videó valahol.Remélem érthető volt valamelyest és nem is írtam totális hülyeségeket.

-
Tigerclaw
nagyúr
Valaki el tudná magyarázni röviden, hogy mit jelent az, hogy "immutable". Mikor már úgy érzem, hogy értem, kiderül, hogy nem értem.
Készítek pl. egy változót, mondjuk stringként, ha később ebből csinálhatok egész számot is vagy boolean tipust, de azt már nem engedi, hogy mondjuk a string 4.-ik karakterét átírjam. Az egészet átírhatom, de egyedileg 1-1 karaktert nem...mert "immutable" Ezt nem értem, hogy mit jelent.
-
Imy
veterán
válasz
Chesterfield
#818
üzenetére
Én is ezt a könyvet olvasom, amikor van időm, és én is a 2-essel csinálom a példákat. A 3-ban van több változás is, inkább nem szivatom be magamat.
-
cousin333
addikt
válasz
Chesterfield
#815
üzenetére
3-as Pythonnal próbálkozz és inkább a könyvet cseréld le, mert már elég régi.
Amúgy igen, vannak kisebb-nagyobb változások szép számmal: pl
print.
-
Chesterfield
őstag
válasz
Chesterfield
#815
üzenetére
Oké, közben látom, hogy ez már volt téma itt korábban, sry

-
Chesterfield
őstag
Sziasztok!
Én is most kezdem az ismerkedést a pythonnal, ráakadtam egy jegyzetre (mek.oszk.hu/08400/08435/08435.pdf) és telepítettem a gépre a 3.5.2-es verziót.
Viszont ahogy próbálgatom a jegyzet alapján a dolgokat, úgy látom, hogy sok dolog már nem aktuális.Pl ez van a jegyzetben:
>>> 20 / 3 # meglepetés !!!
Alapértelmezésben az osztás egészosztás, ami azt jelenti, hogy ha egész argumentumokat adunk meg,
akkor az eredmény egy (csonkolt) egész lesz, mint a fenti utolsó példában. Ha azt akarjuk, hogy a Python az
argumentumát valós számként értelmezze, akkor ezt úgy tudatjuk vele, hogy a számba egy tizedespont teszünk.
Próbáljuk ki például :
>>> 20.0 / 3 # (hasonlítsuk össze az eredményt az előző példáéval)Na az én verziómban 20/3-ra 6.6666 az eredmény, tehát nem egész osztást végez.
Ahogy próbálgattam 20//3-ra kapok 6-ot eredménynek.Sok ilyen változásra számíthatok?
Érdemes lenne 2-es pythonnal próbálkoznom?
köszi
-
cousin333
addikt
válasz
concret_hp
#811
üzenetére
Tulajdonképpen miben lenne más ezen a téren a "sima" Python kód, mint az iPython szkript? Gondolom utóbbival egy cellában beolvasnád az adatbázist (mivel? Pandas?), a többiben meg mókolnád. Ezt viszont megteheted sima kóddal is: lefuttatod az alap kódot (pl. a beolvasást), majd megkapod a promptot a kísérletezgetéshez.
-
sonar
addikt
válasz
concret_hp
#811
üzenetére
Bár ha adatbázis és sok millió sor akkor csinálnék egy replicát az adatbázisról és lecsökkenteném benne az adatok számát és azzal dolgoznék.
-
sonar
addikt
válasz
concret_hp
#809
üzenetére
vannak szabványos kilépési értékek pl.: sys.exit()
vagy favágóbb módszer: kiirod fileba, adatbázisba etc...
és a "keret" program meg azzal dolgozik.
De miért nem mindjárt mindent pythonban irsz
-
concret_hp
addikt
általánosságban egy sima ipython notebookból hogyan lehet olyat csinálni, hogy egy külső program "elindítsa" ?
tehát van egy ipython notebookom, azt meghívja valami, python kód lefut, és a 'valami' fut tovább a kapott eredménnyel.remélem sikerült érthetően megfogalmazni

-
Dexter
újonc
Köszönöm a gyors választ és a hasznos infót.
-
cousin333
addikt
Szia! Sok sikert hozzá!

Az IDLE az alapértelmezett, ám meglehetősen buta Python-szerkesztő. Egyszerűen nem támogatja ezt a funkciót, csak az állapotsávban írja ki. (Természetesen a fájl nézetről beszélünk, a parancssor alapból nem támogatja). Kiindulásnak jó, de ha sorszámozás és/vagy komolyabb funkciók kellenek, akkor érdemes más editor után nézni. Megfelelő lehet a Spyder, a PyCharm Community Edition esetleg az egyszerűbb Ninja IDE (úgy látom, már nem fejlesztik) de pl. az MS Visual Studio is támogatja. Vagy a parancssor számozásához pl. az IPython. Esetleg egy sima szövegszerkesztő, pl. Notepad++, bár azzal nehezebb automatikusan futtatni az elkészült kódot.
A második kérdésedre a válasz a lebegőpontos számábrázolásban keresendő. Egyes számok nem ábrázolhatóak elég pontosan 32 (64) bites változókkal, ezért kapod a pontatlanság. Megoldás lehet, ha kiíratásnál kerekítesz.
-
Dexter
újonc
Sziasztok!
Most kezdek ismerkedni a Pythonnal.
Windows 7-en a 3.5.2-est használom.
Egyelóre két kérdésem lenne:
- A Python shell (IDLE) miért nem számozza a programsorokat?
- Ha 9-cel szorzok egy nem egész számot, akkor egy alulról közelítő 15 tizedesjegyű eredményt ad,
Pl.: 9 * 5.3 = 47.699999999999996
Mi lehet az oka? -
axioma
veterán
válasz
DrojDtroll
#802
üzenetére
Hat valassz masikat... ahol nem is szamit a nyelv, vagy csak az, hogy ingyenes forditoja legyen.
Mo-on, csapatverseny, ch24.org, igaz ott azert gyakorlott programozok is vannak (de a magyar versenyen ilyen atkepzos iskolak diakjai is indultak, dontoztek). Azt netto pythonnal toltuk vegig, de a kod nem is kell, csak az eredmeny. A google codejam meg face hackercup is egyeni online (a dontorol most ne beszeljunk), ott az eredmeny mellett a kodot is kerik de majdnem barmiben, python teljesen jo. Ill. nemreg futottam bele hackerearth, me'g online kodszerkeszto es szerveroldali forditas/futtatas is van python 2.7.6 es 3.2-re is.
Az a baj, hogy inkabb tul sok ilyen versenyes hely van, nem merem a kapott listat megnyitni, igy is kicsit tul sok idot toltam az utobbi hetekben - honapokban bele.
Új hozzászólás Aktív témák
- Kritikát kapott a Nintendo konzolgyilkos felhasználói szerződése
- Videós, mozgóképes topik
- 5.1, 7.1 és gamer fejhallgatók
- Hobby elektronika
- HiFi műszaki szemmel - sztereó hangrendszerek
- Nintendo Switch
- NFL és amerikai futball topik - Spoiler veszély!
- Épített vízhűtés (nem kompakt) topic
- PlayStation 5
- AMD vs. INTEL vs. NVIDIA
- További aktív témák...
- Keychron K4 vezeték nélküli mechanikus billentyűzet
- 2 DB HYPERX 16GB FURY DDR4 2666MHz CL16 HX426C16FB/16
- Alaplap ASUS ROG STRIX B850-I GAMING WIFI, Fractal Design ház, NOCTUA NH-D9L chromax black hűtő, Cor
- Új, bontatlan / felbontott / Kingston, Corsair, G. Skill, Crucial / DDR5 ramok / gari!
- NVIDIA RTX 3080 Ti Founders Edition
- HIBÁTLAN iPhone 13 mini 128GB Pink -1 ÉV GARANCIA -Kártyafüggetlen, MS3844
- Eladó BONTATLAN Samsung Galaxy S24+ 12/256GB Lila / 12 hó jótállás
- Készpénzes / Utalásos Videokártya és Hardver felvásárlás! Személyesen vagy Postával!
- 5G Lenovo ThinkPad P14s Gen 3 Intel Core i7-1280P Nvidia T550 32GB 512GB 1 év teljeskörű garancia
- Dell Inspiron 3511 /i7-1165G7/MX350/16GB/512GB M.2/WIN11/Újszerű akku/Játékra is! Számlával!
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
remélem nem lesz terhetekre, ha esetlegesen zavarok itt a kérdéseimmel










