online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
import math # Константы N_MAX = 6 P = 0.46 INV_P = 1 / P # примерно 2.173913 # Начальные базовые коэффициенты (доли от цены самолёта) BASE_COEFFS = { 'ИК УРВП': 0.80, 'ТВ УРВП': 0.66, 'Лазерные/ГНСС УРВП': 0.40, 'Лазерные/ГНСС КАБы': 0.36, 'ИК КАБы': 0.72, 'ТВ КАБы': 0.60, } def calculate_price(base_price, quantities, coeffs): """ quantities: dict {название: количество} coeffs: dict {название: базовый коэффициент} Возвращает цену подвеса. """ # Эффективные количества (не более N_MAX) eff_quantities = {name: min(q, N_MAX) for name, q in quantities.items()} # Сумма приведённых весов s = 0.0 for name, q_eff in eff_quantities.items(): if q_eff > 0: w = coeffs[name] ** INV_P # приведённый вес s += q_eff * w if s == 0: return 0.0 # Нормировка и возведение в степень price = base_price * (s / N_MAX) ** P return price def input_float(prompt, min_val=None, max_val=None): while True: try: val = float(input(prompt)) if min_val is not None and val < min_val: print(f"Значение должно быть не меньше {min_val}") continue if max_val is not None and val > max_val: print(f"Значение должно быть не больше {max_val}") continue return val except ValueError: print("Ошибка: введите число") def input_int(prompt, min_val=0, max_val=None): while True: try: val = int(input(prompt)) if min_val is not None and val < min_val: print(f"Значение должно быть не меньше {min_val}") continue if max_val is not None and val > max_val: print(f"Значение должно быть не больше {max_val}") continue return val except ValueError: print("Ошибка: введите целое число") def edit_coeffs(coeffs): print("\nТекущие базовые коэффициенты (доля от цены самолёта):") for name, val in coeffs.items(): print(f" {name}: {val:.2f} ({val*100:.0f}%)") print("Введите новые значения (или оставьте пустым для сохранения текущего):") new_coeffs = {} for name, old_val in coeffs.items(): while True: inp = input(f" {name} [{old_val}]: ").strip() if inp == "": new_coeffs[name] = old_val break try: new_val = float(inp) if 0 <= new_val <= 1: new_coeffs[name] = new_val break else: print("Значение должно быть от 0 до 1") except ValueError: print("Ошибка: введите число или оставьте пустым") return new_coeffs def input_quantities(coeffs): quantities = {} print("\nВведите количество каждого типа вооружения (целое неотрицательное число):") for name in coeffs.keys(): q = input_int(f" {name}: ", min_val=0) quantities[name] = q return quantities def main(): coeffs = BASE_COEFFS.copy() print("=== Калькулятор цены управляемого вооружения для War Thunder ===") print(f"Максимальное количество для учёта: {N_MAX}") print(f"Коэффициент нелинейности p = {P}") while True: print("\nМеню:") print("1. Изменить базовые коэффициенты") print("2. Рассчитать цену подвеса") print("3. Выход") choice = input("Выберите действие (1-3): ").strip() if choice == '1': coeffs = edit_coeffs(coeffs) elif choice == '2': # Ввод базовой цены самолёта base_price = input_float("Введите базовую цену самолёта (480-540): ", min_val=480, max_val=540) # Ввод количеств quantities = input_quantities(coeffs) # Расчёт price = calculate_price(base_price, quantities, coeffs) total = base_price + price percent = (price / base_price) * 100 if base_price != 0 else 0 print(f"\nЦена подвеса: {price:.1f} очков (округлённо {round(price)})") print(f"Полная цена самолёта: {total:.1f} очков (округлённо {round(total)})") print(f"Стоимость подвесов относительно базовой цены: {percent:.1f}%") elif choice == '3': print("Выход.") break else: print("Неверный ввод, попробуйте снова.") if __name__ == "__main__": main()

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue