Advertisement
reza0310

Devoirs NSI

Nov 23rd, 2020
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. class PILE():
  2. def __init__(self):
  3. self.contenu = []
  4.  
  5. def empiler(self, elements):
  6. self.contenu += [elements]
  7. #print(self.contenu)
  8.  
  9. def depiler(self):
  10. return self.contenu.pop(len(self.contenu)-1)
  11.  
  12. def haut_de_pile(self):
  13. return self.contenu[-2], self.contenu[-1]
  14.  
  15. def retourner(self):
  16. self.contenu.reverse()
  17.  
  18. def simplifer_haut(self):
  19. num2, op, num1 = self.depiler(), self.depiler(), self.depiler()
  20. print("Calcul de "+str(num1)+" "+str(op)+" "+str(num2)+" effectué.")
  21. if op == "*":
  22. self.empiler(num1*num2)
  23. elif op == "/":
  24. self.empiler(num1/num2)
  25. elif op == "-":
  26. self.empiler(num1-num2)
  27. else:
  28. self.empiler(num1+num2)
  29.  
  30. def simplifer_haut_nbres_pas_inverses(self):
  31. num1, op, num2 = self.depiler(), self.depiler(), self.depiler()
  32. print("Calcul de "+str(num1)+" "+str(op)+" "+str(num2)+" effectué.")
  33. if op == "*":
  34. self.empiler(num1*num2)
  35. elif op == "/":
  36. self.empiler(num1/num2)
  37. elif op == "-":
  38. self.empiler(num1-num2)
  39. else:
  40. self.empiler(num1+num2)
  41.  
  42. expression = input("Entrez l'expression: ") #[x for x in input("Entrez l'expression: ") if x != " "] #Séparer tou les caractères
  43. expression_decoupee = []
  44. pile = PILE()
  45. buffer = ""
  46. chiffres = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
  47. for x in expression:
  48. if x not in chiffres and buffer == "" and x != " ":
  49. expression_decoupee.append(x)
  50. elif x in chiffres:
  51. buffer += x
  52. elif x != " ":
  53. expression_decoupee.append(int(buffer))
  54. buffer = ""
  55. expression_decoupee.append(x)
  56. if buffer != "":
  57. expression_decoupee.append(int(buffer))
  58.  
  59. print(expression_decoupee)
  60.  
  61. i=0
  62. while i < len(expression_decoupee):
  63. pile.empiler(expression_decoupee[i])
  64. if (expression_decoupee[i] == "*" or expression_decoupee[i] == "/") and expression_decoupee[i+1] != "(":
  65. pile.empiler(expression_decoupee[i+1])
  66. pile.simplifer_haut()
  67. i += 1
  68. elif expression_decoupee[i] == ")":
  69. pile.depiler()
  70. while pile.haut_de_pile()[0] != "(":
  71. pile.simplifer_haut()
  72. save = pile.depiler()
  73. pile.depiler()
  74. pile.empiler(save)
  75. i += 1
  76. #print("Passage hors priorités")
  77. pile.retourner()
  78. while len(pile.contenu) > 1:
  79. pile.simplifer_haut_nbres_pas_inverses()
  80.  
  81. print("Le résultat est "+str(pile.contenu[0]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement