Új hozzászólás Aktív témák
-
KEAN
tag
válasz
DrojDtroll
#1298
üzenetére
Nem vagyok benne 100% biztos, hogy működni fog, nem tudom, hogy ez
cam.locationpontosan mi akar lenni, de a 3appendhelyett megpróbálhatod ezt:locs.extend(cam.location) -
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.
-
DrojDtroll
veterán
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

-
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.
-
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 pandasEgy pár soros fájlminta - "monospace" kóddal - valóban nem lenne rossz.
-
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?
-
cousin333
addikt
válasz
concret_hp
#1286
üzenetére
Szerintem akkor is a
groupbya 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
groupbyobjektum szétbontja egyedi csoportokra a dátum és az ügyfél neve alapján:gr = df.groupby(['Ugyfel', 'Datum'])Ezután már az
applymetódussal tudunk az egyes részeken tetszőleges függvényeket futtatni (lehet akársumis), 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
functartalmán még lehet finomítani...![;]](//cdn.rios.hu/dl/s/v1.gif)
-
EQMontoya
veterán
válasz
concret_hp
#1284
üzenetére
No offense, de amennyit magyaráztad itt, már rég megírhattad volna.

-
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.
-
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. 
-
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ó

-
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. -
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

-
válasz
SidCorky
#1276
üzenetére
Ingyenesnek tudom ajanlani. Az alapokat jol megtanitja, utana ha erdekelnek a magasabb matezisek, mar el tudsz indulni.
-
SidCorky
őstag
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 
-
cousin333
addikt
válasz
Capricornus
#1273
üzenetére
-
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.
-
Távoli gép TCP window size-ot hogyan tudom kideríteni?
-
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?
-
-
Ú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?
-
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))
-
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) -
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.masiknevű 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. -
#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
#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. -
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.
-
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()) -
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.
-
#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
#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
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.
-
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.

-
Mitől lehet, hogy a subnet scan nagyon lassú? Hiába állítom akármennyire alacsonyra a timeoutot, akkor is lassú.
-
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.
-
#82595328
törölt tag
Egy kis segítséget kérnék python öröklés, alosztály témában:
Próbáltam írni, egy kisebb programot, amivel az öröklést tesztelném.
A cél az lenne, hogy bekérek 2 számot, amit értéket adna egy osztálynak, majd az egyiket felülírnám az alosztállyal. De sehogy se működik.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.masik = masik
def szorzat(self,egyik,masik):
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()) -
válasz
velizare
#1248
üzenetére
Figyelem: default python environmentben fut, tehát ha 3-asban kell, akkor bele kell nyúlni.
Elsőre jókat szívtam vele
A try a for cikluson kívül volt, így aztán nem értettem, miért döglik le indítás után azonnal... aztán persze rájöttem, hogy a service azonosítás már az első portnál socket errort generál. -
-
single threadben futtasd egy korlátozott portcím-tartományra, és nézd meg, hogy konzisztens-e az eredmény, amit kapsz.
egyébként meg igazából ssh-zhatok meg ftp-zhetek én akárhányas porton, ez a hívás egy dictionary-t használ, amit akár te is megírhatsz. egy listában intként eltárolod a portszámot, mellette pedig stringként hogy mi az a default szervíznév, ami általában használja, és ebből fordítgatsz.
-
-
-
ahogy olvasom, ez egy wrapper a windoze getservbyport függvénye fölött. ez nem csekkolja, hogy ténylegesen milyen szervíz fut azon a porton (azt sem, hogy fut-e egyáltalán), hanem megkérdezi a win service db-jétől, hogy ott milyen név van rámappelve erre a portra. megpróbálhatod ezt közvetlenül hívogatni, hogy az állandó eredményt ad-e, vagy már ott is hasonlókat kapsz.
-
-
Újabb segítségkérés: adott egy python3-as multithreades portscanner. Próbálom a nyitott portok service-eit azonosítani vele, de elég nagy marhaságokat kapok vissza, mitől lehet? Mutatom:
Enter target address: metasploitable.home
Open port 22 fsp
Open port 25 ftp
Open port 21 ftp
Open port 23 ftp
Open port 53 domain
Open port 80 http
Open port 111 sunrpc
Open port 139 netbios-ssn
Open port 445 microsoft-ds
Open port 513 shell
Open port 514 shell
Open port 512 shell
Open port 1099 rmiregistry
Open port 1524 ingreslock
Open port 2049 nfs
Open port 2121 iprop
Open port 3306 mysql
Open port 3632 distcc
Open port 5432 postgresql
Open port 5900 ?
Open port 6000 x11
Open port 6667 ircd
Open port 6697 ircs-u
Open port 8009 ?
Open port 8180 ?
Open port 8787 ?
Open port 38881 ?
Open port 42318 ?
Open port 54571 ?
Open port 58211 ?Ugyan a nyitott portok megtalálása helyes, de mindig vmi hasonló marhaságot kapok, ráadásul nem kapom 2x ugyanazt az eredményt.
-
python3-ban mi a fenéért nem működik a scapy?
ImportError: No module named 'scapy'2-es alatt fent van, 3-as alá felraktam, de mégsem...
MOD: megvan, nem rootként raktam fel...
-
Köszönöm a tanácsokat.
-
-
válasz
sztanozs
#1228
üzenetére
Nah, a 18 órás futásidőt sikerült 11 percre redukálni... de egy nyamvadt mobil négymagos i7-est még mindig nem tudtam értelmesen leterhelni (értsd: max 60% körül). 0.1s-es timeout, 16 process. Arra kíváncsi lennék, mennyi idő megy el a processek kezelésére (32 v. 64 processel sem kaptam jobb eredményt, sőt, az alsó 1024 portos scan 64 processel 20 mp-es időt hozott a 16 process 12 mp-ével szemben).
-
válasz
sztanozs
#1228
üzenetére
Én is ezt írtam...
Próbáltam multithreaddel, de nem hozott számottevő gyorsulást... aztán rájöttem, hogy a GIL lehet a ludas... Megnézem, hogy multiprocessinggel mi az ábra.EQMontoya: próbáltam a timeout csökkentést, de szignifikáns változást nem láttam. Valószínűleg a képernyőkezelés is ludas benne (egyelőre muszáj benne hagynom debug okokból).
-
Van valakinek ötlete, hogyan lehetne gyorsítani egy pythonban készült syn scant? 1 mp-es timeouttal 18 óra az összes port scannelése...
-
-
boneyard
tag
Már nem tudom szerkeszteni, de sikerült.
Itt hagyom, hátha vkinek hasznos lesz:prodata = soup.find_all('div', class_="proddatafile")[1]
divy = prodata.find_all('div')[1]
print(divy.string)A prodatanál azért kell az index, mert az a class is többször szerepel.
divynél fura, h miért 1 az index 2 helyett, mert az a második div a listában, de vmiért 0-tól indul az indexelés. -
boneyard
tag
Helló!
Beautifulsouppal szeretném kinyerni egy div-en belüli div-ben lévő szöveget:
<div class="proddatafile">
<div><strong>REFERENCE</strong></div>
<div>9P-60510-1-13</div>
<div class="separador"></div>
</div>Csak a félkövér szövegre lenne szükségem. Elég kezdő vagyok a témában, autodidakta módon tanulgatom. Ha valaminek van class-a vagy id-ja, akkor az abban lévő részt ki tudom íratni, de erre nem találtam googleben megoldást.
-
Aureal
őstag
Sziasztok!
A GitHub-ról hogy lehet letölteni? (Nem csak pythonra gondolok, hanem általában mindenre.)
Mindenféle mappákba be lehet lépni, ahol forrás fájlok stb. találhatók, de rákattintva akár egy example HTML fájlra is, az nem nyílik meg közvetlen a böngiben, hanem a kód részét hozza fel az oldal. Nem látom a lényegét ezeknek.
-
axioma
veterán
válasz
cadtamas
#1215
üzenetére
Nem erted akkor.
En aszerint megyek rajta vegig, hogy ki a lehetseges _masodik_ elem.
Es tok mind1, hogy hol van az elso, csak hogy van-e. Az indexek abszolute nem kellenek a megoldashoz. Ez mondjuk inkabb az algoritmus es nem a python resze a dolognak.
Probald lekovetni ezen a kicsi peldan amit en irtam le kodot. -
cadtamas
tag
Köszönöm!

Azért kell a pár második tagjának indexe, mert az a pár kell aminek mindkét tagja előrébb van.(5,1,3,2,7,4) (5) nél az eredménynek (3,2)-nek kell lennie, hiába kezdődik az (1,4) hamarabb
Még valami ilyesmin gondolkodom:
for num, pair1 in enumerate(ints):
pair2=s-pair1
Csak nem tudom a pair2 indexét hogyan tudnám kikönyörögni... -
axioma
veterán
válasz
cadtamas
#1212
üzenetére
Ez az amikor jol megszivod azzal, hogy az ints ertekein ugy mesz vegig, hogy "elveszted" az indexet, es mikor ujra lekerdezed, akkor tok jol emeled a nagyordodat feleslegesen. Mert az index kikeresese nem konstans ideju muvelet - es ez a muvelet eleve 2x is szerepel benne.
A tobbi reszet nem nezve elsore csak a feleslegeset kiveve:
for x in xrange(len(ints)-1):
pair1=ints[x]
pair2=s-pair1
x=ints.index(pair1)
try:
y=ints[x+1:].index(pair2)+i
egybol nem kell az x!=y sem (mert x+1.-tol keresed csak)Ja egyebkent latom, hogy vegulis az i-t is arra hasznaltad, hogy tudd hogy hol jarsz, de ket dolog miatt nem vetted eszre:
1. elnevezes (pl. fst_idx eseten egybol latszana)
2. bar a try teljes lefutasa es exception eseten is noveled, de kulonvetted - az egesz utan ha 1x lenne, latszana, hogy pont szamolod a koroketMar csak didaktikailag probald ki. De egyebkent nagyon nem ertem, miert is gyujtogetsz lehetseges indexeket... eleg a legelso. Ha jol ertem, az eloszor befejezodo kell. Tehat en igy mennek vegig rajta:
prevs=set(ints[:1])
for val in ints[1:]:
if s-val in prevs:
return [s-val,val]
prevs.add(val)
return Nonedisclaimer: nem probaltam ki...
-
cadtamas
tag
Codewars-on kaptam egy olyan feladatot, amibe beletört a bicskám.
3 működő megoldásom volt, de sajnos egyik sem elég gyors.
A feladat:
Sum of PairsGiven a list of integers and a single sum value, return the first two values (parse from the left please) in order of appearance that add up to form the sum.
sum_pairs([11, 3, 7, 5], 10)
# ^--^ 3 + 7 = 10
== [3, 7]
sum_pairs([4, 3, 2, 3, 4], 6)
# ^-----^ 4 + 2 = 6, indices: 0, 2 *
# ^-----^ 3 + 3 = 6, indices: 1, 3
# ^-----^ 2 + 4 = 6, indices: 2, 4
# * entire pair is earlier, and therefore is the correct answer
== [4, 2]
sum_pairs([0, 0, -2, 3], 2)
# there are no pairs of values that can be added to produce 2.
== None/nil/undefined (Based on the language)
sum_pairs([10, 5, 2, 3, 7, 5], 10)
# ^-----------^ 5 + 5 = 10, indices: 1, 5
# ^--^ 3 + 7 = 10, indices: 3, 4 *
# * entire pair is earlier, and therefore is the correct answer
== [3, 7]
Negative numbers and duplicate numbers can and will appear.NOTE: There will also be lists tested of lengths upwards of 10,000,000 elements. Be sure your code doesn't time out.
A megoldásom működik, de nem elég gyors.
Lenne valakinek ötlete, hogy mivel tehetném gyorsabbá?
Csak egy iteráció van benne, hogy O(n) legyen a működés.def sum_pairs(ints, s):
list=[]
i=0
for pair1 in ints:
pair2=s-pair1
x=ints.index(pair1)
try:
y=ints[x:].index(pair2)+i
if x!=y:
list.append([x,y])
i+=1
except:
i+=1
if len(list)==0:
return None
list.sort(key=lambda x: x[1])
return [ints[list[0][0]], ints[list[0][1]]] -
kezdosql
tag
válasz
cadtamas
#1206
üzenetére
Most mar megtudtam az eddig szupertitkos feladatot:
fagylaltokat kell osszeallitani, amibol tolcserenkent legfeljebb 3 gomboc lehet, es a gyakorlatban egyszerre csak negy szemelynek vesznek fagyit.Azt akarjak, hogy legyen egy 10 soros es 4 oszlopos tablazat, es x-elgetni lehessen, hogy soronkent milyen oszlopokat jelolnek be.
En inkabb egyesevel oldanam meg, de a probak alapjan ugy lattam, valoban jobb lenne x-elgetes, mint gepeles.vagy szamok beirasa, valamiert a szamokat idonkent osszekeverik. -
cadtamas
tag
válasz
kezdosql
#1204
üzenetére
Nem látom a konkrét feladatot, de ilyenkor jellemzően azt várják el, hogy simán ki iratod (for ciklus, print metódus) egyenként a 10 elemű lista elemeit sorszámokkal, utána pedig sima inputtal bekérsz 3 sorszámot ami segítségével feltöltesz (append) egy üres listát.
Lista indexelésnek olvass utána. -
kezdosql
tag
Adatbevitelre nem talalok megoldast egy jo hete.:-(
Azt kellene megoldani, hogy a kepernyon megjelenjen egy legfeljebb 10 elemu lista, es ezekbol lehessen valasztani legfeljebb 3 elemet, es azt elmenteni uj listaba.
Talan egy kulon grafikus alkalmazast kellene erre telepiteni, amivel egerrel lehetne kattintani ikonokra, vagy van ilyen megoldas, de nem latok a szememtol?
-
EQMontoya
veterán
válasz
cousin333
#1202
üzenetére
Az első fele jogos.

Viszont Az a+b egy számot ad eredményül, ami nem azonos a True-val..
A True is egy szám!
Pythonban a boolean az intből származik, tehát ha leírjuk, hogy isinstance(True, int), az bizony True-t ad vissza.
Hovatovább, teljesen valid kifejezés az, hogy 5 + True, és minden bizonnyal 6 lesz a végeredménye. -
cousin333
addikt
válasz
EQMontoya
#1198
üzenetére
"Akkor látszik, hogy a relációsjel precedenciája nagyobb az összeadásénál."
A helyzet az, hogy fordítva kell olvasni a listát, tehát pont az összeadás prioritása nagyobb.

"The following table summarizes the operator precedences in Python, from lowest precedence (least binding) to highest precedence (most binding)"A Pythonban lehet olyan feltételt írni, amitől a C egy hátast dobna, pl:
if 5 < x <= 14:
print('Közötte van')A fenti példában:
a < b+c == TrueEz így értékelődik ki:
(a < (b + c)) and ((b + c) == True)Ebből a második tag
Falselesz, aminek az oka:
"The default behavior for equality comparison (== and !=) is based on the identity of the objects. Hence, equality comparison of instances with the same identity results in equality, and equality comparison of instances with different identities results in inequality."Az
a+begy számot ad eredményül, ami nem azonos aTrue-val. De ac< a+beredménye már egy boolean, ami lehetTruemeg lehetFalse.
Új hozzászólás Aktív témák
- Milyen hagyományos (nem okos-) telefont vegyek?
- Xiaomi 15T - reakció nélkül nincs egyensúly
- Autós topik
- Toomy: FOXPOST: régen jó volt, de már jobban jársz, ha elfelejted
- Arc Raiders
- Békéscsaba és környéke adok-veszek-beszélgetek
- Napelem
- 3D nyomtatás
- gban: Ingyen kellene, de tegnapra
- Vezetékes FÜLhallgatók
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 9060 XT 8GB GAMER PC termékbeszámítással
- Apple MacBook Air 13 M1 8GB 256GB magyar bill 1 év garancia
- Dell Latitude 5320 - hibás kijelzők - i5 1135G7 ,16GB RAM, SSD, jó akku, számla
- ÚJ Lenovo ThinkPad X13 Gen 5 - 13.3" WUXGA IPS - Ultra 5 135U - 16GB - 512GB - Win11 - 2,5 év gari
- BESZÁMÍTÁS! MSI B450M R5 5600X 32GB DDR4 512GB SSD ASUS ROG STRIX RTX 3070Ti 8GB Zalman Z1 PLUS 750W
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest




![;]](http://cdn.rios.hu/dl/s/v1.gif)


. Esetleg konkrét példát is írhatnál.



