Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. a=str(input()) #unosi se jednadžba sa znakovima a,b,c,d,-,+,(,),*,/ # npr. a+b*(c+d)-a/d
  2. A=set() #koliko ima razlicitih varijabli i koje su
  3.  
  4. for i in range(len(a)):
  5. if a[i]!="-" and a[i]!="+" and a[i]!="(" and a[i]!=")" and a[i]!="*" and a[i]!="/":
  6. A.add(a[i])
  7. A=list(A) #popis svih slova koja smo koristili sortiran abecedno
  8. for i in range(len(A)):
  9. for j in range(i+1,len(A)):
  10. if A[i]>A[j]:
  11. temp=A[i]
  12. A[i]=A[j]
  13. A[j]=temp
  14.  
  15. l=[] #lista vrijednosti koje se pripisuju varijablama a,b,c,d,e....
  16. for i in range(len(A)):
  17. x=str(input())
  18. l.append(x) # a je prva vrijednost u listi, b druga, c treca itd.
  19.  
  20. lista_a=[]
  21. for i in range(len(a)):
  22. lista_a.append(a[i])
  23.  
  24. lista_a_obrnuto=lista_a[:] #liste da bi dobili prve zagrade koje cemo rijesiti
  25. lista_a_obrnuto.reverse()
  26.  
  27. def operator(a,b,c):
  28. if c=="+":
  29. x=int(a)+int(b)
  30. elif c=="-":
  31. x=int(a)-int(b)
  32. elif c=="*":
  33. x=int(a)*int(b)
  34. elif c=="/":
  35. x=int(a)/int(b)
  36.  
  37. return str(x)
  38.  
  39.  
  40. def prvo_zagrade(str1,str2,A,svr):
  41. x=str1.index(")")
  42. y=len(str2)-1-str2.index("(")
  43. p=str1[(y+1):x] #lista p je lista koja u sebi sadrzi sve sto u sebi sadrzi prva zagrada koju rjesavamo
  44. while len(p)>1:
  45. if "*" in p:
  46. indeks=p.index("*")-1
  47. a=svr[A.index(p[p.index("*")-1])]
  48. b=svr[A.index(p[p.index("*")+1])]
  49. vrijednost=operator(a,b,p[p.index("*")]) #zamjena mnozenja u zagradi sa rjesenjem mnozenja
  50. p=p[:indeks] + p[indeks+3:]
  51. p.insert(indeks,vrijednost)
  52. elif "/" in p:
  53. indeks=p.index("/")-1
  54. a=svr[A.index(p[p.index("/")-1])]
  55. b=svr[A.index(p[p.index("/")+1])]
  56. vrijednost=operator(a,b,p[p.index("/")])
  57. p=p[:indeks] + p[indeks+3:]
  58. p.insert(indeks,vrijednost)
  59. elif "+" in p:
  60. indeks=p.index("+")-1
  61. a=svr[A.index(p[p.index("+")-1])]
  62. b=svr[A.index(p[p.index("+")+1])]
  63. vrijednost=operator(a,b,p[p.index("+")])
  64. p=p[:indeks] + p[indeks+3:]
  65. p.insert(indeks,vrijednost)
  66. elif "-" in p:
  67. indeks=p.index("-")-1
  68. a=svr[A.index(p[p.index("-")-1])]
  69. b=svr[A.index(p[p.index("-")+1])]
  70. vrijednost=operator(a,b,p[p.index("-")])
  71. p=p[:indeks] + p[indeks+3:]
  72. p.insert(indeks,vrijednost)
  73. vrijednost_p=p[0]
  74. str1=str1[:y]+str1[x+1:]
  75. str1.insert(y,vrijednost_p)
  76. return str1
  77.  
  78. def do_bez_zagrada(str1,str2,A,svr):
  79. while "(" in str1:
  80. str1=prvo_zagrade(str1,str2,A,svr)
  81. return str1 #str1 je sada oblika npr. a+b*c+d/a odnosno nema zagrade u sebi
  82.  
  83. lista_bez_zagrada=do_bez_zagrada(lista_a,lista_a_obrnuto,A,l)
  84. lista=lista_bez_zagrada[:]
  85. for i in range(len(lista)):
  86. for j in range(len(A)):
  87. if lista[i]==A[j]:
  88. lista[i]=l[j]
  89.  
  90.  
  91. while len(lista)>1:
  92. if "*" in lista:
  93. vrijednost=float(lista[lista.index("*")-1])*float(lista[lista.index("*")+1])
  94. indeks=lista.index("*")-1
  95. lista=lista[:indeks]+lista[indeks+3:]
  96. lista.insert(indeks,vrijednost)
  97. elif "/" in lista:
  98. vrijednost=float(lista[lista.index("/")-1])/float(lista[lista.index("/")+1])
  99. indeks=lista.index("/")-1
  100. lista=lista[:indeks]+lista[indeks+3:]
  101. lista.insert(indeks,vrijednost)
  102. if "+" in lista:
  103. vrijednost=float(lista[lista.index("+")-1])+float(lista[lista.index("+")+1])
  104. indeks=lista.index("+")-1
  105. lista=lista[:indeks]+lista[indeks+3:]
  106. lista.insert(indeks,vrijednost)
  107. if "-" in lista:
  108. vrijednost=float(lista[lista.index("-")-1])-float(lista[lista.index("-")+1])
  109. indeks=lista.index("-")-1
  110. lista=lista[:indeks]+lista[indeks+3:]
  111. lista.insert(indeks,vrijednost)
  112. print(round(lista[0],2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement