test math
This commit is contained in:
137
UPGRADE_GUIDE.md
Normal file
137
UPGRADE_GUIDE.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Руководство по обновлению калькуляторов
|
||||
|
||||
## Статус обновлений
|
||||
|
||||
### ✅ Завершено:
|
||||
1. **step_by_step_solver.py** - добавлены операции `MULTIPLICATION` и `DIVISION`
|
||||
2. **calculater2.py** (Десятичный) - добавлены 4 колонки (+, -, ×, ÷)
|
||||
3. **binary_calculeator4.py** (Двоичный) - добавлены 4 колонки (+, -, ×, ÷)
|
||||
4. **octogon_calculeator6.py** (Восьмеричный) - добавлены 4 колонки (+, -, ×, ÷)
|
||||
|
||||
### ⏳ Требуется завершить:
|
||||
5. **sedecim_calculeator8.py** (Шестнадцатеричный)
|
||||
6. **pentecostal_calculeator10.py** (50-ричный)
|
||||
|
||||
## Инструкция для завершения оставшихся калькуляторов
|
||||
|
||||
### Для sedecim_calculeator8.py и pentecostal_calculeator10.py:
|
||||
|
||||
#### 1. Обновить __init__ метод класса:
|
||||
Добавить:
|
||||
```python
|
||||
# Результаты для умножения и деления
|
||||
self.result_mult = ft.Text(value="0", size=30, width=300)
|
||||
self.result_div = ft.Text(value="0", size=30, width=300)
|
||||
self.decimal_mult = ft.Text(value="(0₁₀)", size=14, color="#B0B0B0", width=300)
|
||||
self.decimal_div = ft.Text(value="(0₁₀)", size=14, color="#B0B0B0", width=300)
|
||||
|
||||
# Поля ввода для умножения
|
||||
self.input_mult_1 = None
|
||||
self.input_mult_2 = None
|
||||
|
||||
# Поля ввода для деления
|
||||
self.input_div_1 = None
|
||||
self.input_div_2 = None
|
||||
|
||||
# Контейнеры для пошагового решения
|
||||
self.steps_mult = ft.Column(scroll=ft.ScrollMode.AUTO, spacing=5)
|
||||
self.steps_div = ft.Column(scroll=ft.ScrollMode.AUTO, spacing=5)
|
||||
```
|
||||
|
||||
#### 2. Добавить методы calculate_multiplication и calculate_division:
|
||||
```python
|
||||
def calculate_multiplication(self, e):
|
||||
# Логика умножения - преобразовать в десятичную, умножить, вернуть обратно
|
||||
# Вызвать self.show_steps_mult(val1, val2, Operation.MULTIPLICATION)
|
||||
|
||||
def calculate_division(self, e):
|
||||
# Логика деления - преобразовать в десятичную, разделить, вернуть обратно
|
||||
# Проверка деления на ноль
|
||||
# Вызвать self.show_steps_div(val1, val2, Operation.DIVISION)
|
||||
```
|
||||
|
||||
#### 3. Добавить методы show_steps_mult и show_steps_div:
|
||||
```python
|
||||
def show_steps_mult(self, num1: str, num2: str, operation: Operation):
|
||||
# Аналогично show_steps_left/right
|
||||
# Обновить self.steps_mult
|
||||
|
||||
def show_steps_div(self, num1: str, num2: str, operation: Operation):
|
||||
# Аналогично show_steps_left/right
|
||||
# Обновить self.steps_div
|
||||
```
|
||||
|
||||
#### 4. Обновить test_data метод:
|
||||
Добавить поля ввода для умножения и деления:
|
||||
```python
|
||||
self.input_mult_1 = ft.TextField(...)
|
||||
self.input_mult_2 = ft.TextField(...)
|
||||
self.input_div_1 = ft.TextField(...)
|
||||
self.input_div_2 = ft.TextField(...)
|
||||
```
|
||||
|
||||
Добавить две новые колонки в ft.Row (controls):
|
||||
```python
|
||||
ft.Column( # Умножение
|
||||
controls=[
|
||||
self.input_mult_1,
|
||||
ft.Text("× Умножение", ...),
|
||||
self.input_mult_2,
|
||||
ft.Container(content=...), # result_mult
|
||||
ft.CupertinoButton("=", on_click=self.calculate_multiplication),
|
||||
ft.Container(content=self.steps_mult, ...)
|
||||
]
|
||||
),
|
||||
ft.Column( # Деление
|
||||
controls=[
|
||||
self.input_div_1,
|
||||
ft.Text("÷ Деление", ...),
|
||||
self.input_div_2,
|
||||
ft.Container(content=...), # result_div
|
||||
ft.CupertinoButton("=", on_click=self.calculate_division),
|
||||
ft.Container(content=self.steps_div, ...)
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
## Примечания:
|
||||
- Для **sedecim_calculeator8.py**: Используйте существующие методы `hex_to_decimal` и `decimal_to_hex`
|
||||
- Для **pentecostal_calculeator10.py**: Используйте существующие методы `from_base50` и `to_base50`
|
||||
- Во всех случаях импортируйте `Operation` из step_by_step_solver
|
||||
- Проверьте деление на ноль в методе calculate_division
|
||||
|
||||
## Шаблон для calculate_multiplication (шестнадцатеричный):
|
||||
```python
|
||||
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()
|
||||
```
|
||||
|
||||
## Следующие шаги:
|
||||
1. Откройте sedecim_calculeator8.py
|
||||
2. Примените изменения согласно шаблону выше
|
||||
3. Повторите для pentecostal_calculeator10.py
|
||||
4. Протестируйте все калькуляторы
|
||||
|
||||
Все изменения следуют единому паттерну, использованному в уже обновленных калькуляторах.
|
||||
Reference in New Issue
Block a user