Új hozzászólás Aktív témák
-
cousin333
addikt
válasz #82595328 #466 üzenetére
Nem kell beletenni, működik úgy is, ahogy mondod. De ha változóba rakod, akkor az elveszik, amint kilépsz a függvényből. Kivéve, ha globális változóba teszed, de az meg nem túl elegáns (kivéve talán a mikrokontrollereket). Biztos van itt nálam ideológiailag képzettebb, aki jobban elmagyarázza.
Szóval használnod nem kell, de pont azért találták ki, hogy az értéket visszaadja. Innentől kezdve nincs sok ok, hogy ne használd.
"We spared no expense"
-
sztanozs
veterán
válasz #82595328 #468 üzenetére
mit szeretnél itt a returnnal csinálni?
ha csak a változónevet írod, akkor visszaadja az értékét...
>>> x=1
>>> y=2
>>> x+y
3
>>> print(x+y)
3[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
cousin333
addikt
válasz #82595328 #468 üzenetére
A return - mint a neve is mutatja - egy függvényhívásból tér vissza egy értékkel. Ahhoz, hogy visszatérhess, előbb értelemszerűen "el kell menni", tehát egy függvényt kell hívni. Abban lehet a return. Az első példádban egy függvényt hoztál létre a def utasítással (vagy mi ennek a szabatos neve) ami visszatér a beírt számmal. Ha meghívod, pontosan ez történik.
A többi példádban nincs függvény, csak egyedi utasítások. Egyszerűen nincs miből visszatérni, így a return értelmetlenné válik és hibát dob.
A return tehát a függvény kimeneti értékével tér vissza, nem pedig egy változó értékével, mint az utolsó példádban. Az az alábbi módon lenne helyes, mert a print függvény maga is visszatér egy konzolra írt üzenettel, ami itt maga az x:
>>> x=1
>>> print (x)
1Mivel ez a konzol, még a print sem kell, ez is működik:
>>> x=1
>>> x
1[ Szerkesztve ]
"We spared no expense"
-
sztanozs
veterán
válasz #82595328 #472 üzenetére
Szerintem olvasgass egy kicsit programozás / programtervezés alapokról, ha a return utasítást, vagy a függvények működését (sem) érted.
Nem fogsz tudni új elkezdeni értelmesen prograomozni, úgy, hogy nem is érted, hogy egy program hogy működik, milyen vezérlési szerkezetek vannak és mire valók az alapvező vezérlési utasítások, vagy pl. mi a különbség egy változó és egy konstans között.
Ahogy kérdeztem, azt meg tudod mondani, hogy egyáltalán mire szeretnéd használni a return utasítást? Biztos vagyok benne, hogy nem azt csinálja, amit te elképzelsz hogy csinálnia kellene.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz #82595328 #474 üzenetére
Ok, a lényeg az az, hogy ha nem interpreter módban dolgozol (futó program), akkor mindig egy függvényben vagy. EZeket úgy kell elképzelni, mint egy hagyma, ahogy mész a héjától befelé. ha meghívsz egy függvényt, akkor egy réteggel beljebb mész, return esetén meg eggyel kintebb. Ha a legkülső függvényben return-t adsz ki, akkor kilép a program.
Ha a függvény ad vissza értéket, akkor ezt a returnban tudod megtenni. Ezt az értéket természetesen célszerű felhasználni, pl kiiratni, vagy egy másik változónak átadni.>>> def osszead(a, b):
... return a+b;
>>> c = osszead(1,2)
>>> print(c)
3[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sonar
addikt
válasz #82595328 #478 üzenetére
Nem törvényszerű, hogy új sor legyen. Nyugodtan irhatod utána is csak akkor ugye egy sor lehet, Csak a kódot teszi áttekinthetőbbé. Egész pontosan több "sor" is lehet de akkor ; -vel kell elválasztani őket.
Tehát
if n == 1: parancs1 ; parancs2
vmi ilyesmi
if n==1: x=x*x; print xA tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
-
cousin333
addikt
válasz #82595328 #505 üzenetére
A fenti példádhoz miért van szükséged for ciklusra? Amúgy a dátumhoz és azok kezeléséhez jó a datetime modul. Példa a használatára:
>>> import datetime as dt
>>> x = dt.date(2015, 12, 3)
>>> x
datetime.date(2015, 12, 3)
>>> y = dt.date(2016, 1, 12)
>>> y
datetime.date(2016, 1, 12)
>>> z = y-x
>>> z
datetime.timedelta(40)
>>> z.days
40
>>> type(z.days)
<class 'int'>"We spared no expense"
-
cousin333
addikt
válasz #82595328 #508 üzenetére
Használd a hozzászólás-szerkesztőben a Programkód gombot, akkor nem rontja el a formázást (pl. behúzást) a fórummotor.
Igazából nem véletlenül gyanakodtam a for ciklus kapcsán, mert jelen esetben a használata teljesen felesleges, sőt kontraproduktív (lassú). Javasolnám a célra a szorzás műveletet.
import datetime as dt
x = dt.date(2015,12,15)
y= dt.date(2016,2,8)
z = y-x
print(100 * z.days)Vagy még szebben:
print("{} forintot kerestem összesen".format(100 * z.days))
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
válasz #82595328 #563 üzenetére
Egyáltalán mivel olvasod be? Kézzel, soronként? A csv modullal vagy valami mással? (melyik Python?)
Én a csv fájlokhoz (is) a pandas nevű modult használom. Jelen esetben talán kicsit túlzás, de amúgy sokrétűen használható. Van neki egy read_csv() metódusa, amiben sok egyéb mellett a kódolást is meg lehet adni.
A jelek szerint a LibreOffice mégiscsak kelet-európai kódolással ment (ahogy tipikusan az Excel is).
[ Szerkesztve ]
"We spared no expense"
-
csaszizoltan
csendes tag
válasz #82595328 #568 üzenetére
decode() vagy encode(), nem szeretem az empírikus programozást, de nekem ez már olyan rafinált probléma, amit nem szívesen értek meg, ha mégis, akkor a Windows console ablak nem UTF-8-ban jelenít meg és ezért azt a decode-dal UTF-8-ból "vissza" kell konvertálni, kódolni. Ha tudod mi a base64-es kódolás, akkor
itt egy jó példa:szóval ez talán jó lesz :
sor=sor.decode('UTF-8').strip().split(',')
[ Szerkesztve ]
- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.
-
cousin333
addikt
válasz #82595328 #629 üzenetére
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á.
[ Szerkesztve ]
"We spared no expense"
-
justmemory
senior tag
válasz #82595328 #634 üzenetére
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.
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
cousin333
addikt
válasz #82595328 #634 üzenetére
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,56Ehhez 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+ bytesLá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 56A 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ú.
[ Szerkesztve ]
"We spared no expense"
-
#82595328
törölt tag
válasz #82595328 #634 üzenetére
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 -
axioma
veterán
válasz #82595328 #647 üzenetére
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.
[ Szerkesztve ]
-
csaszizoltan
csendes tag
válasz #82595328 #647 üzenetére
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, 1651vagy 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!
[ Szerkesztve ]
- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.
-
cousin333
addikt
válasz #82595328 #654 üzenetére
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):[ Szerkesztve ]
"We spared no expense"
-
#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.[ Szerkesztve ]
-
cousin333
addikt
válasz #82595328 #1250 üzenetére
Most ez lesz belőle, ha lefuttatod:
Traceback (most recent call last):
File "C:\Users\cousi\.spyder-py3\temp.py", line 25, in <module>
print ('Egyik = %s' % egyke.egyik)
AttributeError: 'Ketto' object has no attribute 'egyik'Több probléma is van itt. Az egyik probléma - ami a futtatáskor is látszik -, hogy az egyik nem kap értéket. A másik, hogy a szorzat függvény, ahogy megírtad, két paramétert vár, de nem kapja meg őket (utolsó kódsor). Igaz, nincs is értelmük, mert nem használnád egyiket sem (a self.akármi az mindenhonnan látható, hiszen már átadtad a self-el). A harmadik, hogy csak a Ketto inicializáló függvénye fut le, bár ez így nem feltétlenül hiba, és az egyes probléma megszüntetésével orvosolható.
Két lehetőség közül az első az 1-es és 2-es problémát javítja:
class Egy():
def __init__(self, egyik=1, masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self, egyik, masik):
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self, egyik, masik):
self.egyik = egyik
self.masik = masik
def szorzat(self):
return self.egyik * self.masik
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(b, a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())A második pedig - némi módosítással - a 2-es és 3-as problémákat orvosolja, amivel az 1-es lesz idejétmúlt:
class Egy():
def __init__(self, egyik=1, masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self, egyik, masik):
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self, egyik, masik):
super().__init__(egyik, masik)
def szorzat(self):
return self.egyik * self.masik
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(b, a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())A második megoldás inkriminált sorát így is írhatod, hogy legyen értelme is az örökléses példádnak. Ekkor az egyik az mindenképpen 1 lesz.
super().__init__(masik=masik)
ui: Nem tiszta, hogy tulajdonképpen mit akartál felülírni mivel...
Tipp: a függvényparaméterek felsorolásánál használj szóközöket, úgy áttekinthetőbb lesz a kód.
[ Szerkesztve ]
"We spared no expense"
-
cadtamas
tag
válasz #82595328 #1250 üzenetére
Nem adtál át argumentumot a függvénynek, illetve nem inicializáltad az 'egyik' változót.
class Egy():
def __init__(self,egyik=1,masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self,egyik,masik):
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self,egyik,masik):
Egy.__init__(self) #a master osztályból hívjuk meg a szorzat függvényt)
self.egyik=egyik
self.masik = masik
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(b,a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat(a,b))Szerk.: Cousin -ra halgass inább.
[ Szerkesztve ]
-
axioma
veterán
válasz #82595328 #1255 üzenetére
Varj, most a Ketto-nek a peldanyositasaval van gond, mert a kod szerint o egy komplett Egy-et var.
Csereld ki a reklamalt sortegyke = Ketto(Egy(a, b))
-re, es eltunik a hibauzenet.
De!
Ez igy onmagaban nem jo. Mert a Ketto nem fogja a _sajat_egyik, masik
-aban latni az Egy peldanyban meglevo ertekeket. Ahhoz ki kene szedned az orokolt valtozokba... az az ossel inicializalas ertem hogy miert jutott eszedbe, de nagyon nem jo, felvettel egy uj member valtozot, aminek semmi koze a mukodeshez, mert az az orokolt valtozok alapjan megy. -
axioma
veterán
válasz #82595328 #1257 üzenetére
Leszarmazasnal ugy kezdodik, hogy az osnek a member valtozoi automatikusan memberei a leszarmaztatassal kapottnak.
Tehat a te peldadat ugy lenne "szep" (sot: normalis) osztalyokba rendezni, hogy van a Helyiseg, annak csak magassaga van, meg abstract (bocs, ezt pythonban nem hasznaltam, java-bol jottem) terulet es/vagy terfogat fuggvenye. Aztan van a teglalap alapu szoba, ennek van a hossza es szelte (pluszban!), meg a kerek szoba annak csak sugara, de ez mindketto csak ugyanattol az ostol (Helyiseg) szarmazik, nem egymasbol -- mert a vizsgalt tulajdonsagokban nem specializalt valtozata egyik a masiknak.
Akkor jo lenne, ha lenne a Szoba ugy altalaban, magassag es _alapterulet_, es ennek spec. esete a kerek szoba, amit inicializalhatsz a magassag es sugar adatokkal (de kitolti a self.alapterulet-et is, amit az ostol orokolt, es igy mar az osnek a terfogat fuggvenyet le lehet futtatni).Amugy meg mar elozoleg szerepelt a konkret kodbeli kerdesedre az egyszerubb megoldas: a leszarmazottnak az ossel egyezo init-et kene megirnod, vagy mivel pont egyezo, nem kell megirnod, elhagyhatod...
Es bocsanat, hogy nem vagyok didaktikus, a gyerekeim is mondjak hogy hulyen magyarazok... a tanar szakot bar probaltam volna melletenni 20 eve, de vegul elmaradt.
-
cadtamas
tag
válasz #82595328 #1257 üzenetére
Ha jól értem a problémádat:
class Egy():
def __init__(self,egyik=1,masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self): #Nem kell attribútumot átadni
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self,egyik):
Egy.__init__(self) #Ezzel érjük el a szülő osztály konstruktorában a 'masik' nevű változót
self.egyik=egyik
a = int(input('Adj egy számot!'))
# b = int(input('Adj még egy számot')) #Erre nincs szükség mert ez öröklött érték lesz
egyke = Ketto(a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat()) -
cadtamas
tag
válasz #82595328 #1257 üzenetére
És így néz, ki ha új metódust is szeretnél létrehozni és el akarod érni a szülő osztály egyik változóját:
class Egy():
def __init__(self,egyik=1,masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self): #Nem kell attribútumot átadni
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self,egyik):
Egy.__init__(self) #Ezzel érjük el a szülő osztály konstruktorában a 'masik' nevű változót
self.egyik=egyik
def szorzat_2(self): #Azért adtam más nevet, hogy lásd melyik fut le, de működne ugyanazzal a névvel is.
return self.egyik*self.masik #A 'masik' nevű változót a szülő osztály (Egy) konstruktorából hívjuk meg.
a = int(input('Adj egy számot!'))
# b = int(input('Adj még egy számot')) #Erre nincs szükség mert ez öröklött érték lesz
egyke = Ketto(a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat_2())Remélem ez már az, amit szeretnél.
-
cousin333
addikt
válasz #82595328 #1255 üzenetére
Amikor a példádban példányosítod a Ketto osztályt (ez lenne az egyke - lehetnének konzekvensebbek is az elnevezéseid), akkor a következőt kapod: lefut a
Ketto.__init__()
függvény, benne értéket kap az egyik példányváltozó. Lesz egyszorzat()
nevű metódusod, ami összeszorozza az egyik-et a masik-kal. Vagyis csak szorozná, de az masik nem létezik!A hibát azért kapod, mert a
Ketto._init__()
csak két paramétert vár, a self-et (ezt implicit) és az egyik-et, te viszont hármat adtál meg: a self-et, az egyik-et és a masik-at.Amúgy pontosan az történt, amit szerettél volna: a Ketto init-je felülírta az Egy init-jét. A probléma ott van, hogy előbbiben nem hívod meg a szülő osztály (az Egy)
__init__()
metódusát. Írták, hogyEgy.__init__()
, de ez nem szerencsés, mert név szerint hivatkozik a szülőosztályra, helyette többnyire a super() az alkalmazandó. A kódod helyesen:class Egy():
def __init__(self, egyik=1, masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self):
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self, egyik):
super().__init__(egyik=egyik)
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())A példányosításnál csak az a paramétert írtam oda. A Ketto init függvénye meghívja az Egy init függvényét, de csak egy értékkel (egyik), a masik értéke az
Egy.__init__()
-ben megadott alapértelmezett 2-es, emiatt a végén kiírt szorzat 2*a lesz, a b-től függetlenül.[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
válasz #82595328 #1262 üzenetére
"Azt gondoltam, hogy ha példányosítom a származtatott osztályt, akkor abban benne lesz a szülőosztály is."
Jól gondolod, ez a példában is így van. Nem látom az ellentmondást, amit nem értesz. Ha a származtatott osztálynak van egy init függvénye, akkor az felülírja a szülő osztály init-jét, hacsak külön nem hívod meg. Ez nem a szülő osztály példányosítása!
A példádban az egyik és a másik példányváltozók, így nem s léteznek, amíg nem adsz nekik értéket a példányosítással. Az osztályváltozó "tud olyat", hogy példányosítás nélkül is létezik. Csinálhatsz például ilyet:
class Egy():
egyik = 1
masik = 2
def szorzat(self):
return self.egyik * self.masik
class Ketto(Egy):
def __init__(self, egyik):
self.egyik = egyik
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(a)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())Ekkor az egyik és a masik osztályváltozók, és az Egy osztálynak nem is kell
__init__()
, azt a Ketto tartalmazza. Amikor példányosítod a Ketto-t, akkor már lesz egyself.egyik
ésself.masik
nevű változója 1 illetve 2 értékkel. A fenti példában mi kötelezően felülírjuk az egyik értékét, a masik marad 2."We spared no expense"
-
-
axioma
veterán
válasz #82595328 #1410 üzenetére
Hat en itt mar azt nem ertem, hogy a
parancsok_i
hogyan allna elo, ha semmi korlat nincs a darabszamra.
Masreszt egyaltalan, a parancsok is leirhatoak azi
fuggvenyeben?
Egyebkent igen, lepj ki a szamlalos for ciklus gondolkodasbol,for x,y in intervals:
kell neked.[ Szerkesztve ]
-
justmemory
senior tag
válasz #82595328 #1416 üzenetére
Értem...
Egyébként nem kell ámfor
ciklussal hozzáadni, ez csak egy lehetőség volt a részemről, mert nem tudtam hogyan szeretnéd A listához bármilyen formában, bármikor hozzá lehet adni, nem kell a ciklus...--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
axioma
veterán
válasz #82595328 #1415 üzenetére
1. ja hogy a listaval kapsz egy intervallumhoz tartozo argumentumot is, amit megadsz az egy darab parancsnak, igy mar ertem
2. az afor x,y in intervals:
nalam mar egy koztes lepes utani: az intervallum also es felso hatara mint tuple (vagy list) gondoltam hogy johet a feluletrol, nem csak 9-15 formaban (bar az se gond, mertmap(int,intervalstring.split('-'))
atalakitja. Tehat ha igy jon be, hogyintervals=[(1,5),(6,8),(9,15)]
vagyintervals==[[2,3],[4,6],[7,11],[12,15]]
akkor igy irnam le a felteteled:for i in xrange(szam-valami):
for x,y in intervals:
if x<=i<=y:
parancs()
Sot, ha tudod hogy a kulso ciklus mindig minden intervallumon vegigmegy, sztem ez egy sokkal robosztusabb kod:for x,y in intervals:
for i in xrange(x,y+1):
parancs()Igaz, ebbe most nem kombinaltam bele, hogy plusz jon a hozza tartozo ertek, de akkor lehet az
x,y,ertek
harmasa mint tuple/list az egy listaelem, es akkor azertek
-et irod a parancs() argumentumanak. -
justmemory
senior tag
válasz #82595328 #1482 üzenetére
Szia,
én alapvetően ugyan GTK-t használok, tehát ez csak találgatás, de ott a funkciót és a gombot "össze kell kötni" pl. így:
def valami(widget):
print "akármi"
button = gtk.Button()
button.connect("clicked", valami)Ha nem rakom bele a
button.connect
részt, na akkor áll elő az a helyzet, amit te leírtál. De mondom, nem tudom, hogy a wx-ben miként van...[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz #82595328 #1487 üzenetére
Ahogyan colomb2 is írta, elfut ez szépen windows-on is, noha én elsősorban linux-on, azon belül is a telefonomon (Nokia n900) veszem hasznát (a gtk egy speciális változatának, ami hildon néven fut és az ujjal történő nyomkorászáshoz lett kitalálva). Ezért tehát a gtk az én esetemben...
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz #82595328 #1490 üzenetére
Hát én windows-on megmondom őszintén, hogy portable pygtk-t használok. Picit talán macerásabb bizonyos szempontból, de mivel ez nem fő terület nekem, csak egyfajta kísérletezgetés, így mindegy; céges gép lévén nem is tudok python-t telepíteni rá rendesen, tehát licencelési és egyéb dolgokban nincs tapasztalatom, bár nem gondolom, hogy lenne ilyesmi, hiszen csak telepíteni kell a pygtk-t és kész, onnantól működik a dolog. Linux alatt biztosan
A qt is jó lehet, esetleg érdemes abban is elmélyedned picit; és akkor itt válaszolnék a feltett kérdésedre is: tegyél egy próbát a gtk-val, ismerd meg egy kicsit, és aztán döntsd el, hogy bejön-e neked.
Mint mondtam, én picit kényszerből használom (noha használhatnék qt-t is...), vagy kezdtem el használni, de teljesen jó, a dokumentációja is tök rendben van, eddig mindenre találtam megoldást...
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz #82595328 #1492 üzenetére
A gtk is multiplatform:"PyGTK applications are truly multiplatform and they're able to run, unmodified, on Linux, Windows, MacOS X and other platforms." - PyGTK hivatalos oldala
De nem erőszak. Azért javasoltam csak a kipróbálását, mert nagyon könnyen használható, hamar lehet sikert elérni vele, pár sor az egész és máris van ablakod meg gombot meg kiskutyafüléd; és minél jobban beleásod magad az egyikbe, annál kevésbé veszed rá magad, hogy kipróbáld a másikat. Saját tapasztalat: sehogyan sem tudom rávenni magam, hogy kipróbáljam a qt-t, mert "óó, gtk-val ez semmi perc"...--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz #82595328 #1494 üzenetére
Sajnos ez a gtk2-re vonatkozik (mondjuk ettől még működik), azóta van már gtk3 is (tutorial), viszont ahogyan a hivatalos oldalon láttam, windows alatt maradt még a gtk2...
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
#82595328
törölt tag
válasz #82595328 #1482 üzenetére
Sikerült rájönnöm a hibára. Én okoztam. Az volt a terv, hogy 2 fájllal dolgozom. Az egyik a wxFormbuilderrel létrehozott grafikus elemeket tartalmazza. A másik lesz a tényleges program, amiben én dolgozom.
Csak épp mivel nem értek hozzá ezért sikerült a programhurok létrehozásakor az első fájlra hivatkoznom.
Az alábbi programrészletet én raktam hozzá.if __name__ == '__main__':
app = wx.App()
frame = mainFrame.mainFrame(None)
frame.Show()
app.MainLoop()
Így persze figyelmen kívül hagyta a változtatásaimat. A javítás annyi volt, hogy a frame= mainFrame.mainFrame(None)-t kellett a frame = program(None)-ra cserélnem.
Magamat zavartam össze azzal, hogy a kilépés self.Close() parancsot még a saját fájlom létrehozása előtt beleraktam az első fájlba. Így aztán az később is működött.
Új hozzászólás Aktív témák
- Gördeszka topic
- Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Xbox Series X|S
- Anglia - élmények, tapasztalatok
- Konzolokról KULTURÁLT módon
- BestBuy ruhás topik
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...