Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- a=str(input()) #unosi se jednadžba sa znakovima a,b,c,d,-,+,(,),*,/ # npr. a+b*(c+d)-a/d
- A=set() #koliko ima razlicitih varijabli i koje su
- for i in range(len(a)):
- if a[i]!="-" and a[i]!="+" and a[i]!="(" and a[i]!=")" and a[i]!="*" and a[i]!="/":
- A.add(a[i])
- A=list(A) #popis svih slova koja smo koristili sortiran abecedno
- for i in range(len(A)):
- for j in range(i+1,len(A)):
- if A[i]>A[j]:
- temp=A[i]
- A[i]=A[j]
- A[j]=temp
- l=[] #lista vrijednosti koje se pripisuju varijablama a,b,c,d,e....
- for i in range(len(A)):
- x=str(input())
- l.append(x) # a je prva vrijednost u listi, b druga, c treca itd.
- lista_a=[]
- for i in range(len(a)):
- lista_a.append(a[i])
- lista_a_obrnuto=lista_a[:] #liste da bi dobili prve zagrade koje cemo rijesiti
- lista_a_obrnuto.reverse()
- def operator(a,b,c):
- if c=="+":
- x=int(a)+int(b)
- elif c=="-":
- x=int(a)-int(b)
- elif c=="*":
- x=int(a)*int(b)
- elif c=="/":
- x=int(a)/int(b)
- return str(x)
- def prvo_zagrade(str1,str2,A,svr):
- x=str1.index(")")
- y=len(str2)-1-str2.index("(")
- p=str1[(y+1):x] #lista p je lista koja u sebi sadrzi sve sto u sebi sadrzi prva zagrada koju rjesavamo
- while len(p)>1:
- if "*" in p:
- indeks=p.index("*")-1
- a=svr[A.index(p[p.index("*")-1])]
- b=svr[A.index(p[p.index("*")+1])]
- vrijednost=operator(a,b,p[p.index("*")]) #zamjena mnozenja u zagradi sa rjesenjem mnozenja
- p=p[:indeks] + p[indeks+3:]
- p.insert(indeks,vrijednost)
- elif "/" in p:
- indeks=p.index("/")-1
- a=svr[A.index(p[p.index("/")-1])]
- b=svr[A.index(p[p.index("/")+1])]
- vrijednost=operator(a,b,p[p.index("/")])
- p=p[:indeks] + p[indeks+3:]
- p.insert(indeks,vrijednost)
- elif "+" in p:
- indeks=p.index("+")-1
- a=svr[A.index(p[p.index("+")-1])]
- b=svr[A.index(p[p.index("+")+1])]
- vrijednost=operator(a,b,p[p.index("+")])
- p=p[:indeks] + p[indeks+3:]
- p.insert(indeks,vrijednost)
- elif "-" in p:
- indeks=p.index("-")-1
- a=svr[A.index(p[p.index("-")-1])]
- b=svr[A.index(p[p.index("-")+1])]
- vrijednost=operator(a,b,p[p.index("-")])
- p=p[:indeks] + p[indeks+3:]
- p.insert(indeks,vrijednost)
- vrijednost_p=p[0]
- str1=str1[:y]+str1[x+1:]
- str1.insert(y,vrijednost_p)
- return str1
- def do_bez_zagrada(str1,str2,A,svr):
- while "(" in str1:
- str1=prvo_zagrade(str1,str2,A,svr)
- return str1 #str1 je sada oblika npr. a+b*c+d/a odnosno nema zagrade u sebi
- lista_bez_zagrada=do_bez_zagrada(lista_a,lista_a_obrnuto,A,l)
- lista=lista_bez_zagrada[:]
- for i in range(len(lista)):
- for j in range(len(A)):
- if lista[i]==A[j]:
- lista[i]=l[j]
- while len(lista)>1:
- if "*" in lista:
- vrijednost=float(lista[lista.index("*")-1])*float(lista[lista.index("*")+1])
- indeks=lista.index("*")-1
- lista=lista[:indeks]+lista[indeks+3:]
- lista.insert(indeks,vrijednost)
- elif "/" in lista:
- vrijednost=float(lista[lista.index("/")-1])/float(lista[lista.index("/")+1])
- indeks=lista.index("/")-1
- lista=lista[:indeks]+lista[indeks+3:]
- lista.insert(indeks,vrijednost)
- if "+" in lista:
- vrijednost=float(lista[lista.index("+")-1])+float(lista[lista.index("+")+1])
- indeks=lista.index("+")-1
- lista=lista[:indeks]+lista[indeks+3:]
- lista.insert(indeks,vrijednost)
- if "-" in lista:
- vrijednost=float(lista[lista.index("-")-1])-float(lista[lista.index("-")+1])
- indeks=lista.index("-")-1
- lista=lista[:indeks]+lista[indeks+3:]
- lista.insert(indeks,vrijednost)
- print(round(lista[0],2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement