Advertisement
Guest User

Untitled

a guest
May 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.44 KB | None | 0 0
  1. class Polynomi:
  2. """
  3. Tämä on olio johon tallennetaan sanakirja, jossa ovat potenssit ja
  4. kertoimet. Tätä oliota ja sen methodeja kätetään sitten erilaisiin
  5. toimintoihin.
  6. """
  7.  
  8. def __init__(self, arvosanakirja):
  9. self.__arvosanakirja = arvosanakirja
  10.  
  11. def tulosta(self):
  12. """
  13. Tämä methdoi palauttaa tulostuksen, joka tehtävän annossa haluttiin
  14. kohtaan, jossa printataan tietyissä muistilokeroissa olevia polynomeja
  15. :return: palautus eli merkkijono, jossa polynomi
  16. """
  17.  
  18. polynomilista = []
  19. for z in sorted(self.__arvosanakirja):
  20. if self.__arvosanakirja[z] == 0:
  21. pass
  22. else:
  23. asd = str(self.__arvosanakirja[z]) + "x^" + str(z)
  24. polynomilista.append(asd)
  25. polynomilista = polynomilista[::-1]
  26. if polynomilista == []:
  27. polynomilista.append("0")
  28. palautus = " + ".join(polynomilista)
  29. return palautus
  30.  
  31. def plussa(self, toinensanakirja):
  32. """
  33. Tämä methodi lisää yhteen kaksi haluttua polynomia hyödyntäen uutta
  34. sanakirjaa sekä listaa.
  35. :param toinensanakirja:
  36. :return: palautus1, Eli palauttaa uuden polynomin
  37. """
  38. uusisanakirja = {}
  39. for x in toinensanakirja.__arvosanakirja:
  40. if x in self.__arvosanakirja:
  41. uusiarvo = int(self.__arvosanakirja[x]) + int(toinensanakirja.__arvosanakirja[x])
  42. uusisanakirja[x] = int(uusiarvo)
  43. else:
  44. uusisanakirja[x] = toinensanakirja.__arvosanakirja[x]
  45. for y in self.__arvosanakirja:
  46. if y in uusisanakirja:
  47. pass
  48. else:
  49. uusisanakirja[y] = self.__arvosanakirja[y]
  50.  
  51. lista1 = []
  52. for z in sorted(uusisanakirja):
  53. if uusisanakirja[z] == 0:
  54. pass
  55. else:
  56. asd = str(uusisanakirja[z]) + "x^" + str(z)
  57. lista1.append(asd)
  58. if lista1 == []:
  59. lista1.append("0")
  60.  
  61. lista1 = lista1[::-1]
  62. palautus1 = " + ".join(lista1)
  63.  
  64. return palautus1
  65.  
  66. def miinus(self, toinensanakirja):
  67. """
  68. Tämä methodi vähentää kaksi haluttua polynomia toisistaan samalla
  69. tavalla kuin plussa methodi.
  70. :param toinensanakirja:
  71. :return: palautus2, eli uusi polynomi
  72. """
  73.  
  74. uusisanakirja1 = {}
  75. for x in toinensanakirja.__arvosanakirja:
  76. if x in self.__arvosanakirja:
  77. uusi = int(self.__arvosanakirja[x]) - \
  78. int(toinensanakirja.__arvosanakirja[x])
  79. uusisanakirja1[x] = int(uusi)
  80. else:
  81. uusisanakirja1[x] = (-1) * toinensanakirja.__arvosanakirja[x]
  82. for y in self.__arvosanakirja:
  83. if y in uusisanakirja1:
  84. pass
  85. else:
  86. uusisanakirja1[y] = self.__arvosanakirja[y]
  87.  
  88. lista1 = []
  89. for z in sorted(uusisanakirja1):
  90. if uusisanakirja1[z] == 0:
  91. pass
  92. else:
  93. asd = str(uusisanakirja1[z]) + "x^" + str(z)
  94. lista1.append(asd)
  95. if lista1 == []:
  96. lista1.append("0")
  97.  
  98. lista1 = lista1[::-1]
  99. palautus2 = " + ".join(lista1)
  100. return palautus2
  101.  
  102.  
  103. def kerto(self,toka):
  104. """
  105. Tämä methodi kertoo kaksi haluttua polynomia keskenään. Käyttää hyväksi
  106. sanakirjoja ja listoja.
  107. :param toka:
  108. :return: palautus, eli uusi polynomi
  109. """
  110. uusisanakirja = {}
  111. for x in self.__arvosanakirja:
  112. for y in toka.__arvosanakirja:
  113. uusi_potenssi = int(x) + int(y)
  114. uusi_kerroin = int(self.__arvosanakirja[x]) * \
  115. int(toka.__arvosanakirja[y])
  116. if uusi_kerroin == 0:
  117. pass
  118. elif int(uusi_potenssi) in uusisanakirja:
  119. uusisanakirja[int(uusi_potenssi)] =\
  120. int(uusisanakirja[uusi_potenssi]) + int(uusi_kerroin)
  121. else:
  122. uusisanakirja[int(uusi_potenssi)] = int(uusi_kerroin)
  123.  
  124. lista1 = []
  125. for z in sorted(uusisanakirja):
  126. asd = str(uusisanakirja[z]) + "x^" + str(z)
  127. lista1.append(asd)
  128. if lista1 == []:
  129. lista1.append("0")
  130.  
  131. lista1 = lista1[::-1]
  132. palautus = " + ".join(lista1)
  133. return palautus
  134.  
  135.  
  136. def luku(muuttuja):
  137. """
  138. Tämä funktio lukee lähdetiedoston ja palauttaa sanakirja, jossa on sisällä
  139. toinen sanakirja, joka on tallennettu olioon., jos ei voi lukea palauttaa
  140. arvon vaara, jolla sitten kerrotaan ongelmasta.
  141. :param muuttuja:
  142. :return: sanakirja, vaara
  143. """
  144. sanakirja = {}
  145. try:
  146. i = 0
  147. tiedosto = open(muuttuja, "r")
  148. for rivi in tiedosto:
  149. rivi = rivi.rstrip()
  150. rivi1 = rivi.split(";")
  151. sanakirja2 = {}
  152. for x in rivi1:
  153. uusi = x.split(" ")
  154. sanakirja2[int(uusi[1])] = int(uusi[0])
  155. sanakirja[i] = Polynomi(sanakirja2)
  156. i += 1
  157.  
  158. return sanakirja
  159. except OSError:
  160. print("Error in reading the file.")
  161. return "vaara"
  162.  
  163.  
  164. def main():
  165. tiedoston_nimi = input("Enter file name: ")
  166. tiedosto = luku(tiedoston_nimi)
  167. if tiedosto == "vaara":
  168. return
  169. syote = ""
  170. while syote != "quit":
  171. syote = input("> ")
  172. syote2 = syote.split(" ")
  173. if syote != "quit":
  174. if len(syote2) == 3:
  175. if syote2[0].isdigit() and syote2[2].isdigit():
  176. if syote2[1] in ["+", "*", "-"]:
  177.  
  178. if syote2[1] == "+":
  179. if int(syote2[0]) >= len(tiedosto):
  180. print("Error: the given memory location "
  181. "does not exist.")
  182.  
  183. elif int(syote2[2]) >= len(tiedosto):
  184. print("Error: the given memory location does "
  185. "not exist.")
  186.  
  187. else:
  188. print("Memory location {}:".format(syote2[0]),
  189. tiedosto[int(syote2[0])].tulosta())
  190. print("Memory location {}:".format(syote2[2]),
  191. tiedosto[int(syote2[2])].tulosta())
  192. summa = tiedosto[int(syote2[0])].plussa\
  193. (tiedosto[int(syote2[2])])
  194. print("The simplified result:")
  195. print(summa)
  196.  
  197. elif syote2[1] == "-":
  198. if int(syote2[0]) > len(tiedosto):
  199. print("Error: the given memory location does "
  200. "not exist.")
  201.  
  202. if int(syote2[2]) > len(tiedosto):
  203. print("Error: the given memory location does "
  204. "not exist.")
  205.  
  206. else:
  207. print("Memory location {}:".format(syote2[0]),
  208. tiedosto[int(syote2[0])].tulosta())
  209. print("Memory location {}:".format(syote2[2]),
  210. tiedosto[int(syote2[2])].tulosta())
  211. erotus = tiedosto[int(syote2[0])].miinus\
  212. (tiedosto[int(syote2[2])])
  213. print("The simplified result:")
  214. print(erotus)
  215.  
  216. elif syote2[1] == "*":
  217. if int(syote2[0]) > len(tiedosto):
  218. print("Error: the given memory location does "
  219. "not exist.")
  220.  
  221. if int(syote2[2]) > len(tiedosto):
  222. print("Error: the given memory location does "
  223. "not exist.")
  224.  
  225. else:
  226. print("Memory location {}:".format(syote2[0]),
  227. tiedosto[int(syote2[0])].tulosta())
  228. print("Memory location {}:".format(syote2[2]),
  229. tiedosto[int(syote2[2])].tulosta())
  230. tulo = tiedosto[int(syote2[0])].\
  231. kerto(tiedosto[int(syote2[2])])
  232. print("The simplified result:")
  233. print(tulo)
  234.  
  235. else:
  236. print("Error: entry format is memory_location "
  237. "operation memory_location.")
  238. else:
  239. print("Error: unknown operator.")
  240. else:
  241. print("Error: entry format is memory_location "
  242. "operation memory_location.")
  243. else:
  244. print("Error: entry format is memory_location "
  245. "operation memory_location.")
  246.  
  247. print("Bye bye!")
  248.  
  249.  
  250. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement