5digit commited on
Commit
98f504d
·
verified ·
1 Parent(s): 5f54cf1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +372 -0
app.py ADDED
@@ -0,0 +1,372 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ def calculate_masses():
4
+ # 1. Молекулы фуллерена C60
5
+ mass_c60_mg = 720 * 1000 # мг
6
+
7
+ # 2. Три молекулы кофеина C8H10O2N4
8
+ mass_coffee_kg = (194 * 3) / 1000 # кг
9
+
10
+ # 3. Катион аммония NH4+
11
+ mass_nh4_g = 18 # г
12
+
13
+ # 4. Анион SO4^2-
14
+ mass_so4_g = 96 # г
15
+
16
+ return mass_c60_mg, mass_coffee_kg, mass_nh4_g, mass_so4_g
17
+
18
+ def main():
19
+ st.title("Расчет массы молекул")
20
+
21
+ c60, coffee, nh4, so4 = calculate_masses()
22
+
23
+ st.write(f"🌟 Масса молекулы фуллерена C60: {c60} мг")
24
+ st.write(f"☕ Масса трех молекул кофеина C8H10O2N4: {coffee:.3f} кг")
25
+ st.write(f"🔋 Масса катиона аммония NH4+: {nh4} г")
26
+ st.write(f"⚡ Масса аниона SO4^2-: {so4} г")
27
+
28
+ def calculate_atoms():
29
+ # Константы
30
+ mass_K = 39.1 # г/моль
31
+ mass_Na = 22.99 # г/моль
32
+ Avogadro_number = 6.022e23 # атомов/моль
33
+
34
+ # Масса одного атома K
35
+ mass_per_atom_K = mass_K / Avogadro_number
36
+
37
+ # Масса 300 атомов K
38
+ mass_300_K = 300 * mass_per_atom_K
39
+
40
+ # Масса одного атома Na
41
+ mass_per_atom_Na = mass_Na / Avogadro_number
42
+
43
+ # Количество атомов Na, имеющих такую же массу
44
+ num_atoms_Na = mass_300_K / mass_per_atom_Na
45
+
46
+ return num_atoms_Na
47
+
48
+ def main():
49
+ st.title("Расчет количества атомов Na")
50
+
51
+ num_atoms_Na = calculate_atoms()
52
+
53
+ st.write(f"🔢 Количество атомов Na в порции, имеющей такую же массу, как и масса 300 атомов K: {int(num_atoms_Na)} атомов")
54
+
55
+ def calculate_molecules_and_atoms():
56
+ N_A = 6.022e23 # Число Авогадро
57
+
58
+ # 1) Вода
59
+ V_water = 1.2 # см³
60
+ density_water = 1.0 # г/см³
61
+ mass_water = V_water * density_water # г
62
+ moles_water = mass_water / 18.0 # г/моль
63
+ molecules_water = moles_water * N_A
64
+
65
+ # 2) Бензол
66
+ V_benzene = 5.0 # см³
67
+ density_benzene = 0.8 # г/см³
68
+ mass_benzene = V_benzene * density_benzene # г
69
+ moles_benzene = mass_benzene / 78.0 # г/моль
70
+ molecules_benzene = moles_benzene * N_A
71
+
72
+ # 3) Цинк
73
+ V_zinc = 2.0 # см³
74
+ density_zinc = 7.1 # г/см³
75
+ mass_zinc = V_zinc * density_zinc # г
76
+ moles_zinc = mass_zinc / 65.4 # г/моль
77
+ atoms_zinc = moles_zinc * N_A
78
+
79
+ # 4) Магний
80
+ mass_magnesium = 3.0 # г
81
+ moles_magnesium = mass_magnesium / 24.3 # г/моль
82
+ atoms_magnesium = moles_magnesium * N_A
83
+
84
+ return {
85
+ "molecules_water": molecules_water,
86
+ "molecules_benzene": molecules_benzene,
87
+ "atoms_zinc": atoms_zinc,
88
+ "atoms_magnesium": atoms_magnesium
89
+ }
90
+
91
+ def main():
92
+ st.title("Расчет числа молекул и атомов")
93
+
94
+ results = calculate_molecules_and_atoms()
95
+
96
+ st.write(f"💧 Количество молекул в 1,2 см³ воды: {int(results['molecules_water'])} молекул")
97
+ st.write(f"🧪 Количество молекул в 5,0 см³ бензола: {int(results['molecules_benzene'])} молекул")
98
+ st.write(f"🔩 Количество атомов в 2 см³ цинка: {int(results['atoms_zinc'])} атомов")
99
+ st.write(f"🔧 Количество атомов в 3,0 г магния: {int(results['atoms_magnesium'])} атомов")
100
+
101
+ def calculate_water_fraction():
102
+ # Молекулярные массы
103
+ mol_w_h2o = 18.0 # г/моль
104
+ compounds = {
105
+ "CuSO4 · 5H2O": (159.5, 5 * mol_w_h2o),
106
+ "AlNH4(SO4)2 · 12H2O": (132.1, 12 * mol_w_h2o),
107
+ "FeSO4 · 7H2O": (151.0, 7 * mol_w_h2o),
108
+ "Na2SO4 · 10H2O": (142.0, 10 * mol_w_h2o)
109
+ }
110
+
111
+ results = {}
112
+ for name, (molar_mass_salt, mass_water) in compounds.items():
113
+ total_mass = molar_mass_salt + mass_water
114
+ water_fraction = (mass_water / total_mass) * 100
115
+ results[name] = water_fraction
116
+
117
+ return results
118
+
119
+ def main():
120
+ st.title("Расчет массовой доли воды в кристаллогидратах")
121
+
122
+ results = calculate_water_fraction()
123
+
124
+ for name, fraction in results.items():
125
+ st.write(f"{name}: {fraction:.2f}% воды 💧")
126
+
127
+ def calculate_masses():
128
+ # Живое приложение расчета
129
+ elements = {}
130
+
131
+ # 1. Масса железа в магнетите Fe3O4
132
+ M_Fe = 55.85
133
+ M_O = 16.0
134
+ M_Fe3O4 = 3 * M_Fe + 4 * M_O
135
+ mass_magnetite = 330
136
+ iron_mass = (3 * M_Fe / M_Fe3O4) * mass_magnetite
137
+ elements['Железо в 330 г магнетита Fe3O4'] = iron_mass
138
+
139
+ # 2. Масса серы в Na2SO4
140
+ M_Na = 22.99
141
+ M_S = 32.07
142
+ M_Na2SO4 = 2 * M_Na + M_S + 4 * M_O
143
+ mass_Na2SO4 = 2.80
144
+ sulfur_mass = (M_S / M_Na2SO4) * mass_Na2SO4
145
+ elements['Сера в 2,80 г Na2SO4'] = sulfur_mass
146
+
147
+ # 3. Масса фосфора в Ca3(PO4)2
148
+ M_Ca = 40.08
149
+ M_P = 30.97
150
+ M_Ca3PO42 = 3 * M_Ca + 2 * (M_P + 4 * M_O)
151
+ mass_Ca3PO42 = 3.10
152
+ phosphorus_mass = (2 * M_P / M_Ca3PO42) * mass_Ca3PO42
153
+ elements['Фосфор в 3,10 г Ca3(PO4)2'] = phosphorus_mass
154
+
155
+ # 4. Масса азота в Fe(NO3)3
156
+ M_N = 14.01
157
+ M_FeNO3_3 = M_Fe + 3 * (M_N + 3 * M_O)
158
+ mass_FeNO3_3 = 4.70
159
+ nitrogen_mass = (3 * M_N / M_FeNO3_3) * mass_FeNO3_3
160
+ elements['Азот в 4,70 г Fe(NO3)3'] = nitrogen_mass
161
+
162
+ return elements
163
+
164
+ def main():
165
+ st.title("Расчет массы элементов в соединениях")
166
+
167
+ results = calculate_masses()
168
+
169
+ for description, mass in results.items():
170
+ st.write(f"{description}: {mass:.2f} г")
171
+
172
+ def calculate_mass_fraction():
173
+ # Константы
174
+ M_K = 39.10 # г/моль
175
+ M_N = 14.01 # г/моль
176
+ M_O = 16.00 # г/моль
177
+ M_C = 12.01 # г/моль
178
+
179
+ # Молекулярная масса KNO₃
180
+ M_KNO3 = M_K + M_N + 3 * M_O # = 85.01 г/моль
181
+
182
+ # Молекулярная масса K₂CO₃
183
+ M_K2CO3 = 2 * M_K + M_C + 3 * M_O # = 138.21 г/моль
184
+
185
+ # Массы соединений
186
+ mass_KNO3 = 25.25
187
+ mass_K2CO3 = 41.4
188
+
189
+ # Количество атомов К
190
+ m_K_KNO3 = (mass_KNO3 / M_KNO3) * 1 * M_K # масса K из KNO₃
191
+ m_K_K2CO3 = (mass_K2CO3 / M_K2CO3) * 2 * M_K # масса K из K2CO3
192
+
193
+ # Общая масса смеси
194
+ total_mass = mass_KNO3 + mass_K2CO3
195
+
196
+ # Общая масса K
197
+ total_K = m_K_KNO3 + m_K_K2CO3
198
+
199
+ # Массовая доля K
200
+ mass_fraction_K = total_K / total_mass * 100 # в процентах
201
+
202
+ return mass_fraction_K
203
+
204
+ def main():
205
+ st.title("Расчет массовой доли атомов калия в смеси")
206
+
207
+ mass_fraction = calculate_mass_fraction()
208
+
209
+ st.write(f"🔬 Массовая доля атомов калия в смеси: {mass_fraction:.2f}%")
210
+
211
+ def calculate_mass_and_moles():
212
+ # Молекулярные массы
213
+ M_P = 30.97 # г/моль
214
+ M_O = 16.00 # г/моль
215
+ M_S = 32.07 # г/моль
216
+
217
+ M_P2O5 = 2 * M_P + 5 * M_O # = 141.94 г/моль
218
+ M_SO3 = M_S + 3 * M_O # = 80.07 г/моль
219
+
220
+ # Общая масса смеси
221
+ total_mass = 26.2 # г
222
+ mass_fraction_P = 0.236 # массовая доля фосфора
223
+
224
+ # Масса фосфора в смеси
225
+ mass_P = mass_fraction_P * total_mass
226
+
227
+ # Уравнения:
228
+ # 1) x + y = 26.2 (где x - масса P2O5, y - масса SO3)
229
+ # 2) (2 * M_P / M_P2O5) * x = mass_P
230
+
231
+ # Выразим y через x: y = 26.2 - x
232
+ # Подставим в второе уравнение:
233
+ # (2 * M_P / M_P2O5) * x = mass_P
234
+
235
+ # Решаем:
236
+ x = (mass_P * M_P2O5) / (2 * M_P) # масса P2O5
237
+ y = total_mass - x # масса SO3
238
+
239
+ # Количества вещества
240
+ n_P2O5 = x / M_P2O5 # моль P2O5
241
+ n_SO3 = y / M_SO3 # моль SO3
242
+
243
+ return x, y, n_P2O5, n_SO3
244
+
245
+ def main():
246
+ st.title("Расчет химического количества и масс веществ в смеси")
247
+
248
+ mass_P2O5, mass_SO3, moles_P2O5, moles_SO3 = calculate_mass_and_moles()
249
+
250
+ st.write(f"⚗️ Масса P₂O₅: {mass_P2O5:.2f} г")
251
+ st.write(f"⚗️ Масса SO₃: {mass_SO3:.2f} г")
252
+ st.write(f"🔬 Количество вещества P₂O₅: {moles_P2O5:.2f} моль")
253
+ st.write(f"🔬 Количество вещества SO₃: {moles_SO3:.2f} моль")
254
+
255
+ def calculate_empirical_formula():
256
+ # Массовые доли элементов
257
+ mass_percent_C = 68.85
258
+ mass_percent_H = 4.92
259
+ mass_percent_O = 26.23
260
+
261
+ # Атомные массы
262
+ M_C = 12.01 # г/моль
263
+ M_H = 1.008 # г/моль
264
+ M_O = 16.00 # г/моль
265
+
266
+ # Количество молей
267
+ n_C = mass_percent_C / M_C
268
+ n_H = mass_percent_H / M_H
269
+ n_O = mass_percent_O / M_O
270
+
271
+ # Минимальное количество молей
272
+ min_n = min(n_C, n_H, n_O)
273
+
274
+ # Нахождение целочисленных коэффициентов
275
+ formula_C = n_C / min_n
276
+ formula_H = n_H / min_n
277
+ formula_O = n_O / min_n
278
+
279
+ # Округление до ближайших целых
280
+ formula_C = round(formula_C)
281
+ formula_H = round(formula_H)
282
+ formula_O = round(formula_O)
283
+
284
+ return formula_C, formula_H, formula_O
285
+
286
+ def main():
287
+ st.title("Определение эмпирической формулы вещества")
288
+
289
+ formula_C, formula_H, formula_O = calculate_empirical_formula()
290
+
291
+ st.write(f"🧪 Эмпирическая формула вещества: C{formula_C}H{formula_H}O{formula_O}")
292
+
293
+
294
+ def calculate_empirical_formula():
295
+ # Данные задачи
296
+ mass_P = 6.2 # г
297
+ mass_oxide = 14.2 # г
298
+
299
+ # Атомные массы
300
+ M_P = 30.97 # г/моль
301
+ M_O = 16.00 # г/моль
302
+
303
+ # Масса кислорода
304
+ mass_O = mass_oxide - mass_P
305
+
306
+ # Количество молей
307
+ n_P = mass_P / M_P
308
+ n_O = mass_O / M_O
309
+
310
+ # Минимальное количество молей
311
+ min_n = min(n_P, n_O)
312
+
313
+ # Нахождение целочисленных коэффициентов
314
+ formula_P = n_P / min_n
315
+ formula_O = n_O / min_n
316
+
317
+ # Округление до ближайших целых
318
+ formula_P = round(formula_P)
319
+ formula_O = round(formula_O)
320
+
321
+ return formula_P, formula_O
322
+
323
+ def main():
324
+ st.title("Определение эмпирической формулы оксида фосфора")
325
+
326
+ formula_P, formula_O = calculate_empirical_formula()
327
+
328
+ st.write(f"🧪 Эмпирическая формула оксида фосфора: P{formula_P}O{formula_O}")
329
+
330
+
331
+ def calculate_metal():
332
+ # Данные задачи
333
+ mass_water = 1.62 # г
334
+ molar_mass_water = 18.0 # г/моль (молярная масса H2O)
335
+
336
+ # Определение количества молей воды
337
+ n_water = mass_water / molar_mass_water # кол-во моль воды
338
+
339
+ # Определение количества моль водорода
340
+ n_hydrogen = n_water * 2 # в одной молекуле воды 2 атома водорода
341
+
342
+ # Находим массу водорода
343
+ mass_hydrogen = n_hydrogen * 1.008 # г/моль (молярная масса H)
344
+
345
+ # Масса оксида
346
+ mass_oxide = 4.80 # г
347
+
348
+ # Масса металла в оксиде
349
+ mass_metal = mass_oxide - mass_hydrogen
350
+
351
+ # Общая формула для металла
352
+ # M + 3 O → металл с зарядом +3
353
+ # Определяем молекулярную массу металла
354
+ metal_molar_mass = mass_metal / (n_hydrogen / 3)
355
+
356
+ return metal_molar_mass
357
+
358
+ def main():
359
+ st.title("Определение металла по его оксиду")
360
+
361
+ metal_molar_mass = calculate_metal()
362
+
363
+ st.write(f"🔍 Молярная масса металла: {metal_molar_mass:.2f} г/моль")
364
+
365
+ # Пример того, какой металл соответствует найденной молярной массе
366
+ if 45 < metal_molar_mass < 55:
367
+ st.write("⚙️ Металл может быть: Феррум (Fe), с молярной массой примерно 55.85 г/моль.")
368
+ elif 65 < metal_molar_mass < 75:
369
+ st.write("⚙️ Металл может быть: Манган (Mn), с молярной массой примерно 54.94 г/моль.")
370
+
371
+ if __name__ == "__main__":
372
+ main()