Új hozzászólás Aktív témák
-
kovisoft
őstag
válasz
DrojDtroll
#2696
üzenetére
Általánosságban nem tudod ezt megtenni, csak ún. mutable adattípusokra, mint pl. lista, dictionary. A példád pont menni fog, ha b egy objektum, akkor annak egy attributumát tudod módosítani egy függvényben (de nem tudod lecserélni magát az objektumot):
>>> class myclass:
... def __init__(self, initc):
... self.c = initc
...
>>> x = myclass('semmi')
>>> x.c
'semmi'
>>> def a(b):
... b.c='valami'
...
>>> a(x)
>>> x.c
'valami'De ez nem fog minden adattípusra működni. Úgy kell elképzelni, hogy pythonban nem olyan változók vannak, amiknek - ahogy a nevük is jelzi - változhat az értékük (mint pl. C-ben), hanem sokkal inkább címkék. Ugyanis amikor egy változónak új értéket adunk, akkor igazából átcímkézzük azt, hogy egy új értékre mutasson. Legalábbis ez igaz, az ún. immutable típusokra (számok, stringek, stb). Ha egy ilyen változót átadsz egy függvénynek, majd a függvényen belül változtatod az értékét, akkor igazából a paraméter változót címkézed át az új értékre, de ennek nincs hatása az eredeti változóra, amit átadtál a függvénynek.
Nincs olyan nyelvi módosító elem, hogy egy változót érték vagy referencia szerint adhass át. A függvény paraméterek mindig érték szerint vannak átadva, de mutable típusoknál az objektum referencia van érték szerint átadva.
-
kovisoft
őstag
válasz
davidvarga
#2680
üzenetére
Nem írtad, milyen hosszú sorokról lehet szó, de ha abból indulok ki, ami példákat írtál, akkor az első 2 számjegy után 8 db hexadecimális számjegy jön. Ilyenből 16^8 db van, mindegyikhez 2-féle előtag jöhet (02, 03), egy sorba a sortöréssel együtt 11 karakter kerül (Windowson 12), ez összesen 11*2*16^8, ami 94 gigabájt. Biztos ezt akarod?
Ha igen, akkor egy nem túl szép, de egyszerű megoldás egy ciklus a ['02, '03']-ra, ezen belül 8 db egymásba ágyazott ciklus, mind ezen a listán megy végig:
['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'] -
kovisoft
őstag
válasz
alec.cs
#2675
üzenetére
Gondolom, nem ez a leggyorsabb módszer, de valószínűleg az egyik legegyszerűbb:
>>> list1=list1[3:]+list1[:3]
>>> list2=list2[3:]+list2[:3]
>>> list1
['4', '5', '1', '2', '3']
>>> list2
['Négy', 'Öt', 'Egy', 'Kettő', 'Három']
Ha esetleg félreértettem, és előtte meg kell keresni a '4' elem pozícióját, akkor először kell egy ilyesmi:>>> list1.index('4')
3 -
kovisoft
őstag
válasz
kissb528
#2656
üzenetére
Gondolom, a szövegfájlod nem utf-8 kódolású, hanem közép-európai (latin-2 vagy iso-8859-2 vagy micsoda), legalábbis a 0xe1 karakterre panaszkodik, ami talán az á betű kódja. Meg kellene próbálni a fentiek közül valamelyik kódolással beolvasni utf-8 helyett. De kipróbálhatod encoding nélkül is, csak akkor nem fogsz tudni rendesen kezelni ékezetes szavakat. Vagy pedig átkonvertálod a fájlodat utf-8 formátumra.
-
kovisoft
őstag
válasz
kissb528
#2652
üzenetére
Megnyitás után file.read()-del beolvasod a file-t egy string változóba, majd splitlines()-szal soronként felbontod egy listába:
text=file.read()list=text.splitlines()A break pedig nem jó helyen van, mert nem zárja a file-t, ha sikeresen megnyitotta. Természetesen a close előtt kell beolvasni a file-t.
-
kovisoft
őstag
-
kovisoft
őstag
Letöltöttem és kipróbáltam 3-as pythonnal, nálam ez is jól működik. Itt van, hogyan futtattam:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exec(open('jelszó progi.py').read())
Mi a jelszo? vacak
Ugyes vagy!
>>> -
kovisoft
őstag
Ha nem használsz szóközt, akkor esetleg próbáld ki, hogy lecseréled a tab-okat szóközökre. Vagy tegyél be debug kiírásokat a kódba, hogy lásd, merre jár és mi a változók értéke. De ha felrakod valahová a kódodat változatlan formában (pl. zip-elve), akkor szívesen kipróbálom, hogy nálam megy-e.
-
kovisoft
őstag
Kipróbáltam a kódodat és nálam működik, ha a vacak jelszót írom be. De mivel az idemásolt kódodban az első indent 5-ös, a második 7-es, ezért az a tippem, hogy nálad esetleg keverednek szóköz és tab karakterek. Ezeket kellene megnézni és egységesíteni. És az indentálás mértéke lehetőleg mindig ugyanannak a számnak a többszöröse legyen, pl. 4, 8, 12, stb szókoz úgy, hogy egységesen vagy mindig szóközt használsz vagy mindig tab-ot.
-
kovisoft
őstag
Ez most sem sikerült. Válaszd a hozzászólás szerkesztőben a </> kinézetű ikont és abba másold bele a kódodat, ügyelve az indentálásra. Valahogy így kellene kinéznie, de nem biztos, hogy nálad is így van indentálva:
jelszo = 'vacak'
bemenet = input('Mi a jelszo? ')
proba = 0
while bemenet != jelszo:
proba += 1
if proba == 3:
print('Rendszer lezarva! ')
break
print('Rossz jelszo, probald ujra! ')
bemenet = input('Mi a jelszo? ')
if bemenet == jelszo:
print('Ugyes vagy! ') -
kovisoft
őstag
Nem vagyok hálózati guru, de szerintem azért kapsz connection refusedot, mert a 0-s porthoz nem lehet kapcsolódni. A 0-s port arra van fenntartva, hogy dinamikusan lehessen egy szabad portot kiosztani (ami utána nem a 0 lesz). Ha port scannert akarsz csinálni, akkor minden címre végig kellene pásztázni a portokat 1-től pl. 1024-ig. Vagy csak egy adott porthoz kellene kapcsolódni, ami mindegyik hoston nyitva van. Vagy csak szimplán pingelni kellene a címeket.
-
kovisoft
őstag
Nemsokára lejár a Pyhon 2.7 visszaszámláló....
-
kovisoft
őstag
Ha jól értem, amit szeretnél csinálni, akkor azt meg tudod valósítani egy DictCursor-ral, aminek a kulcsai éppen az oszlopnevek. Nézd meg ezt a módszert, ez szerintem "SELECT *"-gal is megy, használhatod közvetlenül az oszlopneveket a result set-ben:
for row in results:
darab = row[holvan] -
kovisoft
őstag
Az a magyarázat, hogy parametrized query-ben csak az adat jellegű dolgokat parametrizálhatod, azok jöhetnek dinamikusan egy paraméterből (amit a , utáni listában adsz meg). Táblanév, oszlopnév, SQL kulcsszó nem jöhet paraméterből, legalábbis ha jól tudom.
Ha oszlopnevet akarsz dinamikusan beletenni a query-be, arra nem tudok más megoldást, mint hogy magát a teljes SQL query stringet összeépíted (ezt csinálja a %-os módszer). Ez persze nem ugyanaz, mint amit szeretnél, de azt szerintem nem is lehet megcsinálni úgy, ahogy szeretnéd. Vagy ha tévedek, akkor majd kijavít valaki.
-
kovisoft
őstag
válasz
Janos46
#2444
üzenetére
Nálam mondjuk a másodikat is végrehajtja, de alapvető szabály, hogy lebegőpontos számokat nem hasonlítunk == operátorral, mert a lebegőpontos számábrázolásnak véges a pontossága, így csak az garantálható, hogy a végeredményül kapott szám egy adott pontosságon belül lesz a matematikailag helyes végeredményhez. Itt egy példa, ami szemlélteti a fentieket, ennek matematikailag 1-et kellene adnia, de a lebegőpontos számábrázolás miatt nem annyi lesz, csak közelítőleg:
>>> x=1.0
>>> x=x/3.0-1.0
>>> x=(x+1.0)*3.0
>>> x
0.9999999999999998
A te példádban szereplő 5+5 esetében nem ez a helyzet (nálam legalábbis), de attól még érdemes lecserélni az == operátort egy valamilyen 10-epszilon és 10+epszilon közötti vizsgálatra. A helyedben én külön-külön kiíratnám a változók és == kifejezések értékét, hogy lásd, min csúszik el a dolog. -
kovisoft
őstag
válasz
cousin333
#2440
üzenetére
Biztos, hogy jó? Ez van nála: a gömbréteg felső sugara q1, a gömbréteg alsó sugara q2.
Először kiszámolja a q1 és q2-höz tartozó szeletek magasságát, ez még jó:m1=r-sqrt(r**2-q1**2) # Felső szelet magasságam2=r-sqrt(r**2-q2**2) # Alsó szelet magassága
Aztán jön a gömbréteg magassága. De az szerintem m2-m1 (a nagyobbik szelet tetejéből levágjuk a kisebbik szeletet). Amit ő számol, abban összeadja a két szelet magasságát és ezt az összeget levonja r-ből:M=r-(m2+m1) # Gömbréteg magassága
Persze lehet, hogy valamit rosszul látok, de Janos46 is azt írja, hogy bizonyos input adatokra nem jól működik. -
kovisoft
őstag
válasz
Janos46
#2437
üzenetére
Ha az első if teljesülése esetén nem akarod, hogy a második if-be bemenjen, akkor if helyett elif-et kellene használni. Ugyanez igaz a harmadik if-re is.
Te magad is azt írod, hogy "pitagorasz segítségével meg lehet határozni a két leeső gömbszelet magasságát". Viszont akkor a gömbréteg magassága (vastagsága) az a nagyobbik és a kisebbik gömbszelet magasságának a különbsége. Ezért írtam, hogy szerintem rossz a képlet, ami alapján az M-et számolod, hiszen összeadod a két gömbszelet magasságát (majd ezt levonod az r-ből) ahelyett, hogy kivonnád őket.
"Ha a gömböt két párhuzamos síkkal metsszük, akkor a gömbtestet két gömbszeletre és egy gömbrétegre vágjuk fel."
Ez alapján az az eset is gömbrétegnek tekintendő, ahol a két metszősík a gömb középpontjának átellenes oldalán van (azaz a gömb aljából és tetejéből vágunk le egy kicsit). Ezért valószínűleg kell egy esetszétválasztást csinálnod arra a két esetre, amikor a két metszősík a gömb középpontjának ugyanazon vagy ellentétes oldalán van. A gömbréteg magasságát például az egyik esetben úgy kapod, ha a levágott gömbszeletek magasságát kivonod egymásból, a másik esetben meg a gömb átmérőjéből kell kivonni a gömbszeletek magasságának összegét.
-
-
kovisoft
őstag
válasz
kezdosql
#2311
üzenetére
Én valahogy rendre már az alapoknál elvesztem a fonalat. Azt írod, hogy "Nem rendeznem kell, hanem nagysag szerint sorbaallitani." De hát a kettő nem ugyanaz? Esetleg valójában arról van szó, hogy nem teljes, hanem részbenrendezés lehetséges csak? Azaz két tetszőleges elemről meg tudod-e mindig egyértelműen mondani, hogy melyikük kerül előrrébb a sorban (teljes rendezés), vagy ezt a sorrendiséget csak bizonyos feltételeknek eleget tevő elempárra lehet megmondani (részbenrendezés)?
-
kovisoft
őstag
0-ról kell indítani, és kell egy másik muvelet változó, amiben legelőször mindenképpen '+' van, majd a legelső művelet végrehajtása után átállítod a muvelet2-re. A feltételben pedig ezt a muvelet változót vizsgálod, tehát kivonásnál is a legelső elemet összeadással kezdi.
-
kovisoft
őstag
válasz
kezdosql
#2298
üzenetére
"A feladat az, hogyan oldod meg, hogy a 15 lista nagysag szerint sorba legyen allitva."
Amikor ezt írtad, ott nem volt szó függetlenségről. El tudod mondani, hogy mit jelent a nagyság szerinti sorbaállítás? Két listáról hogyan döntöd el, hogy melyik van előrébb? Eddig azt hittem, hogy elsődleges az elemszám, de most már kételkedek ebben, főleg ha megnézem a második ábrádat, ahol néha nagyobb elemszámú listák jönnek később. Gondolom, az egész valahogy a függetlenséggel van összefüggésben, de ez az egész így egy nagy barkochba játék, ha nem írod le pontosan a rendezési szempontokat.
De az is lehet, hogy nem is konkrétan rendezni akarod a listáidat, hanem keresed az összes lehetséges sorrendet, ami teljesít valamilyen feltételrendszert (?).
-
kovisoft
őstag
válasz
kovisoft
#2291
üzenetére
Lehet, hogy félreértem a feladatot, de ha esetleg arról van szó, amit ezelőtt írtam (elemszám szerint csökkenő sorrend, azon belül pedig lexikografikus), akkor csinálhatod azt, hogy a sorokat egy-egy stringben tárolod, ahol a string azokból a betűkből áll, amiknél 1-es van a táblázatodban (pl. a 13. sor 'APV', a 14. 'FM', stb). És az egészet beteszed egy string tömbbe, amit egy speciális kulccsal rendezel (ami a string hosszából és magából a stringből áll). Itt egy példa rövidebb és kevesebb stringgel:
>>> x=['ABCDEF', 'BD', 'BCDF', 'AC']
>>> x.sort(key=lambda s: (-len(s), s))
>>> x
['ABCDEF', 'BCDF', 'AC', 'BD' -
kovisoft
őstag
Én is elvesztettem a fonalat ott, hogy mi van fent-lent, ill. balra-jobbra:
"15 lista van (sorok)"
"bal oldalon mindig nagyobb elemszamu lista van, jobb oldalt egy kisebb"
"jobb oldali listanak is lehet olyan eleme, ami a bal oldaliban nem szerepel"
Meg hogy csoportosítani kell-e a listákat vagy rendezni vagy csoportosítani és azon belül rendezni? -
kovisoft
őstag
válasz
Mr Dini
#2231
üzenetére
Esetleg készíthetsz egy saját abc-t, és aszerint rendezed a neveket. Pl.:
> abc='aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz'
> names=['Ádám', 'Attila', 'Éliás', 'Ezékiel']
> sorted(names, key=lambda word: [abc.index(c) for c in word.lower()])
['Attila', 'Ádám', 'Ezékiel', 'Éliás'Persze ez hibát ad, ha olyan karakter van egy szóban, ami nincs az abc-dben.
-
kovisoft
őstag
válasz
V.Stryker
#2206
üzenetére
Alapesetben egy adott elemeket tartalmazó listát létre tudunk hozni úgy, hogy szögletes zárójelek között felsoroljuk az elemeket (pl. [1,3,5,7]). De ezt nem mindig tudjuk vagy akarjuk megtenni. Sokszor adódik olyan helyzet, hogy a listát egy másik listából szeretnénk valamilyen szabály alkalmazásával legyártani. Ilyenkor írnunk kell egy ciklust, ami végigmegy az eredeti listán, és annak minden elemét (amely egy adott feltételt teljesít) behelyettesíti egy kifejezésbe, és az így kapott elemekből jön létre az új lista.
Például kiindulhatunk egy range(n)-ből, és a négyzetszámok listáját előállíthatjuk úgy, hogy mindegyik elemet négyzetre emeljük. Vagy a prímszámok listáját előállíthatjuk úgy, hogy kihagyjuk azokat, amelyeknek van valódi osztója, stb.
A List Comprehension azt teszi lehetővé, hogy a fenti ciklust behelyezzük a szögletes zárójelek közé, mindezt egy nagyon tömör és világos formában. Tehát ahelyett, hogy egyenként felsorolnánk az elemeket, megadjuk azt a szabályt amiből és amivel fel kell tölteni a létrehozandó listát. Ez a szabály áll egy kifejezésből: ezt kell alkalmazni minden szóbajöhető elemre, áll egy for ciklusból valamilyen ciklusváltozóval, ami végigmegy egy listán, és opcionálisan egy if feltételből, amivel szűrni lehet az elemek között:
[expression(i) for i in iterable if condition]ami azt jelenti, hogy menj végig az iterable objektum elemein az i ciklusváltozóval, és ha teljesül az adott i-re a condition feltétel, akkor helyettesítsd be az i-t az expression kifejezésbe, így hozz létre egy új listát.
Példa: 1-re végződő négyzetszámok:
[i*i for i in range(100) if (i*i)%10 == 1] -
kovisoft
őstag
válasz
Janos46
#2173
üzenetére
Elképzelhető, hogy félreértettél: nem azt írtam, hogy azt a while ciklust (vagy annak belsejét) tedd be a programodba, csak szemléltetni akaratam, hogy miért gondoltam úgy, hogy egy abl.update() hívással meg fog jelenni a Tk ablak. De ha jól látom a mostani hibaüzenetedből, az abl.update_idletasks() hívást tetted be. Vagy én értek félre valamit?
-
kovisoft
őstag
válasz
Janos46
#2164
üzenetére
Azért gondoltam, hogy az update() kell, mert magát a mainloop()-ot nem hívhatod, hiszen az teljesen elveszi a kontrolt a későbbi konzolos parancsaidtól. Viszont maga a mainloop() gyakorlatilag a lenti ciklust hajtja végre, amiből az update_idletasks() kezeli az eseményeket, az update() végzi a megjelenítést:
while True:
abl.update_idletasks()
abl.update() -
kovisoft
őstag
válasz
alec.cs
#2148
üzenetére
Ja, hogy magát a python szkriptedet szeretnéd kvázi olvashatatlanná tenni?
Erre jó lehet a base64-es megoldásod, aminek a végén meghívod az eval-t a dekódolás után. Persze ez nem igazi titkosítás, mert aki akarja, az dekódolja a base64 stringedet:myscript="""U29tZSB0ZXh0"""
eval(compile(base64.b64decode(myscript),'<string>','exec')) -
kovisoft
őstag
-
kovisoft
őstag
válasz
sztanozs
#2137
üzenetére
De ez arra vonatkozik, amikor a * után van egy azonosító (pl. *name). Viszont mi van akkor, ha csak egy azonosító nélküli *, van, mint a korábbi os.replace példában? Hogy éred el ezt a tuple-t, ha nem adtál neki nevet? Az azonosító nélküli *-ról az argumentum listában itt tudsz bővebben olvasni.
-
kovisoft
őstag
válasz
grabber
#2119
üzenetére
Mit mutat a sudo crontab -l ? Benne van a parancsod? Milyen file-ba logolna a python szkripted? Csak fájlnév van megadva vagy teljes path? Ha csak fájlnév, akkor nézted-e a root user home könyvtárában? Esetleg próbálj meg valami semleges logoló parancsot tenni a crontab-ba, hogy lásd, működik-e, pl:
*/10 * * * * date >> /tmp/test.log -
kovisoft
őstag
válasz
McSzaby
#2101
üzenetére
Egy kicsit az eddigiek vegyítése: ha mondjuk minden 10 futásból 7-szer kell csináljon valamit, akkor generálsz egy random permutációt a 0-9 számokból. A következő 10 futásban akkor csináljon valamit, ha 7-nél kisebb a permutációban a következő elem. Aztán ha elfogytak a számok, akkor generálsz egy újabb 10-es random permutációt. Ez így nyilván kevésbé random, mint a teljesen random verzió, de randomabb, mint a pusztán gyakoriság számláláson alapuló.
-
kovisoft
őstag
válasz
McSzaby
#2098
üzenetére
Az nem jó, hogy valószínűségi alapon számolod ki, hogy csináljon-e valamit vagy sem? Pl. ha az esetek 70%-ában kell, akkor csak akkor csináljon valamit, ha egy 0-1 közötti random szám kisebb, mint 0.7.
Ha ez nem elég pontos, akkor azt is nyilván kellene tartani, hogy hányszor futott, ebből hányszor csinált valamit, és a randomban vizsgált százalékot módosítani ezzel az aránnyal (pl. ha 70%-ban kellene valamit csináljon, és eddig 50-ből 35 helyett csak 30-szor csinálta, akkor növelni a százalékot).
-
kovisoft
őstag
válasz
Janos46
#2080
üzenetére
Az zavarhatott meg, hogy a print-nek lehet adni több paramétert, ezeket mind ki fogja írni egymástól elválasztva. A write-nak viszont ennél kötöttebb a formátuma, csak egy stringet tud kiírni, tehát amit a print-nél vesszőkkel elválasztva írattál ki, azokból (ahogy a többiek előttem már javasolták) össze kell állítani egy db stringet, és azt átadni a write-nak.
-
kovisoft
őstag
Igen, tökéletesen igazad van, lehet számlálni is, de nem egyetlen számlálót kell akkor sem nyilvántartani, hanem típusonként egyet, mivel az eredeti feladat szerint azt akarta tudni, hogy van-e adott típusú elem a dict-ben (a tuple csak egy példa volt). Tehát a módszereddel kell egy dict a típusokra, és abban nyilvántartani minden típusra az elemek számát. Amúgy Én is EQMontoya elegáns megoldását választanám, hacsak nem kell mindenáron ügyelni a performanciára.
-
kovisoft
őstag
Egyrészt nem hívhatod meg argumentum nélkül, mert a definícióban fixen ott van az op argumentum. Másrészt az argumentum nélküli meghívásnál is kellenének a zárójelek, de az is hiányzik, ezért ez így nem függvényhívás, hanem a függvény objektum lekérése:
> five('')
'5'
> five
<function five at 0x7f3901b8ae18>
> five()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: five() missing 1 required positional argument: 'op' -
kovisoft
őstag
válasz
EQMontoya
#2042
üzenetére
De hát ugye ez is egy ciklus, hiszen végigmegy a filter a kulcsokon.
Ha nagyon fontos, hogy O(1) lépésben meglegyen, akkor típus szerint külön dict-ben célszerű tárolni az elemeket. Ekkor viszont az összes dict-ben egyszerre történő keresés lesz macerásabb, amire lehet írni egy függvényt, ami típus szerint a megfelelő dict-ből olvas. Vagy lehet használni az unpacking operatort (**) a dict-ek összefűzésére, pl:
> dtuple={(1,2,3):1, (4,5,6):2}
> dint={7:3, 8:4}
> {**dtuple, **dint}
{(1, 2, 3): 1, (4, 5, 6): 2, 7: 3, 8: 4} -
kovisoft
őstag
EQMontoya megoldása talán a legegyszerűbb, legelegánsabb és leggyorsabb, viszont nem tartja meg az eredeti elemek sorrendjét. Nem tudom, hogy ez szempont volt-e, mindenesetre ha igen, és list comprehensiont akarsz használni, akkor itt egy olyan verzió, ami megtartja az elemek sorrendjét:
newArr = []
[newArr.append(i) for i in arr if i not in newArr]
print(newArr) -
kovisoft
őstag
Másik megjegyzésem a kliensre vonatkozik: a kliens egy cikluson belül olvassa a szervertől jövő választ, ill. küldi az új üzenetet. Viszont ha a szerver valamiért sokáig nem válaszol, akkor a recv blokkol, és ezért addig új üzenetet sem fog tudni küldeni. Ez nem feltétlen baj, hogy nincsenek egymásra eresztve az üzenetek, de innen hiányzik nekem minimum valami hibakezelés. Pl. mi történjen socket.error esetén? Lépjen ki a kliens? Vagy próbáljon nyitni egy új kapcsolatot a szerver felé? Ki kell-e timeout-olni, ha valamiért nem érkezik meg a válasz egy üzenetre? Heartbeat küldést most nem látok, de ha lenne, akkor gondolom fontos lenne, hogy egy beragadt üzenet ne blokkolja a heartbeat-et.
-
kovisoft
őstag
Nekem a thread kezelés nem teljesen kerek. Ha jól látom, minden egyes kliens csatlakozásánál létrejön egy szerver thread, ami végtelen ciklusban fut, és akkor sem lép ki, amikor a kliens lezárta a kapcsolatot (minden exception le van nyelve a ciklusban). Tehát ha sokszor csatlakoznak a kliensek, akkor ezek a thread-ek mind megmaradnak. Vagy rosszul látom?
-
kovisoft
őstag
Kár ezen a kígyós témán ennyit pörögni, a hivatalos python logó is két kígyót ábrázol ("two snakes" logo).
-
kovisoft
őstag
válasz
Siriusb
#1962
üzenetére
Hiányzik az 'l' a linked végéről, helyesen: https://www.jetbrains.com/help/pycharm/quick-start-guide.html
-
kovisoft
őstag
válasz
Siriusb
#1919
üzenetére
Használhatsz regex-et is (mondjuk szebb nem lesz tőle):
import re
if re.search(r"\babc\b", "bla bbla ba ABC bla", re.IGNORECASE):A \b akkor kell, ha teljes szóra akarsz keresni ("word boundaries"), ha pedig kihagyod az utolsó IGNORECASE paramétert, akkor számítani fog a kis-nagybetű.
-
kovisoft
őstag
válasz
AeSDé Team
#1915
üzenetére
Az nem működik, hogy az App importját áthelyezed későbbre, csak amikor már ténylegesen szükség van rá? Erre gondolok:
class Controller:
def __init__(self):
from app import App
self.app = App(self) -
kovisoft
őstag
válasz
s1999xx
#1913
üzenetére
Ennyi erővel a print sem jó példa, mert python 3-ban a python 2-es print sem létezik. Arról volt eredetileg szó, hogy adva van egy python 2-es tankönyv, és milyen különbségek lehetnek a python 3-ra átállásnál. Aki tudja, hogy milyen különbségek vannak, annak nem okoz problémát, hogy megtalálja a 3-as megfelelőjét egy 2-es funkciónak. Aki nem nem tudja, az belefuthat majd a print, /, range, execfile, stb különbségekbe.
-
kovisoft
őstag
válasz
s1999xx
#1911
üzenetére
Mármint mire nem jó példa? Aki a python 2-es range()-hez van szokva, vagy most ismerkedik a nyelvvel egy python 2-es könyv alapján, annak egy python 3 REPL-ben nem minden fog úgy működni, ahogy gondolná. Pont úgy, mint mondjuk ha python 2-es osztást vagy printelést akar csinálni python 3-ban.
-
kovisoft
őstag
Engem régebben a range() készített ki Python 3-ban, ugyanis itt már lazy módon értékelődik ki (csak akkor, amikor ténylegesen felhasználjuk az elemeit). Próbálgattam command promptban mindenféle range-eket, és csak ennyit írt ki:
>>> range(10)
range(0, 10)Ugyanez Python 2-ben:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]Python 3-ban pl. a list-tel lehet kikényszeríteni a kiértékelést::
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -
kovisoft
őstag
válasz
Wmwinters01
#1885
üzenetére
A python nagyon jó első nyelvnek, mert könnyen tanulható. És nem minden nyelven ugyanakkora erőfeszítés programozni tanulni.
-
-
kovisoft
őstag
válasz
Siriusb
#1871
üzenetére
Egy lehetőség, talán működik: A renderer.connect() híváshoz plusz paraméterként tudsz user_param-okat hozzárendelni. Ezt használhatod pl. az oszlop sorszámának megadására, és ezt meg fogja kapni a text_edited() egy plusz user_param paraméterben. A path megmondja, hogy melyik sorban van a módosított cella, a user_param pedig megadja az oszlop számát.
Valami ilyesmire gondolok (tegyük fel, hogy a liststore el van tárolva egy memberváltozóban, de akár ezt is át lehet adni user_param-ként):
def edit_selected(self, widget):
...
column = ...
renderer.connect("edited", self.text_edited, column)
def text_edited(self, widget, path, new_text, user_param):
self.liststore[path][user_param] = new_text -
kovisoft
őstag
válasz
s1999xx
#1869
üzenetére
Nem azt mondom, hogy eval-t kell használni unit teszthez, csak annyit, hogy láttam már olyat, ahol használják. Pl. ha nem elég az, amit a standard assert biztosít, ezért egy saját assert változatot akar csinálni az ember, akkor annak a belsejében a saját assertnek átadott kifejezések kiértékeléséhez kellhet az eval. Ami hirtelen eszembe jut: ha olyan függvényeket tesztelek, amik maguk is AssertionError-t dobnak, és meg akarom különböztetni ezt a unit teszt AssertionError-jától.
-
-
kovisoft
őstag
-
kovisoft
őstag
válasz
pigster
#1819
üzenetére
Igen, az x objektum stringgé konvertálásakor (pl. str(x), print("%s" % x), stb) az __str__ metódus hívódik meg, ezt kell felülírnod, ha saját olvasható formázást akarsz. Ha az __str__ nincs definiálva, akkor a __repr__ hívódik meg. Ha ez sincs definiálva, akkor is van egy alapértelmezett reprezentáció, amit már te is láttál ebben a példádban:
<kartya.Kartya object at 0x000002AE6652D860>
Új hozzászólás Aktív témák
- Mika 6EU Konvektor helyére szerelhető gázkazán (Sosem használt,Digitális,ventillátoros,zárt égéstér)
- Samsung Galaxy S26 Ultra 512GB, Kártyafüggetlen, 1 Év Garanciàval
- Eladó dobozos, fóliás THERMALTAKE The Tower 600 fehér ház
- GMR 16GB (2x8GB) DDR3 1600MHZ Memoria!
- Dell Alienware Nvidia Geforce RTX 2080 Super 8GB
- Apple iPhone 15 128GB Black használt megkímélt 100% akku 6 hónap garancia
- Lenovo L13 Core I3-10110U / 4GB DDR4 / LAPTOP 1
- Apple iPhone 14 128GB,Újszerű,Adatkabel,12 hónap garanciával
- Apple iPhone 15 Pro Max 256GB fekete titán használt, karcmentes 90% akku (344 ciklus) 6 hónap
- 146 - 147 - 167 - 168 - 169 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4090
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
