Переработан интерфейс программы, расчёт занчений в процессе исправления.

This commit is contained in:
2026-05-18 15:53:24 +05:00
parent e6e86e50a3
commit 3ddd05acff
38 changed files with 2820 additions and 3555 deletions
+152
View File
@@ -0,0 +1,152 @@
"""
Интерфейс командной строки для использования вычислительных функций
Позволяет использовать расчёты без графического интерфейса
"""
import json
import argparse
from typing import List, Dict
from calculations import (
calculate_medium_composition,
generate_factorial_design,
analyze_experiment,
convert_units,
VOLUME_UNITS,
MASS_UNITS
)
def demo_medium_calculation():
"""Демонстрация расчёта питательной среды"""
print("\n" + "=" * 60)
print("ДЕМОНСТРАЦИЯ РАСЧЁТА ПИТАТЕЛЬНОЙ СРЕДЫ")
print("=" * 60)
# Пример реагентов
reagents = [
{
'name': 'Глюкоза',
'percentage': 2.0,
'unit': 'г',
'conversion_factor': 1.0,
'dilution_factor': 1.0
},
{
'name': 'Пептон',
'percentage': 1.0,
'unit': 'г',
'conversion_factor': 1.0,
'dilution_factor': 1.0
},
{
'name': 'Дрожжевой экстракт',
'percentage': 0.5,
'unit': 'г',
'conversion_factor': 1.0,
'dilution_factor': 1.0
}
]
print("\nИсходные данные:")
print(f"Общий объём: 1000 мл")
print("Реагенты:")
for r in reagents:
print(f" - {r['name']}: {r['percentage']}%")
# Расчёт
result = calculate_medium_composition(
total_volume=1000,
volume_unit='мл',
reagents=reagents,
solvent_name='Вода'
)
print("\nРезультаты расчёта:")
print(f"Растворитель ({result['solvent_name']}): {result['solvent_volume']:.2f} {result['total_unit']} "
f"({result['solvent_percentage']:.1f}%)")
print("\nКоличества реагентов:")
for r in result['reagents']:
print(f" - {r['name']}: {r['calculated_amount']:.4f} {r['unit']}")
def demo_doe_calculation():
"""Демонстрация планирования эксперимента"""
print("\n" + "=" * 60)
print("ДЕМОНСТРАЦИЯ ПЛАНИРОВАНИЯ ЭКСПЕРИМЕНТА")
print("=" * 60)
# Факторы
factors = [
{'name': 'Температура', 'low': 25, 'high': 37, 'center': 31, 'unit': '°C'},
{'name': 'pH', 'low': 6.5, 'high': 7.5, 'center': 7.0, 'unit': ''}
]
print("\nФакторы эксперимента:")
for f in factors:
print(f" - {f['name']}: {f['low']} {f['high']} {f['unit']} (центр: {f['center']})")
# Генерация плана
design = generate_factorial_design(factors, center_points=3, randomize=True)
print(f"\nСгенерировано {len(design)} опытов:")
for i, exp in enumerate(design):
is_center = exp.get('is_center', False)
type_str = "Центральная" if is_center else "Факторная"
values = []
for key in sorted(exp.keys()):
if key.startswith('Фактор_'):
values.append(f"{exp[key]['natural']}{exp[key]['unit']}")
print(f" {i+1}. {type_str}: {', '.join(values)}")
def demo_unit_conversion():
"""Демонстрация конвертации единиц"""
print("\n" + "=" * 60)
print("ДЕМОНСТРАЦИЯ КОНВЕРТАЦИИ ЕДИНИЦ")
print("=" * 60)
print("\nОбъёмные единицы (база: мкл):")
for unit, factor in VOLUME_UNITS.items():
print(f" 1 {unit} = {factor} мкл")
print("\nМассовые единицы (база: мг):")
for unit, factor in MASS_UNITS.items():
print(f" 1 {unit} = {factor} мг")
print("\nПримеры конвертации:")
print(f" 100 мл = {convert_units(100, 'мл', 'мкл'):.0f} мкл")
print(f" 5000 мкл = {convert_units(5000, 'мкл', 'мл'):.2f} мл")
print(f" 2 г = {convert_units(2, 'г', 'мг'):.0f} мг")
print(f" 500 мг = {convert_units(500, 'мг', 'г'):.2f} г")
def main():
parser = argparse.ArgumentParser(description='Биохимический помощник - командная строка')
parser.add_argument('--demo', choices=['medium', 'doe', 'units', 'all'],
default='all', help='Демонстрация расчётов')
args = parser.parse_args()
if args.demo in ['medium', 'all']:
demo_medium_calculation()
if args.demo in ['doe', 'all']:
demo_doe_calculation()
if args.demo in ['units', 'all']:
demo_unit_conversion()
print("\n" + "=" * 60)
print("Советы по использованию библиотеки:")
print(" from calculations import *")
print(" result = calculate_medium_composition(...)")
print(" design = generate_factorial_design(...)")
print(" analysis = analyze_experiment(...)")
print("=" * 60)
if __name__ == "__main__":
main()