Гунер.рф
Назад в Матвед
задание 3 матвед
🐍 Python
40
Автор расчёта:
pivo
Исходные данные для расчёта:
Марка стали по EN 10027 (можно несколько через запятую)
Рассчитать
Результаты расчёта
Скопировать для отчёта
Результаты скопированы в буфер!
# @input grades: text = | Марка стали по EN 10027 (можно несколько через запятую) IMPACT_ENERGY = { 'J': '27 Дж', 'K': '40 Дж', 'L': '60 Дж' } IMPACT_TEMP = { 'R': '+20 °C', 'O': '0 °C', '0': '0 °C', '2': '-20 °C', '3': '-30 °C', '4': '-40 °C', '5': '-50 °C', '6': '-60 °C' } DELIVERY_CONDITIONS = { 'M': 'термомеханически прокатанная (упрочненная)', 'N': 'нормализованная (или нормализующая прокатка)', 'Q': 'термообработанная (закалка с отпуском)', 'AR': 'горячекатаная без термической обработки', 'CR': 'холоднокатаная' } SPECIAL_SYMBOLS_S = { 'C': 'с повышенной формуемостью в холодном состоянии', 'D': 'для нанесения горячих защитных покрытий (оцинкование)', 'E': 'для эмалирования', 'F': 'для ковки и объемной штамповки', 'L': 'для работы при низких климатических температурах', 'O': 'для морских шельфовых (оффшорных) конструкций', 'S': 'для судостроения', 'T': 'для изготовления труб', 'W': 'атмосферостойкая (стойкая к атмосферной коррозии)' } def analyze_en_prop_grade(raw_grade): grade = raw_grade.strip() if not grade: return None is_cast = False clean = grade if clean.startswith('G'): is_cast = True clean = clean[1:] main_letter = clean[0] rem = clean[1:] i = 0 digits = "" while i < len(rem) and rem[i].isdigit(): digits += rem[i] i += 1 suffix = rem[i:] purpose = "" prop_str = "" delivery_str = "" special_str = "" impact_str = "" # 1. S - Конструкционные стали общего назначения if main_letter == 'S': purpose = "Конструкционная сталь общего назначения" if is_cast: purpose += " [литейная, для фасонных отливок]" prop_str = f"Предел текучести σ₀,₂ ≥ {digits} МПа (Н/мм²)" s_idx = 0 while s_idx < len(suffix): ch1 = suffix[s_idx] ch2 = suffix[s_idx+1] if s_idx + 1 < len(suffix) else '' if ch1 in IMPACT_ENERGY and ch2 in IMPACT_TEMP: impact_str = f"Работа удара KV ≥ {IMPACT_ENERGY[ch1]} при температуре {IMPACT_TEMP[ch2]}" s_idx += 2 continue if ch1 in DELIVERY_CONDITIONS: delivery_str = DELIVERY_CONDITIONS[ch1] s_idx += 1 continue if ch1 in SPECIAL_SYMBOLS_S: if special_str: special_str += "; " special_str += SPECIAL_SYMBOLS_S[ch1] s_idx += 1 continue s_idx += 1 # 2. P - Стали для сосудов высокого давления и котлов elif main_letter == 'P': purpose = "Сталь для сосудов, работающих под давлением, и котлов" if is_cast: purpose += " [литейная, для отливок деталей под давлением]" prop_str = f"Предел текучести σ₀,₂ ≥ {digits} МПа (Н/мм²)" p_special = [] p_delivery = [] for ch in suffix: if ch == 'B': p_special.append("для баллонов со сжатым газом") elif ch == 'S': p_special.append("для обычных сосудов под давлением") elif ch in ['M', 'N', 'Q']: p_delivery.append(DELIVERY_CONDITIONS[ch]) elif ch == 'H': p_special.append("для высоких рабочих температур") elif ch == 'L': p_special.append("для низких рабочих температур") elif ch == 'R': p_special.append("для комнатной температуры") elif ch == 'X': p_special.append("для высоких или низких температур") delivery_str = "; ".join(p_delivery) special_str = "; ".join(p_special) # 3. L - Стали для магистральных трубопроводов elif main_letter == 'L': purpose = "Сталь для магистральных нефте- и газопроводов" prop_str = f"Предел текучести σ₀,₂ ≥ {digits} МПа (Н/мм²)" l_delivery = [] for ch in suffix: if ch in DELIVERY_CONDITIONS: l_delivery.append(DELIVERY_CONDITIONS[ch]) elif ch == 'A' or ch == 'B': special_str = f"Класс требований {ch}" delivery_str = "; ".join(l_delivery) # 4. E - Машиностроительные стали elif main_letter == 'E': purpose = "Сталь для машиностроения (детали машин, валы, шестерни)" prop_str = f"Предел текучести σ₀,₂ ≥ {digits} МПа (Н/мм²)" for ch in suffix: if ch in DELIVERY_CONDITIONS: delivery_str = DELIVERY_CONDITIONS[ch] # 5. R - Рельсовые стали elif main_letter == 'R': purpose = "Рельсовая сталь для железнодорожного транспорта" val_digits = digits.lstrip('0') if digits else '0' prop_str = f"Предел прочности σ_B ≥ {val_digits} МПа (Н/мм²)" if suffix: special_str = f"Легирована элементом: {suffix} (износостойкость рельса)" # 6. B - Арматурные стали elif main_letter == 'B': purpose = "Арматурная сталь для железобетонных конструкций" prop_str = f"Предел текучести σ₀,₂ ≥ {digits} МПа (Н/мм²)" if 'H' in suffix: special_str = "Высокотемпературная / горячекатаная" elif 'N' in suffix: delivery_str = "Нормализованная" # 7. Y - Стали для напрягаемой арматуры (канаты, тросы) elif main_letter == 'Y': purpose = "Высокопрочная канатная сталь / тросы" prop_str = f"Предел прочности σ_B ≥ {digits} МПа (Н/мм²)" else: purpose = f"Сталь по стандарту EN 10027-1 (класс '{main_letter}')" prop_str = f"Гарантированное свойство = {digits} МПа" return { "Марка EN 10027": grade, "Назначение и группа (Табл. 4)": purpose, "Механические свойства": prop_str, "Ударная вязкость KV": impact_str if impact_str else "стандартная", "Состояние поставки": delivery_str if delivery_str else "по спецификации", "Специальные требования": special_str if special_str else "общего назначения" } def calculate(inputs): raw_grades = inputs.get('grades', '') if not raw_grades: raw_grades = "S350JO, P260B, L365N, E450, R0900Cr, B480H, GS395K2L" grade_list = [g.strip() for g in raw_grades.replace(';', ',').split(',') if g.strip()] table_rows = [] for g in grade_list: row = analyze_en_prop_grade(g) if row: table_rows.append(row) return { "Количество марок": len(table_rows), "Расшифровка сталей по EN 10027 (механические свойства)": table_rows }