164 lines
8.1 KiB
Python
164 lines
8.1 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Скрипт для завершения обновления калькуляторов
|
||
Добавляет функции умножения и деления в sedecim_calculeator8.py и pentecostal_calculeator10.py
|
||
"""
|
||
|
||
import re
|
||
|
||
def add_hex_multiplication_division():
|
||
"""Добавляет умножение и деление в шестнадцатеричный калькулятор"""
|
||
|
||
# Методы для добавления после calculate_addition
|
||
methods_to_add = '''
|
||
def calculate_multiplication(self, e):
|
||
try:
|
||
num1 = self.hex_to_decimal(self.input_mult_1.value.upper())
|
||
num2 = self.hex_to_decimal(self.input_mult_2.value.upper())
|
||
result_decimal = num1 * num2
|
||
result_hex = self.decimal_to_hex(result_decimal)
|
||
|
||
self.result_mult.value = f"HEX: {result_hex}"
|
||
self.decimal_mult.value = f"DEC: {result_decimal}"
|
||
|
||
if '.' not in self.input_mult_1.value and '.' not in self.input_mult_2.value:
|
||
hex_val1 = self.input_mult_1.value.upper().lstrip('-+') if self.input_mult_1.value else "0"
|
||
hex_val2 = self.input_mult_2.value.upper().lstrip('-+') if self.input_mult_2.value else "0"
|
||
self.show_steps_mult(hex_val1, hex_val2, Operation.MULTIPLICATION)
|
||
else:
|
||
self.steps_mult.controls.clear()
|
||
self.steps_mult.controls.append(
|
||
ft.Text("Пошаговое решение доступно только для целых чисел", color="#FFD700", size=12)
|
||
)
|
||
self.steps_mult.update()
|
||
except Exception as ex:
|
||
self.result_mult.value = f"Ошибка: {str(ex)}"
|
||
self.decimal_mult.value = "DEC: ошибка"
|
||
self.page.update()
|
||
|
||
def calculate_division(self, e):
|
||
try:
|
||
num1 = self.hex_to_decimal(self.input_div_1.value.upper())
|
||
num2 = self.hex_to_decimal(self.input_div_2.value.upper())
|
||
|
||
if num2 == 0:
|
||
self.result_div.value = "HEX: Деление на 0!"
|
||
self.decimal_div.value = "DEC: ошибка"
|
||
self.page.update()
|
||
return
|
||
|
||
quotient = int(num1 // num2)
|
||
remainder = int(num1 % num2)
|
||
quot_hex = self.decimal_to_hex(quotient)
|
||
|
||
if remainder == 0:
|
||
self.result_div.value = f"HEX: {quot_hex}"
|
||
self.decimal_div.value = f"DEC: {quotient}"
|
||
else:
|
||
self.result_div.value = f"HEX: {quot_hex}"
|
||
self.decimal_div.value = f"DEC: {quotient} (ост. {remainder})"
|
||
|
||
if '.' not in self.input_div_1.value and '.' not in self.input_div_2.value:
|
||
hex_val1 = self.input_div_1.value.upper().lstrip('-+') if self.input_div_1.value else "0"
|
||
hex_val2 = self.input_div_2.value.upper().lstrip('-+') if self.input_div_2.value else "0"
|
||
self.show_steps_div(hex_val1, hex_val2, Operation.DIVISION)
|
||
else:
|
||
self.steps_div.controls.clear()
|
||
self.steps_div.controls.append(
|
||
ft.Text("Пошаговое решение доступно только для целых чисел", color="#FFD700", size=12)
|
||
)
|
||
self.steps_div.update()
|
||
except Exception as ex:
|
||
self.result_div.value = f"Ошибка: {str(ex)}"
|
||
self.decimal_div.value = "DEC: ошибка"
|
||
self.page.update()
|
||
|
||
def show_steps_mult(self, num1: str, num2: str, operation: Operation):
|
||
"""Отображает пошаговое решение для умножения"""
|
||
try:
|
||
steps = self.solver.solve(num1, num2, operation)
|
||
self.steps_mult.controls.clear()
|
||
|
||
self.steps_mult.controls.append(
|
||
ft.Text("📝 Ход решения:", size=14, weight=ft.FontWeight.BOLD, color="#FFD700")
|
||
)
|
||
|
||
for i, step in enumerate(steps, 1):
|
||
step_content = []
|
||
step_content.append(ft.Text(f"Шаг {i}: {step.title}", size=12, weight=ft.FontWeight.BOLD, color="#00FFFF"))
|
||
step_content.append(ft.Text(step.description, size=10, color="#E0E0E0"))
|
||
if step.visual:
|
||
step_content.append(ft.Text(step.visual, size=10, font_family="Courier New", color="#90EE90", selectable=True))
|
||
if step.result:
|
||
step_content.append(ft.Text(f"➤ {step.result}", size=11, weight=ft.FontWeight.BOLD, color="#00FF00"))
|
||
|
||
self.steps_mult.controls.append(
|
||
ft.Container(
|
||
content=ft.Column(step_content, spacing=3),
|
||
bgcolor="#2A1A3A",
|
||
padding=8,
|
||
border_radius=5,
|
||
border=ft.border.all(1, "#4A3A5A")
|
||
)
|
||
)
|
||
self.steps_mult.update()
|
||
except Exception as ex:
|
||
self.steps_mult.controls.clear()
|
||
self.steps_mult.controls.append(ft.Text(f"Ошибка: {str(ex)}", color="red", size=10))
|
||
self.steps_mult.update()
|
||
|
||
def show_steps_div(self, num1: str, num2: str, operation: Operation):
|
||
"""Отображает пошаговое решение для деления"""
|
||
try:
|
||
steps = self.solver.solve(num1, num2, operation)
|
||
self.steps_div.controls.clear()
|
||
|
||
self.steps_div.controls.append(
|
||
ft.Text("📝 Ход решения:", size=14, weight=ft.FontWeight.BOLD, color="#FFD700")
|
||
)
|
||
|
||
for i, step in enumerate(steps, 1):
|
||
step_content = []
|
||
step_content.append(ft.Text(f"Шаг {i}: {step.title}", size=12, weight=ft.FontWeight.BOLD, color="#00FFFF"))
|
||
step_content.append(ft.Text(step.description, size=10, color="#E0E0E0"))
|
||
if step.visual:
|
||
step_content.append(ft.Text(step.visual, size=10, font_family="Courier New", color="#90EE90", selectable=True))
|
||
if step.result:
|
||
step_content.append(ft.Text(f"➤ {step.result}", size=11, weight=ft.FontWeight.BOLD, color="#00FF00"))
|
||
|
||
self.steps_div.controls.append(
|
||
ft.Container(
|
||
content=ft.Column(step_content, spacing=3),
|
||
bgcolor="#2A1A3A",
|
||
padding=8,
|
||
border_radius=5,
|
||
border=ft.border.all(1, "#4A3A5A")
|
||
)
|
||
)
|
||
self.steps_div.update()
|
||
except Exception as ex:
|
||
self.steps_div.controls.clear()
|
||
self.steps_div.controls.append(ft.Text(f"Ошибка: {str(ex)}", color="red", size=10))
|
||
self.steps_div.update()
|
||
'''
|
||
|
||
print("✓ Шаблон методов для шестнадцатеричного калькулятора создан")
|
||
print("\nСкопируйте этот код и вставьте после метода calculate_addition в sedecim_calculeator8.py")
|
||
print(methods_to_add)
|
||
|
||
if __name__ == "__main__":
|
||
print("="*60)
|
||
print("ИНСТРУКЦИЯ ПО ЗАВЕРШЕНИЮ ОБНОВЛЕНИЯ КАЛЬКУЛЯТОРОВ")
|
||
print("="*60)
|
||
print("\n✅ УЖЕ ОБНОВЛЕНО:")
|
||
print(" • step_by_step_solver.py - добавлены умножение и деление")
|
||
print(" • calculater2.py - 4 колонки (+, -, ×, ÷)")
|
||
print(" • binary_calculeator4.py - 4 колонки (+, -, ×, ÷)")
|
||
print(" • octogon_calculeator6.py - 4 колонки (+, -, ×, ÷)")
|
||
print("\n⏳ НУЖНО ЗАВЕРШИТЬ:")
|
||
print(" • sedecim_calculeator8.py (Шестнадцатеричный)")
|
||
print(" • pentecostal_calculeator10.py (50-ричный)")
|
||
print("\n" + "="*60)
|
||
print("РУКОВОДСТВО НАХОДИТСЯ В: UPGRADE_GUIDE.md")
|
||
print("="*60)
|