» »

kalkulator v pythonu

kalkulator v pythonu

ktka ::

Rabim pomoč. Sestavila sem to funkcijo. Pa ne znam sprogramirat da bi delali še ukazi kot so npr.kvadratni koren, kvadriranje, vejica...
from tkinter import *
import math
niz = ''

izraz = []

class Kalkulator(Frame):
    def __init__(self):
        global rezultat
        okno = Tk() #ustvarimo okno
        okno.title('Kalkulator') #naslov okna
        Frame.__init__(self)
        
        rezultat = Entry()
        rezultat.pack(side = TOP) #ustvarimo vnosno okno
        #rezultat.pack(side = TOP)
       
        

        seznamGumbov = ['C',chr(177),chr(8730),'1','2','3','4','5','6','7','8','9','0',',','x^2','%','1/x','(',')']
        seznamOperacij = ['+','-','*','/','=']
        
        stolpec = 0
        vrstica = 1

        #postavitev gumbov v mreži
        for x in seznamGumbov:
            poteza = lambda y = x: klik(y)
            Button(self,text = x,width = 5,relief = 'ridge',command = poteza).grid(row = vrstica,column = stolpec)
            stolpec += 1
            if stolpec > 2:
                stolpec = 0
                vrstica += 1

        stolpec = 4
        vrstica = 1
        #postavitev gumbov, na katerih so operacije
        for x in seznamOperacij:
            poteza = lambda y = x: klik(y)
            Button(self,text = x,width = 5,relief = 'ridge',command = poteza).grid(row = vrstica,column = stolpec)
            vrstica += 1

        #lamda je diskretna funkcija, ki ni definirana kot def(...), ampak
        #kot lambda(spremenljivka). Pove kaj naj spremenljivka zavzame


        def klik(tipka):
            global rezultat,niz,izraz
            
            
            #z funkcijo global dosežemo, da je spremenljivka poznana v
            #celotnem program in ne samo znotraj neke definicije

            if tipka == '=':
                try:
                    končniRezultat = rezultat.get() #niz

         
                    odgovor = eval(končniRezultat)
                    rezultat.delete(0,END)
                    rezultat.insert(0,odgovor)
                    
                except:
                    #končniRezultat = rezultat.get()
                    #rezultat.itemconfig(rezultat,text = 'nemogoče')
                    pass
                    
                    #raise ZeroDivisionError
                    #rezultat.delete(0,END)
                    #rezultat.insert(0,'Deljenje z nič ni možno.')
                #except:
                  #  rezultat.delete(0,END)
                   # rezultat.insert(0,'0')
                   
            #tipka za brisanje
            elif tipka == 'C':
                rezultat.delete(0,END)
                
            #tipka za negativno število
            elif tipka == chr(177):
                if rezultat.get()[0] == '-':
                    rezultat.delete(0)
                else:
                    rezultat.insert(0,'-')
            #ulomek
            elif tipka == '1/x':
                
                rezultat.insert(END,'1/')
               
            #kvadratni koren
            elif tipka == chr(8730):
                rezultat.insert(END,chr(8730)+'(')
                niz == '*math.sqrt('
                
                
                
            
            #kvadriranje      
            elif tipka == 'x^2':
                rezultat.insert('^2')
                rezultat.get('**2')
                
                
            #procent
            elif tipka == '%':
                rezultat.insert(END,'*100')
                
            #vejica  
            elif tipka == ',':
                rezultat.insert(END,',')
                #izraz.insert
            else:
                rezultat.insert(END,tipka)

      


        def spoji(s):
            global niz,izračun
            for a in izračun:
                niz += a
            return niz
            
        
       
            

if __name__ == '__main__':
    okno = Kalkulator()
    okno.pack()
    okno.mainloop()


-- Zaradi berljivosti prosim uporabljaj st.koda značke. --moderator
  • spremenil: Mavrik ()

korenje3 ::

šolski projekt?

sicer nimam pojma o pythonu, ampak vidim da dajaš vse podatke v array "rezultat" in potem to spojiš v niz in evaluiraš?
takih reči se je sicer dobro izohibat zaradi ranljivosti kode... v omrežnih sistemih.

Sicer ne vem kako bi to izgledalo, ampak po moje je najbolje če sproti kalkuliraš zadevo v posebni spremenljivki. Sicer potem zna biti problem z oklepaji in rekurzivnostjo s katerim je preveč dela.

tam je problem z math.sqrt( ker potem ne veš kdaj pride zaklepaj. V bistvu je bolje če dodaš samo match.sqrt ter potem ročno še oklepaje oziroma samodejno doda oklepaje, če naslednji znak ni oklepaj.
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W

Zgodovina sprememb…

  • spremenil: korenje3 ()

FrEaKmAn ::

poglej po forumu.. smo že parkrat reševali


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162699 (929) rnla1973
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10317464 (8212) black ice
»

[Python] Tutoriali za začetnika v Notepad++ (strani: 1 2 )

Oddelek: Programiranje
7915682 (12776) black ice
»

python -slovar

Oddelek: Programiranje
223050 (2029) Valex86
»

[Access] iskanje z formom / querijem

Oddelek: Programiranje
61294 (1218) zagy

Več podobnih tem