- Mobil flották
- Honor Magic6 Pro - kör közepén számok
- Android alkalmazások - szoftver kibeszélő topik
- Apple AirPods Pro (2. generáció) - csiszolt almaságok
- iOS alkalmazások
- Számháborút nyerne az Ulefone Armor 26 Ultra
- Huawei P20 Lite - friss forma, régi vas
- Netfone
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Ennyibe kerülnek a Huawei Pura modellek Európában
Hirdetés
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Fejlesztői videón az inZOI, a Krafton életszimulátora
gp A látvány továbbra is lenyűgöző, a gépigényre még mindig nem merünk gondolni.
-
Az üzleti chatbot lehet az új fejőstehén
it Üzleti chatbotot indított az Anthropic, azt reméli, hogy sok pénz folyik majd be a cégektől.
Új hozzászólás Aktív témák
-
cadtamas
tag
Úgy látom a kérdésemet inkább itt kellett volna feltennem.
Szeretnék egy kígyós tkinter programot írni. A Gerard Swinnen könyvből tanulok pythonul. (Ez az első programnyelvem). Még csak a 100. oldal környékén járok, így az ismereteim nem túl mélyrehatóak.
Elakadtam egy egyszerű problémánál és nem jövök rá mit rontok el.
def kocka_mozgato():
global x, y, xt, yt,
i = 0
xt,yt=x,y
while i < n:
if i==0:
x[0]=x[0]+iranyx*racs
y[0]=y[0]+iranyy*racs
if i!=0:
x[i]=xt[i-1]
y[i]=yt[i-1]
can1.coords(kockak[i], x[i], y[i], x[i] + racs, y[i] + racs)
i += 1
abl1.after(1500, kocka_mozgato)ez rajzolná ki a mozgó kígyó testét, szeretném úgy megoldani, hogy eltárolom a kígyó testének x,y koordinátáit egy xt,yt listában, hogy később a kígyó teste innen olvassa ki, hogy mely pizícióra kell mozognia, de valamiért a listák összes eleme felveszi a [0] pozíció értékét.
Lehet, hogy inkább péknek kellett volna mennem. A liszt nem csinál ilyet.[ Szerkesztve ]
-
cadtamas
tag
válasz cousin333 #890 üzenetére
Basszus, igazad van!
Leteszteltem python interpreterben.
Sose gondoltam volna, hogy a listák így működnek.>>> x=[1,2,3]
>>> y=x
>>> x[0]=5
>>> x
[5, 2, 3]
>>> y
[5, 2, 3]
>>>Nagyon köszönöm!!!
Ezt a deque módszert még nem említette a könyv.
Keresek más megoldást. De legalább tudom, hogy mi okozza a problémát.update:
így már működik:
def kocka_mozgato():
global x, y,xt,yt
i = 0
xt,yt=[],[]
while i < n:
xt.append(x[i])
yt.append(y[i])
if i==0:
x[0]=x[0]+iranyx*racs
y[0]=y[0]+iranyy*racs
if i!=0:
x[i]=xt[i-1]
y[i]=yt[i-1]
can1.coords(kockak[i], x[i], y[i], x[i] + racs, y[i] + racs)
i += 1
abl1.after(1500, kocka_mozgato)[ Szerkesztve ]
-
cadtamas
tag
Újabb problémával szembesültem.
A fájlkezelésnél/létrehozásnál tartunk és ha létrehozok egy .txt fájlt, akkor az ékezetes karakterek helyére hülye szimbólumokat rak.pl: F�rfi;
És amikor visszaolvastatom a fájl tartalmát, ugyanezt olvassa vissza.Mit lehet tenni, hogy megfelelően kódolja a létrehozott fájlt?
Az első sorom ezzel kezdődik:
# -*-coding:utf-8;-*-
windows-os pycham. -
cadtamas
tag
válasz szucstom #900 üzenetére
Ha a Gerard Swinnen könyvet használod, akkor ne tedd félre.
Az egyik legösszeszedettebb, legjobb könyv rengeteg példával és feladattal.
Kb. a felénél járok és én is 3.6-ot használok, de 1-2 ilyen parancstól eltekintve tökéletesen használható.
Ezekre meg könnyű rákeresni, hogy miért vannak.(Sokáig nem tudtam, de rengeteg feladat ki van dolgozva a könyv utolsó részében
-
cadtamas
tag
Üdv, ismét elakadtam.
Van egy programom, ami egy elektromos ellenállásra rajzolja ki a megfelelő színkódokat.
Gerard Swinnen 13.4. feladat
Az lenne a feladat, hogy miután beütöm az ellenállás értékét, ne gombhoz legyen rendelve a csíkok átszínezése, hanem csak simán az <enter> gomb lenyomásával működjön.
Beleírtam amit elvileg kell, de a következő hibát írja ki:
"TypeError: changeColours() takes 1 positional argument but 2 were given"Tudna valaki segíteni, hogy mit rontottam el?
from tkinter import*
from math import log,log10
class Application:
def __init__(self):
"""A főablak constructora"""
self.root=Tk()
self.root.title('Színkódok')
self.drawResistor()
Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
from tkinter import*
from math import log,log10
class Application:
def __init__(self):
"""A főablak constructora"""
self.root=Tk()
self.root.title('Színkódok')
self.drawResistor()
Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
#Button(self.root, text='Mutat', command=self.changeColours).grid(row=3,sticky=W) #Korábban ezzel működött
self.entry=Entry(self.root,width=14)
self.entry.bind("<Return>",self.changeColours) #Ezt írtam csak bele
self.entry.grid(row=3)
#színkódok:
self.cc=['black','brown','red','orange','yellow','green','blue','purple','grey','white']
self.root.mainloop()
def drawResistor(self):
"""Vászon ellenállás modellel, amin három színes csík van"""
self.can=Canvas(self.root,width=500,height=200,bg='light blue')
self.can.grid(row=1,pady=5,padx=5)
self.can.create_line(10,100,490,100,width=3)
self.can.create_rectangle(130,60,360,140,fill='beige',width=2)
#három színes csík (feketék alapból)
self.line=[] #listában tároljuk őket
for x in range(150,250,48):
self.line.append(self.can.create_rectangle(x,60,x+30,140,fill='black',width=0))
def changeColours(self):
"""A beírt értéknek megfelelő három szín kiiratása"""
self.v1ch=self.entry.get() #A get() metódus egy stringet ad vissza (ez a bekért adat)
try:
v=float(self.v1ch) #Ha sima float értéket írtunk be akkor ezzel működik
except:
err=1 #Nem numerikus adat
else:
err=0
if err==1 or v>1e11:
self.reportError() #Nem megfelelő érték
elif v<10:
li=[0]*3
li[1]=int(v+.5)
li[2]=int((v-int(v))*10+.5)
for n in range (3):
self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])
else:
li=[0]*3
logv=int(log10(v)) #logaritmus egész része
ordgr=10**logv #nagyságrend
li[0]=int(v/ordgr) #egész rész
decim=v/ordgr-li[0] #tizedes rész
li[1]=int(decim*10+.5) #+0.5 a korrekt kerekítéshez
li[2]=logv-1
#a 3. szakasz színezése:
for n in range (3):
self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])
def reportError(self):
self.entry.configure(bg='red') #mező hátterének színe
self.root.after(1000,self.emptyEntry) #1 sec után törölni
def emptyEntry(self):
self.entry.configure(bg='white') #fehér háttér vissza
self.entry.delete(0, len(self.v1ch)) #karakterek törlése
####Főprogram###
f=Application()[ Szerkesztve ]
-
cadtamas
tag
Sziasztok.
Az osztályoknál tartok és ismét sikerült elakadni.
Tudom, hogy mi a probléma, de nem tudom miként lehet megoldani."A feladat az, hogy a tkinter Frame()-osztályából kell leszármaztatni az Application osztályt, aminek a constructora egy 400x400-as vásznat hoz létre és 2 gombot. A vásznon a Visage osztály egy objektumát fogjuk létrehozni..."
from tkinter import*
def circle(can,x,y,r,color="white"):
"A <can> vásznon egy <r> sugarú kör rajza <x,y>-ban."
can.create_oval(x-r,y-r,x+r,y+r,outline=color)
class Application(Frame):
def __init__(self,boss=None):
Frame.__init__(self) #szülőosztály constructor
#Példány attribútomok inicializálása:
self.canv=Canvas(height=400,width=400)
self.canv.pack(side=TOP,padx=5,pady=5)
Visage(self.canv)
Button(self,text="Open", command=self.open).pack()
Button(self,text="Close", command=self.shout).pack()
def shout(self):
Visage.mouth=self.canv.create_line(170,270,230,270,fill='black')
def open(self):
Visage.mouth=circle(self.canv,200,270,30,color="black")
class Visage:
"""Arc rajzoló osztály"""
def __init__(self,canv_):
self.canv=canv_
circle(canv_,200,200,150,color="black") #fej
circle(canv_,160,160,30,color="black") #bal szem
circle(canv_,160,160,10,color="black")
circle(canv_,240,160,30,color="black") #jobb szem
circle(canv_,240,160,10,color="black")
circle(canv_,200,200,20,color="black") #orr
self.mouth=0 #száj
app=Application()
app.mainloop()Nem jelennek meg a gombok (Eddig egy Tk objektum kellett hozzá, de most nem tudom hogyan hozzam létre).
-
cadtamas
tag
Ugyanaz a feladat, de egy olyan probléma, amit nem tudok hova tenni.
from tkinter import*
def circle(can,x,y,r,color="white"):
"A <can> vásznon egy <r> sugarú kör rajza <x,y>-ban."
can.create_oval(x-r,y-r,x+r,y+r,outline=color)
class Application(Frame):
def __init__(self,master=None):
Frame.__init__(self) #szülőosztály constructor
#self.master = master #ezt muszáj volt inaktívvá tenni, mert nem engedte bezárni a főablakot
self.pack()
#Példány attribútomok inicializálása:
self.canv=Canvas(height=400,width=400,bg='white')
self.canv.pack(side=TOP,padx=5,pady=5)
self.face=Visage(self.canv)
Button(self,text="Open", command=self.face.open).pack(side=RIGHT)
Button(self,text="Close", command=self.face.close).pack(side=RIGHT)
class Visage:
"""Arc rajzoló osztály"""
def __init__(self,canv_):
self.canv=canv_
circle(canv_,200,200,150,color="black") #fej
circle(canv_,160,160,30,color="black") #bal szem
circle(canv_,160,160,10,color="black")
circle(canv_,240,160,30,color="black") #jobb szem
circle(canv_,240,160,10,color="black")
circle(canv_,200,200,20,color="black") #orr
self.mouth=0 #száj
def open(self):
self.canv.delete(self.mouth) #törlés
self.mouth=circle(self.canv,200,270,30,color="black")
def close(self):
self.canv.delete(self.mouth) #törlés, de valamiért nem törli!!!
self.mouth=self.canv.create_line(170,270,230,270,fill='black')Az open metódus működik rendesen, de a close nem.
Arra tudok gondolni, hogy valamiért nem működik a delete metódus és az open() csak elfedi a vízszintes vonalat, de nem törli.
Az működne ha letörölném az egész vásznat és újrarajzolnám az arcot is, de szerintem ennek is kellene működnie.
Már órák óta ezen agyalok, de nem jutok dűlőre. -
cadtamas
tag
válasz slyder81 #991 üzenetére
Én ugyan nem vagyok szakértő a témában, nagyjából ugyanott tartok a programozásban, mint te, de az a probléma, hogy mint objektum van behelyezve a háttér gif a vászonra.
Ne adj neki nevet és akkor nem lesz szerintem gond.Nem tudom kipróbálni, de én valami ilyennel próbálkoznék:
class Draw(Frame):
def __init__(self):
Frame.__init__(self)
#Vászon létrehozása, kép betöltése, megjelenitése
self.c = Canvas(self, width =1292, height =916, bg ='grey', bd =2, relief =SOLID)
PhotoImage (file ='alap.gif') #Ha nem adsz neki nevet, nem fogja megfogni szerintem.
self.item = self.c.create_image(640, 450, image=self.photo,activeimage= None)
self.c.grid(row =1, column =1, rowspan=6, padx= 0, pady= 5)
#A szines körök kezdőpoziciója, létrehozása
x1, y1,x2,y2 = 100, 100,150,50
x3, y3,x4, y4 = x1 ,y1,x2, y2+100
self.c.create_oval(x1, y1,x2,y2, fill ='red')
self.c.create_oval(x3, y3,x4, y4, fill ='blue')
#Az egér 'érzékelése'
self.c.bind("<Button-1>", self.mouseDown)
self.c.bind("<Button1-Motion>", self.mouseMove)
self.c.bind("<Button1-ButtonRelease>", self.mouseUp)
self.grid()
# Az egér események definiállása -
cadtamas
tag
válasz cadtamas #993 üzenetére
Eh, hülyeséget beszélek.
Ha kitörlöd a hivatkozást a következő sor hibát fog kiadni.Akkor viszont én arrafelé tapogatóznék, hogy a mozgatható elemeket beletenném egy listába és hozzáadnék egy sort a mouseDown() metódushoz, hogy csak akkor működjön ha az objektum eleme a a listának.
-
cadtamas
tag
Na, ez lesz most az utolsó.
Találtam ezt a tag-es megoldást.
Remélem működni fog:#-*- coding:Utf-8 -*-
from Tkinter import *
from random import randrange
import random
class Draw(Frame):
def __init__(self):
Frame.__init__(self)
#Vászon létrehozása, kép betöltése, megjelenitése
self.c = Canvas(self, width =1292, height =916, bg ='grey', bd =2, relief =SOLID)
self.photo = PhotoImage (file ='alap.gif')
self.item = self.c.create_image(640, 450, image=self.photo,activeimage= None)
self.c.grid(row =1, column =1, rowspan=6, padx= 0, pady= 5)
#A szines körök kezdőpoziciója, létrehozása
x1, y1,x2,y2 = 100, 100,150,50
x3, y3,x4, y4 = x1 ,y1,x2, y2+100
self.c.create_oval(x1, y1,x2,y2, fill ='red', tags='kor') #adunk hozzá egy tag-et
self.c.create_oval(x3, y3,x4, y4, fill ='blue', tags='kor')
#Az egér 'érzékelése'
self.c.bind("<Button-1>", self.mouseDown)
self.c.bind("<Button1-Motion>", self.mouseMove)
self.c.bind("<Button1-ButtonRelease>", self.mouseUp)
self.grid()
# Az egér események definiállása
def mouseDown(self, event):
self.currObject =None
self.x1, self.y1 = event.x, event.y
self.selObject = self.c.find_closest(self.x1, self.y1)
sel.tags = self.c.gettags(self.selObject) #Kiolvassuk a tag-et
if self.tags=='kor':
self.c.itemconfig(self.selObject,width =3)
self.c.lift(self.selObject)
def mouseMove(self,event):
x2,y2 =event.x, event.y
dx, dy =x2 -self.x1, y2 -self.y1
if self.selObject:
self.c.move(self.selObject, dx, dy)
self.x1, self.y1 =x2, y2
def mouseUp(self, event):
if self.selObject:
self.c.itemconfig(self.selObject,width =1)
self.selObject =None[ Szerkesztve ]
-
cadtamas
tag
válasz slyder81 #996 üzenetére
Próbáld meg ezzel:
def mouseDown(self, event):
self.currObject =None
self.x1, self.y1 = event.x, event.y
self.selObject = self.c.find_closest(self.x1, self.y1)
sel.tags = self.c.gettags(self.selObject) #Kiolvassuk a tag-et
if self.tags=='kor': #talán vedd hozzá hogy 'current' ha nem működik rendesen
self.c.itemconfig(self.selObject,width =3)
self.c.lift(self.selObject)
else:
self.currObject =None #így már elvileg nem fogja mozgatni[ Szerkesztve ]
-
cadtamas
tag
válasz s3toraph #1009 üzenetére
Én azt javaslom, hogy párhuzamosan kezdj el angolul is tanulni. Sajnos sok információhoz kizárólag angol nyelven fogsz hozzájutni.
Mondjuk az vicces amikor egy olyan összetett dolgot próbálok angolul megérteni, amit magyarul se biztos, hogy megértenék.
A Gerard Swinnen könyv tökéletes ha a python az első programnyelved.
Én is azzal kezdtem. Most az udemy-n vettem egy angol nyelvű pythonos kurzust. Így könnyebb megérteni miről beszél. -
cadtamas
tag
Segítsetek kérlek, hogy mit szúrok el.
Van egy listám, ami számokat tartalmaz 0-52-ig.
Szeretnék egy random számot hozzáadni a listához, de csak akkor, ha az még nem a lista eleme, ha már benne van a listában, akkor a függvény újra hívja magát.self.list=[]
def shuffle(self):
n=randrange(0,52)
if n not in self.list:
self.list.append(n)
return n
else:
self.shuffle()Viszont időnként a függvény a None értékkel tér vissza.
Nem értem miért. -
cadtamas
tag
Üdv ismét.
Tkinter programozással kapcsolatos lenne a következő kérdésem.
Szeretnék egy reset metódust csinálni, de problémába ütköztem.
Létrehoztam egy Frame objektumot, amin belül van egy canvas.. A canvast könnyedén tisztára tudom seperni a .delete(ALL) metódussal.
Viszont a kereten elhelyeztem control paneleket amiken gombok, beviteli mezők, meg feliratok vannak.
Létrehoztam egy controlPanel osztályt
A paneleket egy szótárban tárolom panel["player1"]=ControlPanel(....) formában.
Hogyan tudnám az így létrehozott objektumokat törölni?
Próbáltam a panel.clear() metódussal,de nem törölte a már létrehozott paneleket, csak melléjük rakta az újakat. -
cadtamas
tag
Ha megengeditek megosztom néhány gondolatom, illetve tapasztalatom a python tanulással kapcsolatban.
Hosszas hezitálás után, valamikor tavaly Októberben vágtam neki a dolognak.
Tabula rasa, vagyis semmilyen előképzettségem nem volt.
Úgy gondoltam és gondolom a mai napig, hogy a jövőben egy programozási nyelv ismerete annyira elvárt lesz, mint manapság egy idegen nyelv ismerete.
Hosszú távú célom, hogy saját játékokat, alkalmazásokat, illetve a Revit tervezőszoftverhez Add-in-eket fejleszthessek. (Azt a mai napig nem tudom, hogy milyen programnyelven kell csinálni, de attól még messze vagyok.)
Sajnos nem sok időt tudok a tanulásra áldozni (átlag napi fél, maximum másfél órát), és talán lassan is haladok, de legalább van időm újra és újra átismételni a nehezebben érthető dolgokat.
Gerard Swinnen-Tanuljunk meg programozni Python nyelven című könyve volt, amivel belevágtam a dologba. Igaz, hogy pyhon 2.7-hez íródott, de egyrészt nincs nagy különbség a 3-as verzióhoz képest, másrészt menet közben automatikusan megtanultam, hogy hol érdemes válaszok után kutakodnom. (Elsősorban itt a fórumon. )
Visszatérve a könyvre. Nagyon jól összeszedett, sok példával illusztrált, még több házi feladattal ellátott és Magyar nyelvű! Ami azért fontos, mert bár azt hittem tudok angolul, legalábbis megértem, amit mondanak nekem, de voltak fogalmak, amik elolvastam az angol nyelvű documentation-ben és csak pislogtam, mint pocok a lisztben, hogy MI?!?! A kötőszavakon kívül nem értettem meg semmit. Ne felejtsük, hogy olyan matematikai nyelvről beszélünk, ahol egyetlen kötőszó megváltoztathatja az egész mondat jelentését. Szóval, sokat segített a magyar nyelvű magyarázat.
Aztán eljutottam az objektumokig és lement a függöny. Értettem, hogy gőzgép, de fogalmam se volt mi hajcsa.
Gondoltam, biztos azért, mert egy 10 éves tankönyvből tanulok és más forrásból talán könnyebb lesz felfognom, úgyhogy megvettem az Udemy- n a legnépszerűbb pythonos zero-to-hero kurzust, hogy némi friss tudáshoz jussak. Még nem járok a kurzus végén, de ha ezzel kezdtem volna a tanulást, valószínűleg már rég feladtam volna.
Nagyon jó az anyag, az oktató is ügyesen magyaráz, de a Swinnen-féle előképzettség nélkül az első házi feladatnál úgy éreztem volna, hogy na "Itt kapjátok be a bokámat!". Nagyjából az van, hogy belök a csávó a mély vízbe azzal a felkiáltással, hogy írj egy Tic-tac-toe játékot. Ha valamit nem tudsz, olvasd el a hivatalos documentation-t. És igaz, hogy van mentőöv, de az nagyjából felér egy cheat kóddal, mert lemásolhatod a megoldást. Na bamm. A csávónál az a zero, aki pszeudo-nyelven tud írni programot és csak a python nyelvi sajátosságokat kell megtanítani neki. A helyzet fokozódott mikorra elértünk a objektum orientált programozáshoz, kaptam némi képet az alapokról, aztán írni kellett egy blackjack játékot. Sikerült megszülnöm (kb. nettó 15-20 óra alatt), de nem a kurzusnak köszönhetően. Ha valakit érdekel itt megtalálja (szívesen fogadom a kritikát).
Nagyjából itt járok most.
Szóval, aki most vág bele, ne aggódjon. Csökevényes angol tudással és a közepestől gyengébb matematikai alapokkal is sikerült elindulni, csak kitartás és elszántság kell. (meg némi fórumos hátszél. -
cadtamas
tag
válasz kezdosql #1154 üzenetére
1. feladat:
Létre kell hozni 3 üres listát.
Utána létre kell hozni egy while ciklust, amiből csak akkor lehet kilépni ha elérte a lista a 3. elemet és az input mezőben csak üres string van, (if,elif,else)
Itt érdemes a try és except metódusokat használni, hogy kiszűrd a nem megfelelő inputot
ha eléri a 9. elemet automatikusan kilép és átugrik a következő listára, egészen a végéig ( break)
Ha megvan mindhárom lista for és print metódussal tudod kilistázni
A listák elemeit a len metódus számolja meg.Ha valamit kihagytam, a többiek majd kijavítanak.
[ Szerkesztve ]
-
cadtamas
tag
Tudok ennél konkrétabban is segíteni, de ha utánanézel a parancsoknak és a működésüknek, szerintem menni fog.
-
cadtamas
tag
Tudnátok abban segíteni, hogy szeretném telepíteni a djangot, de korábban telepítettem egy udemy-os kurzushoz egy másik pythont (anaconda, a jupyter notebookhoz kell) és most amikor a pip-el telepítem a djangot szerintem az anacondához telepíti, mert nem találom a python mappájában.
Van rá mód (az anaconda törlése nélkül), hogy ismét a megfelelő helyre települjenek a modulok? -
cadtamas
tag
válasz cousin333 #1188 üzenetére
Áh, nekem nincsenek "régebbi" munkáim.
Új gyerek vagyok. A pythont gondoltam beugrónak a programozás világába.
A Gerard Swinnen könyvből tanulok lassan egy éve. Elég cammogósan, mert amit nem értek, annak többször is nekifutok. Párhuzamosan meg megcsináltam egy udemy-os kurzust. (ehhez kellett az anaconda)
Most járok a webprogramozós résznél, de a könyv szerintem annyira nem naprakész ebben a témában, hogy inkább elkezdtem egy djangos kurzust.Pycharm-ot használok és az meg úgy vettem észre, hogy nem az anacondát használja, hanem a sima pythont interpreternek.
Hogy jó alaposan tökönrúgjam magam elhatároztam, hogy belevágok egy golang kurzusba is.
Tegnap este elszöszöltem másfél órát, hogy megfelelő ide-t találjak a golanghoz.
Még mindig nem találtam. -
cadtamas
tag
válasz Orionhilles #1195 üzenetére
Próbáld így:
if (c**2) == (a**2 + b**2):
print ("This is a Pythagorean triangle.")
elif a<b+c and b<a+c and c<a+b:
print ("This is a triangle.")
else:
print ("This is NOT a triangle.") -
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.[ Szerkesztve ]
-
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]]] -
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... -
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 ]
-
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.
Új hozzászólás Aktív témák
- Kapnak egy rakás reklámot a Roblox játékosai
- Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
- Mobil flották
- A fociról könnyedén, egy baráti társaságban
- Napelem
- Így építsd a billentyűzeted!
- Álláskeresés, interjú, önéletrajz
- Politika
- Proxmox VE
- Honor Magic6 Pro - kör közepén számok
- További aktív témák...
- Gigabyte B450M DS3H + Ryzen 7 2700X alaplap+processzor (nem ad képet)
- Eladó gamer PC (Ryzen 5 7600X/16GB DDR5/512GB SSD/RTX 4070 Super)
- Eladó gamer PC (i5-6500/16GB DDR4/120GB SSD+320GB HDD/GTX 1050Ti)
- Eladó új gamer PC (i5-12400F/16GB DDR4/512GB SSD/RX 7600)
- Eladó gamer PC (i5-8500/16GB DDR4/256GB SSD+500GB HDD/GTX 1650 4GB)