Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.17 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. import re
  6. cls = lambda clsed: print('\n' * clsed)
  7. formules = (
  8. "Q=L*m",
  9. "I=q/t",
  10. "I=U/R",
  11. "R=p*l/S"
  12. )
  13. pre = [
  14. 'да', 'г', 'к', 'М', 'Г', 'Т', 'П', 'Э', 'З', 'И',
  15. 'д', 'с', 'м', 'мк', 'н', 'п', 'ф', 'а', 'з', 'и'
  16. ]
  17. prek = [
  18. '**1', '**2', '**3', '**6', '**9', '**12', '**15', '**18', '**21', '**24',
  19. '**-1', '**-2', '**-3', '**-6', '**-9', '**-12', '**-15', '**-18', '**-21', '**-24'
  20. ]
  21. si = {'t' : 'c', 'I' : 'А', 'q' : 'Кл', 'Q' : 'Дж', 'L' : 'Дж/Кг', 'm' : 'кг', 'U' : 'В', 'R' : 'Ом',
  22. 'p' : 'Ом*мм2/м', 'S' : 'мм', 'l' : 'м'}
  23. def calc(input_str):
  24. global pre, prek
  25. input_str = input_str.split('=')
  26. input_str[0] = input_str[0].replace(' ', '')
  27. x = input_str[1]
  28. x = x.split(" ")
  29. x = list(filter(None, x))
  30. x[0] = eval(x[0])
  31. for i in range(0, len(pre)):
  32. if pre[i] + 'А' == x[1]:
  33. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  34. x[0] = str(x[0])
  35. x[1] = 'А'
  36. x[0] = str(round(float(x[0]), 6))
  37. break
  38. elif pre[i] + 'Ом' == x[1]:
  39. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  40. x[0] = str(x[0])
  41. x[1] = 'Ом'
  42. x[0] = str(round(float(x[0]), 6))
  43. break
  44. elif pre[i] + 'В' == x[1]:
  45. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  46. x[0] = str(x[0])
  47. x[1] = 'В'
  48. x[0] = str(round(float(x[0]), 6))
  49. break
  50. elif pre[i] + 'м' == x[1]:
  51. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  52. x[0] = str(x[0])
  53. x[1] = 'м'
  54. x[0] = str(round(float(x[0]), 6))
  55. break
  56. elif pre[i] + 'Кл' == x[1]:
  57. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  58. x[0] = str(x[0])
  59. x[1] = 'Кл'
  60. x[0] = str(round(float(x[0]), 6))
  61. break
  62. elif pre[i] + 'с' == x[1]:
  63. x[0] = eval(str(x[0]) + '*10'+ prek[i])
  64. x[0] = str(x[0])
  65. x[1] = 'с'
  66. x[0] = str(round(float(x[0]), 6))
  67. break
  68. elif 'мин' == x[1]:
  69. x[0] = eval(str(x[0]) + '*60')
  70. x[0] = str(x[0])
  71. x[1] = 'с'
  72. x[0] = str(round(float(x[0]), 6))
  73. break
  74. elif 'ч' == x[1]:
  75. x[0] = eval(str(x[0]) + '*3600')
  76. x[0] = str(x[0])
  77. x[1] = 'с'
  78. x[0] = str(round(float(x[0]), 6))
  79. break
  80. elif 'гр' == x[1]:
  81. x[0] = eval(str(x[0]) + '/1000')
  82. x[0] = str(x[0])
  83. x[1] = 'кг'
  84. x[0] = str(round(float(x[0]), 6))
  85. break
  86. elif 'т' == x[1]:
  87. x[0] = eval(str(x[0]) + '*1000')
  88. x[0] = str(x[0])
  89. x[1] = 'кг'
  90. x[0] = str(round(float(x[0]), 6))
  91. break
  92. else:
  93. x[0] = eval(str(x[0]))
  94. x[0] = str(x[0])
  95. if float(x[0]) % 1 == 0:
  96. x[0] = x[0].replace('.0', '')
  97. x[0] = int(x[0])
  98. x[0] = str(x[0])
  99. x = ' '.join(x)
  100. input_str[1] = x
  101. return '='.join(input_str)
  102. def express(formule, find):
  103. formule2 = formule.split('=')
  104. if len(formule) == 5:
  105. if '+' in formule:
  106. if formule2[1].find(find) == 0:
  107. formule = formule2[1][0] + '=' + formule2[0] + '+' + formule2[1][-1]
  108. if formule2[1].find(find) == 2:
  109. formule = formule2[1][-1] + '=' + formule2[1][0] + '-' + formule2[0]
  110. elif '-' in formule:
  111. if formule2[1].find(find) == 0:
  112. formule = formule2[1][0] + '=' + formule2[0] + '-' + formule2[1][-1]
  113. if formule2[1].find(find) == 2:
  114. formule = formule2[1][-1] + '=' + formule2[1][0] + '-' + formule2[0]
  115. elif '*' in formule:
  116. if formule2[1].find(find) == 0:
  117. formule = formule2[1][0] + '=' + formule2[0] + '/' + formule2[1][-1]
  118. if formule2[1].find(find) == 2:
  119. formule = formule2[1][-1] + '=' + formule2[0] + '/' + formule2[1][0]
  120. elif '/' in formule:
  121. if formule2[1].find(find) == 0:
  122. formule = formule2[1][0] + '=' + formule2[0] + '*' + formule2[1][-1]
  123. if formule2[1].find(find) == 2:
  124. formule = formule2[1][-1] + '=' + formule2[1][0] + '/' + formule2[0]
  125. elif len(formule) == 7:
  126. if '+' in formule:
  127. pass
  128. elif '/' in formule and '*' in formule:
  129. if formule2[1].find(find) == 0:
  130. formule = find + '=' + formule2[0] + '*' + formule2[1][4] + '/' + formule2[1][2]
  131. if formule2[1].find(find) == 2:
  132. formule = find + '=' + formule2[0] + '*' + formule2[1][4] + '/' + formule2[1][0]
  133. if formule2[1].find(find) == 4:
  134. formule = find + '=' + formule2[1][0] + "*" + formule2[1][2] + '/' + formule2[0]
  135. return formule
  136. def given():
  137. global si
  138. given_str, regiven_str = [], []
  139. i, wformule = 0, [0, 0, 0, 0]
  140. print("Дано:")
  141. while i <= 20:
  142. given_str.append(input())
  143. if '?' in given_str[i]:
  144. find = given_str[i].replace(' ', '')
  145. find = find.split('-')
  146. find = find[0]
  147. break
  148. regiven_str.append(calc(given_str[i]))
  149. if 'q' in regiven_str[i] or 't' in regiven_str[i]:
  150. wformule[1] += 1
  151. elif 'Q' in regiven_str[i] or 'm' in regiven_str[i] or 'l' in regiven_str[i]:
  152. wformule[0] += 1
  153. elif 'U' in regiven_str[i]:
  154. wformule[2] += 1
  155. elif 'I' in regiven_str[i]:
  156. wformule[2] += 1
  157. wformule[1] += 1
  158. elif 'p' in regiven_str or 'l' in regiven_str[i] or 'S' in regiven_str[i]:
  159. wformule[3] += 1
  160. elif 'R' in regiven_str[i]:
  161. wformule[3] += 1
  162. wformule[2] += 1
  163. i += 1
  164. for j in range(0, len(regiven_str)):
  165. s = regiven_str[j].split(' ')
  166. s = s[0]
  167. exec(s)
  168. if wformule[1] == 2:
  169. result_formule = express(formules[1], find)
  170. result_formule = result_formule.split('=')
  171. result = eval(result_formule[1])
  172. i = 1
  173. elif wformule[0] == 2:
  174. i = 0
  175. result_formule = express(formules[0], find)
  176. result_formule = result_formule.split('=')
  177. result = eval(result_formule[1])
  178. elif wformule[2] == 2:
  179. i = 2
  180. result_formule = express(formules[2], find)
  181. result_formule = result_formule.split('=')
  182. result = eval(result_formule[1])
  183. elif wformule[3] == 2:
  184. i = 3
  185. result_formule = express(formules[3], find)
  186. result_formule = result_formule.split('=')
  187. result = eval(result_formule[1])
  188. regiven_str2 = []
  189. regiven_str2 += regiven_str
  190. try:
  191. for lk in range(0, len(regiven_str)):
  192. test_regiven = regiven_str2[lk].replace(' ', '')
  193. test_given = given_str[lk].replace(' ', '')
  194. if test_given == test_regiven:
  195. del(regiven_str2[lk])
  196. lk -= 1
  197. except: pass
  198. print("СИ:\n" + '\n'.join(regiven_str2))
  199. if '='.join(result_formule) == formules[i]:
  200. print("Решение:\n" + formules[i])
  201. else:
  202. print("Решение:\n" + formules[i] + ' -> ' + '='.join(result_formule))
  203. for po in range(0, len(regiven_str)):
  204. sreg = regiven_str[po].split('=')
  205. exec(sreg[0] + '=' + "'" + sreg[1] + "'")
  206. if result > 0.00006:
  207. result = round(result, 4)
  208. else:
  209. result = round(result, 8)
  210. if len(result_formule[1]) == 3:
  211. print(result_formule[0] + '=' + str(eval(result_formule[1][0])) + result_formule[1][1] + str(eval(result_formule[1][2])) + ' = ' + str(result) + ' ' + si[find])
  212. elif len(result_formule[1]) == 5:
  213. print(result_formule[0] + '=' + str(eval(result_formule[1][0])) + result_formule[1][1] + str(eval(result_formule[1][2])) + result_formule[1][3] + eval(result_formule[1][4]) + ' = ' + str(result) + ' ' + si[find])
  214. print("Ответ: " + find + ' = ' + str(result) + ' ' + si[find])
  215. def start():
  216. while True:
  217. a = input("1. Начать писать через дано. 2. Посмотреть формулы\n ")
  218. if a == '1':
  219. given()
  220. elif a == '2':
  221. cls(100)
  222. print("""
  223. Формула Удельной Теплоты Плавления:
  224. Q = lambda*m
  225. где Q - это количество теплоты, lambda - удельная теплота правления, m - это масса.
  226. Формула Удельной Теплоты Парообразования:
  227. Q = L*m
  228. где Q - это количество теплоты, L - удельная теплота парообразования, m - это масса.
  229. Формула Силы Тока:
  230. I = q/t
  231. где I - это сила тока, q - это электрический разряд, t - это время
  232. """)
  233. if a == 'close':
  234. break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement