Új hozzászólás Aktív témák
-
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"
-
Mitől lehet, hogy a subnet scan nagyon lassú? Hiába állítom akármennyire alacsonyra a timeoutot, akkor is lassú.
https://www.coreinfinity.tech
-
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 ]
-
#82595328
törölt tag
válasz cousin333 #1252 üzenetére
Köszönöm a válaszokat, Igazából egyik sem az, amit szeretnék. Azt hiszem, nem voltam teljesen világos.
Valójában az osztályok egyik előnyét akartam kipróbálni, hogy hogy tudok egy osztályt felhasználva létrehozni egy új osztályt. Azaz a régi osztályt megtartani, de egy új osztállyal kiegészíteni vagy a mostani esetben felülírni a régi osztály attribútumait és metódusait.
Azaz elsőkörben létrehoztam egy osztályt:
class Egy():
def __init__(self, egyik=1, masik=2):
self.egyik = egyik
self.masik = masik
def szorzat(self):
return self.egyik * self.masikEbben ugye van attribútum, és metódus is.
Ezt kiegészítettem egy példányosítással és adatbekéréses értékadással.
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Egy(a, b)A végén pedig kiírattam.
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())Eddig egyszerű volt, és boldogultam is.
Most jönne a feladat, vagyis a problémám.
Szeretném felhasználni az előbb létrehozott osztályt egy másik osztályhoz úgy, hogy az új osztály a régi osztály egy attribútumát felülírja. Aztán a metódust írnám felül, aztán adnék hozzá új attribútumot és metódust.De már az első sem megy, azaz szeretném felülírni az új osztállyal a régi egyik attribútumát, de csak az egyiket.
Alapvetően azt gondoltam, hogy ez tök egyszerű felveszem az egyik attribútumot az új osztályba:class Ketto(Egy):
def __init__(self, egyik):
self.egyik = egyikÉs minden más változatlan.
Azaz a programnak az elgondolásom szerint így kéne kinéznie:
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):
self.egyik = egyik
a = int(input('Adj egy számot!'))
b = int(input('Adj még egy számot'))
egyke = Ketto(a, b)
print ('Egyik = %s' % egyke.egyik)
print ('Masik = %s' % egyke.masik)
print ('Szorzat = %s' % egyke.szorzat())Ez pedig a hibaüzenet:
Traceback (most recent call last):
File "/home/sire/teszte.py", line 16, in <module>
egyke = Ketto(a, b)
TypeError: __init__() takes 2 positional arguments but 3 were givenNem értem mi a baj. Elvileg 2 változóm van.Mindkettő az első osztályból jön, csak az egyiket lecserélem a második osztályból. Ez lenne nekem a logikus. Mit csinálok rosszul, és mi a jó megoldás.
-
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. -
#82595328
törölt tag
Bocs, de ezt nem is értem.
Nem igazán értek az osztályokhoz. De az elméletét nagyjából megértettem egy lakástervezéses példa alapján.
Az ős egyik tulajdonságát szeretném lecserélni az új osztályban. Ez lenne az osztályok egyik előnye. Hogy könnyedén lehet módosítani az alapprogramot annak módosítása nélkül.Azaz tételezzük fel, hogy Egy az egy sima szoba, egyik a magasság, másik a szélesség.
A Ketto osztály meg legyen egy kör alakú szoba, ahol az egyik a magasság (ezt örökölnő az ősből), a másik pedig a sugár(erre cserélném le a szélességet). (Lehetett volna négyzet, meg kör alapú hasáb is. A magasság meg terület így lenne értelme a szorzásnak, de a probléma szempontjából mindegy.)Azaz az az Egy(sima szoba) mintát akarom módosítani egy Ketto(kör alakú szoba) mintára. Úgyhogy az attribútumok értékét felhasználói input adja meg.
Tehát lényegében az osztályok első előnyét akarnám leprogramozni, hogy egy meglévő mintát (osztályt) felhasználva, készítek egy másik mintát (osztályt). Még csak nem is bonyolítottam egyelőre másik metódussal. Ennek egyszerűnek kellene lennie, de mégsem az.Tehát még egyszer első körben szeretnék egy osztályt módosítani egy származtatott osztállyal. Ez lenne a programomnak a lényege. A felhasználói adatbekérés már csak ráadás. De így is működnie kellene.
-
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"
-
#82595328
törölt tag
válasz cousin333 #1261 üzenetére
Köszönöm a válaszokat!
Okosabb lettem! Viszont még egy alapproblémám nem oldódott meg én mindkét változónak most akarok értéket adni. Úgy hogy az egyik érték az szülő osztályból jön, a másik a származtatott osztályból.
Ezt hogy tudom megoldani? Csak úgy, hogy csinálok egy példányt a szülőosztályból is? Pont ezt nem akarom. Azt gondoltam, hogy ha példányosítom a származtatott osztályt, akkor abban benne lesz a szülőosztály is. Nekem ez lenne logikus. Hiszen a származtatott osztálynak tartalmaznia kellene a szülő osztályt is a módosításokkal. -
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"
-
K1nG HuNp
őstag
Hello!
Írtam (tutorial alapjan) egy botot. Annyit tesz, hogy egy adott oldalon átnézi a kommenteket, és ha talál a kommentben egy megadott stringet, akkor válaszol rá. Ez hasznos lehet pl mérttani egységek átváltására a többiek számára stb (most ezek a funkciok még nincsenek beleírva).
Értem a kódot, értem mi miért van, egy pici kivétellel. Ha valaki el tudná magyarázni nekem ezeket, azt megköszönném.
Miért kell az r változóval egyenlővé tenni a belepeshez szukseges adatokat? mit csinál a return r a "def bot_belepes()"-ban? Utánna a bot_futtatasban miért attributum, vagyis miert van ()-ben az r ujfent? Aztan legvegsokent a while elotti sorban miert teszuk ujra egyenlove a "bot_belepes" def-el?
import praw
import config
import time
def bot_belepes():
print ("belepes")
r = praw.Reddit(username = config.username,
password = config.password,
client_id = config.client_id,
client_secret = config.client_secret,
user_agent = "Bence's first reddit bot")
print ("belepve")
return r
def bot_futtatas(r):
print ("25 komment atnezese")
for comment in r.subreddit('test').comments(limit=25):
if "dog" in comment.body:
print ("komment a \"dog\"-val megtalalva")
comment.reply("I also love dogs! [Here](http://i.imgur.com/LLgRKeq.jpg) is an image of one!")
print ("valaszolva a kommentre ")
print ("10 mp varakozas")
time.sleep(10)
r = bot_belepes()
while True:
bot_futtatas(r)(raw_item.get("pk").unwrap().as_s().unwrap().to_string()).split("#").collect::<Vec<&str>>()[1].to_string()
-
sonar
addikt
válasz K1nG HuNp #1264 üzenetére
Azért mert az r fogja tartalmazni a belépéshez szükséges adatokat
= praw.Reddit(username = config.username,
password = config.password,
client_id = config.client_id,
client_secret = config.client_secret,
user_agent = "Bence's first reddit bot")két függvénybe van elkülönitve a folyamat. Az első a belépés (bot_belepes()) a másik meg a robotolás (bot_futtatas(r))
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
K1nG HuNp
őstag
-
cousin333
addikt
-
Újabb segítségkérés:
#!/usr/bin/env python3
import netifaces
for i in netifaces.interfaces():
try:
addr=netifaces.ifaddresses(i)
print(addr[netifaces.AF_INET])
except:
pass[{'peer': '127.0.0.1', 'addr': '127.0.0.1', 'netmask': '255.0.0.0'}]
[{'addr': '192.168.1.76', 'broadcast': '192.168.1.255', 'netmask': '255.255.255.0'}]
[{'addr': '192.168.51.1', 'broadcast': '192.168.51.255', 'netmask': '255.255.255.0'}]
[{'addr': '192.168.19.1', 'broadcast': '192.168.19.255', 'netmask': '255.255.255.0'}]
[{'addr': '192.168.56.1', 'broadcast': '192.168.56.255', 'netmask': '255.255.255.0'}]Ez a kód és a kimenet. A kimenetből el kéne érnem az 'addr' mező értékét, ami ugye nem mindig ugyanabban a pozícióban van. Hogyan?
https://www.coreinfinity.tech
-
-
válasz K1nG HuNp #1270 üzenetére
address=netifaces.ifaddresses(i)
if i=="lo":
pass
else:
if len(i)>=8:
print(blue+i+black,"\t",address[netifaces.AF_INET][0]['addr'])
else:
print(blue+i+black,"\t\t",address[netifaces.AF_INET][0]['addr'])Ez a lényege. Terveim szerint mindent megosztok, amin eddig machináltam itthon - hamarosan.
Egyébként most fedeztem fel, hogy ez a kód még mindig nem bolondbiztos, mert csak az első címet adja vissza, de mi van, ha egy NIC-nek több is van?
[ Szerkesztve ]
https://www.coreinfinity.tech
-
Távoli gép TCP window size-ot hogyan tudom kideríteni?
https://www.coreinfinity.tech
-
Capricornus
aktív tag
Sziasztok!
Python3-ban van-e a unixos join-hoz hasonló függvény/kód/bármi? Van 5 adatfájlom és az első oszlopban szereplő nevek alapján kellene őket összefésülni egy végső adatfájlba, amiben csak azok a nevek és a hozzájuk tartozó értékek szerepelnek, amik mind az 5 fájlban előfordulnak.
Per aspera ad astra!
-
cousin333
addikt
-
SidCorky
senior tag
Sziasztok!
Most szeretnék elkezdeni programozni tanulni, elég nagy az elhatározás, eddig közöm nem volt semmilyen programnyelvhez, szinte kódot se láttam még élőben (láttam, de nem értettem 😀). Neten tanulnék, sokan ajánlották hogy érdemes a Phytonnal kezdeni, és ha ez megy akkor innen lépkedni más irányba. Webfejlesztéssel szeretnék kezdeni. Van köztetek olyan, aki a Lynda.comon tanult? Vannak ajánlott kurzusok?Megtaláltam a Clever Programmer youtube csatornát, ő nagyon nyomja ezt a nyelvet. Mennyire jó alap az ő tutorial sorozata? Elég sok videóban hangoztatja hogy ő aztán tényleg az abszolút nulláról kezdi, a tananyagba még nem kezdtem bele, ez mennyire igaz?
Előre is köszönöm Persze minden más tanácsot szívesen veszek azzal kapcsolatban hogy induljak el. Iskolarendszerű, és előre több tízezret kifizetős dolog ennyire nem játszik, a Lynda.com árképzése fér bele jelenleg, ha tudtok egy jobb platformot ami havi 30$-nál nem drágább, és van vele tapasztalat, azt is szívesen fogadom
Ryzen 5 3600 // GTX 1660 Ti // iPhone 14 Pro // iPad Pro M2 // Nintendo Switch OLED // Fujifilm X-T30 II
-
válasz SidCorky #1276 üzenetére
Ingyenesnek tudom ajanlani. Az alapokat jol megtanitja, utana ha erdekelnek a magasabb matezisek, mar el tudsz indulni.
https://www.coreinfinity.tech
-
concret_hp
addikt
hogyan csináljuk pandasban elegánsan azt, hogy van egy fájlom, amiben többféle dimenzió szerint csoportosítok adatokat,
oszlop1 (string / dátum)-oszlop2(string / dátum)-oszlop3(integer)
a-x-A
a-x-B
b-x-A
b-x-B
a-y-A
a-y-B
b-w-A
b-w-Bna szeretnék egy olyat, hogy az oszlop 3 értéke úgy változzon, hogy az első 2 oszlop alapján összetartozókból (mindig 2 sor van, A és B) legyen egy olyan sor ami A+B értéket kapja
remélem érthető lett
vagy fullba vagy sehogy :D
-
cousin333
addikt
válasz concret_hp #1279 üzenetére
Hát, nem lett valami érthető...
Ha jól értem, akkor végeredményként fele annyi sort szeretnél és összegezni a 3. oszlopban azokat az értékeket, ahol az 1. és 2. oszlopok azonosak. Vagy valami ilyesmi.
Tehát a példád alapján az új táblázat ez lenne:
a-x-A+B
b-x-A+B
a-y-A+B
b-w-A+BKonkrét példa jobb lenne, nekem két fogalom ugrik be: multi-index és a
groupby
.[ Szerkesztve ]
"We spared no expense"
-
concret_hp
addikt
válasz concret_hp #1281 üzenetére
ja és a legszebb, hogy valójában nem A+B kéne a harmadik oszlopban, szóval a sima group by nem jó
vagy fullba vagy sehogy :D
-
cousin333
addikt
válasz concret_hp #1282 üzenetére
Pedig azt hittem, értem. Szerintem fuss neki a magyarázatnak mégegyszer . Esetleg konkrét példát is írhatnál.
"We spared no expense"
-
concret_hp
addikt
válasz cousin333 #1283 üzenetére
dátum1-ügyfél1-termék1-ár1
dátum1-ügyfél1-termék2-ár2
dátum1-ügyfél1-termék3-ár3
dátum2-ügyfél1-termék1-ár1
dátum2-ügyfél1-termék2-ár2
dátum2-ügyfél1-termék3-ár3
dátum1-ügyfél2-termék1-ár1
dátum1-ügyfél2-termék2-ár2
dátum1-ügyfél2-termék3-ár3
dátum2-ügyfél6-termék1-ár1
dátum2-ügyfél6-termék2-ár2
dátum2-ügyfél6-termék3-ár3na ebből szeretnék egy olyat, hogy:
dátum1-ügyfél1-(ár1*ár2)
dátum2-ügyfél1-(ár1*ár2)
dátum1-ügyfél2-(ár1*ár2)
dátum2-ügyfél6-(ár1*ár2)tehát adott dátumon adott ügyfél termék1 és termék2-höz tartozó áraival csinálok egy műveletet (ami lehet bármi de nem sima szumma, mert az ugye egy groupby-al könnyen előállna) és ezt kapom vissza egy dataframe-ként.
vagy fullba vagy sehogy :D
-
EQMontoya
veterán
válasz concret_hp #1284 üzenetére
No offense, de amennyit magyaráztad itt, már rég megírhattad volna.
Same rules apply!
-
cousin333
addikt
válasz concret_hp #1286 üzenetére
Szerintem akkor is a
groupby
a megoldás... csak nyilván nem magában.Béta verziós megoldás. Íme az "eredeti" táblázat:
>>> df.head()
Datum Ugyfel Termek Ar
0 dátum1 ügyfél1 termék1 ár1
1 dátum1 ügyfél1 termék2 ár2
2 dátum1 ügyfél1 termék3 ár3
3 dátum2 ügyfél1 termék1 ár1
4 dátum2 ügyfél1 termék2 ár2A
groupby
objektum szétbontja egyedi csoportokra a dátum és az ügyfél neve alapján:gr = df.groupby(['Ugyfel', 'Datum'])
Ezután már az
apply
metódussal tudunk az egyes részeken tetszőleges függvényeket futtatni (lehet akársum
is), majd az eredményt összefűzni. A kissé favágó megoldás az összeadásra:def func(group, cucc1, cucc2):
x = group[group.Termek == cucc1].Ar.squeeze()
y = group[group.Termek == cucc2].Ar.squeeze()
return x+y
gr.apply(func, 'termék1', 'termék2')Az eredmény:
Ugyfel Datum
ügyfél1 dátum1 ár1ár2
dátum2 ár1ár2
ügyfél2 dátum1 ár1ár2
ügyfél6 dátum2 ár1ár2
dtype: objectA
func
tartalmán még lehet finomítani...[ Szerkesztve ]
"We spared no expense"
-
Egy kis segítséget szeretnék kérni!
Van egy txt fájlom, amiben lego készletek adatai vannak. Úgy néz ki, hogy egyik sorban van az alkatrész neve, másik sorban a darabszám és az aznosító száma.
pl: [String Cord Thin 100cm in (Black String)]
1 x 56823c100osszes_alkatresz=0
adatok=[]
with open("lego2.txt") as ff:
for alkatrész in ff:
db,x,azonosito = next(ff).split()
osszes_alkatresz = osszes_alkatresz + int(db)
adatok.append( (alkatrész.strip(), int(db), str(x), azonosito))
print("A készletben", len(adatok),"különféle alkatrész van")
print("Összesen", osszes_alkatresz,"alkatrész van")Idáig jutottam. A cél az lenne, hogy a darabszámot és az azonosítót írja ki egy másik txt fájlba azonosító szerint növekvő sorrendbe. No ezt nem sikerül megcsinálni. Hogy szedem ki csak ezt a két elemet?
A végső program feladata az lenne, hogy ha valaki összeszedi az összes otthoni Lego készletét, akkor össze lehessen hasonlítani, hogy egy adott készlethez megvan-e az összes elem, ha nem akkor melyik nincs meg?
Eladó Lego: 42139 All terrain vehicle
-
sztanozs
veterán
válasz Victoryus #1288 üzenetére
Kicsit bővebben írnál a fájlról? Mert nekem nem igazán jött le a felépítése (pl bedobsz 10-20 sort).
BTW ez a text fájl egy készlethez van, vagy az összes nálad levő készelet egy fájlba van dumpolva?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 Victoryus #1288 üzenetére
Mielőtt válasz érkezne: használd a "programkód" kódot ha Python szkriptet szúrsz be, különben ömleszti a PH motor (pl. törli a szóközöket). Ennél a nyelvnél meg nagyon nem mindegy, hogy mit menyire húztál be, a programod működőképessége múlhat rajta.
"Úgy néz ki, hogy egyik sorban van az alkatrész neve, másik sorban a darabszám és az azonosító száma."
Gondolom az a sor az valójában oszlop akart lenni.
Ilyen feladat megoldható az alap Pythonnal, de én inkább a Pandas modult javasolnám, sokat egyszerűsödik vele a feladat. Elvileg ennyit kell a parancssorba (nem a Python promptba!) írni:
pip install pandas
Egy pár soros fájlminta - "monospace" kóddal - valóban nem lenne rossz.
[ Szerkesztve ]
"We spared no expense"
-
válasz sztanozs #1289 üzenetére
Belinkelem: rebrickable.com Tehát itt van gyakorlatilag az összes Lego készlet, elemeivel együtt. Az inventoryból kimásolom mondjuk jegyzettömbe, és azzal már lehet dolgozni. Ezen a weblapon is van lehetőség hasonló keresésre, de csak 3 készletet lehet megadni, nekem meg vannak ömlsztett alkatrészeim is például, amiket így nem vesz figyelembe.
Tehát arra gondoltam, hogy csinálok mondjuk egy txt fájlt, amibe az összes legó alkatrészemet beleteszem, és utána ezt már össze tudom hasonlítani a hivatalos készletekkel. Elsősorban a technic vonal érdekel, de ez most nem lényeges. Rendezem elem azonosítószám szerint, és akkor könnyen össze is lehetne hasonlítani. Nem teljesen látom még át a tömbök kezelését, illetve amit elgondolok azt nem feltétlenül sikerül megoldani.
Eladó Lego: 42139 All terrain vehicle
-
DrojDtroll
addikt
szépen a 3 elemu vektorok egyes elemeit appendelve a
locs
-hoz (locs = []
) mukodik, de igy nem olyan szépmost egy 3n elemu tömböm van, ahelyett, hogy egy n*3-as mátrixom lenne, és az append is 3 sor
[ Szerkesztve ]
-
cousin333
addikt
válasz DrojDtroll #1296 üzenetére
Hogy néz ki most a kód? És ha simán a
cam.location
-tappend
-eled? Tehát egyben, nem elemenként?Ha már Python, az utolsó két sor meg legyen:
for loc in locs:
print(loc)A jelenlegi megoldástól feláll a szőr a hátamon. Ez nem C...
ui: Ide is simán beszúrhatod a példakódokat, nem kell hozzá külön szolgáltatás. Persze ne az egészet, csak a lényeget.
[ Szerkesztve ]
"We spared no expense"
-
-
KEAN
tag
válasz DrojDtroll #1298 üzenetére
Nem vagyok benne 100% biztos, hogy működni fog, nem tudom, hogy ez
cam.location
pontosan mi akar lenni, de a 3append
helyett megpróbálhatod ezt:locs.extend(cam.location)
"Persze, hogy tudtam, csak nem sejtettem!"
Új hozzászólás Aktív témák
- Ingyenes vagy akciós szoftverek
- Übergyors Samsungnak próbál látszani egy hamisított NVMe SSD
- Sorozatok
- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- Exkluzív funkcióval tenné vonzóbbá az ARM-os PC-ket a Microsoft
- Autós kamerák
- Projektor topic
- Autós topik
- A TikTokon marakodik Trump és Biden, betilthatja az USA
- Mibe tegyem a megtakarításaimat?
- További aktív témák...