Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -25,348 +25,6 @@ def main():
|
|
| 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()
|
|
|
|
| 25 |
st.write(f"🔋 Масса катиона аммония NH4+: {nh4} г")
|
| 26 |
st.write(f"⚡ Масса аниона SO4^2-: {so4} г")
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
if __name__ == "__main__":
|
| 30 |
main()
|