feat: implementar soporte de paréntesis en calculadora#56
Merged
Conversation
…ar expresiones matemáticas complejas
7 tasks
alexricardotapiacarita-ai
approved these changes
Dec 2, 2025
Contributor
alexricardotapiacarita-ai
left a comment
There was a problem hiding this comment.
esta chido
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ Nueva Funcionalidad
📋 Descripción
Implementación de soporte completo para operaciones con paréntesis en la calculadora GUI. Ahora los usuarios pueden construir y evaluar expresiones matemáticas complejas utilizando paréntesis tanto desde los botones de la interfaz como desde el teclado.
🔗 Issue Relacionado
Related to #44
🎯 Objetivo
Resolver la limitación donde los botones de paréntesis "(" y ")" estaban visibles en la interfaz pero no eran funcionales. Ahora la calculadora puede procesar expresiones matemáticas completas con paréntesis, permitiendo operaciones como
(2+3)*4,2*(3+4),(5-2)*(6+4), etc.💻 Implementación
Archivos Modificados
src/gui. py- Implementado soporte completo de paréntesis con validacionestests/test_gui.py- Agregados 13 tests para validar funcionalidad de paréntesisCambios Técnicos
1. Nuevas variables de estado:
2. Nuevos métodos agregados:
3. Evaluación de expresiones mejorada en
equals_click():eval()^a**para potencias4. Soporte de teclado:
(y)enhandle_keypress()5. Métodos modificados para soportar ambos modos:
number_button_click()- Funciona en modo normal y expresióndecimal_click()- Soporta punto decimal en expresionesoperation_click()- Agrega operadores a expresionesbackspace_click()- Elimina caracteres en ambos modosclear_click()- Resetea ambos modos6. Importación de regex:
import repara validación de caracteres seguros🧪 Testing
Tests Unitarios Agregados
Se agregaron 13 tests completos en
tests/test_gui.pypara validar la funcionalidad:Tests de funcionalidad básica:
test_parenthesis_basic- Operaciones básicas:(2+3)*4,2*(3+4),(5-2)*(6+4),(10/2)+5test_parenthesis_nested- Paréntesis anidados:((2+3)*4)/5,(2+(3*4)),((10-5)*2)+3test_parenthesis_with_decimals- Con números decimales:(2.5+3.5)*2,(10. 5/2)+1.5test_parenthesis_with_negatives- Con números negativos:(-5+3)*2,(10-15)*2test_parenthesis_with_power- Con potencias:(2+3)^2,2^(3+1)Tests de validación y errores:
test_parenthesis_unbalanced- Validación de paréntesis desbalanceadostest_parenthesis_division_by_zero- División por cero dentro de paréntesisTests de comportamiento del sistema:
test_parenthesis_expression_mode- Activación y desactivación del modo expresióntest_parenthesis_clear- Limpieza de expresiones con paréntesistest_parenthesis_backspace- Borrado de caracteres en expresionestest_parenthesis_display_update- Actualización correcta del displaytest_parenthesis_mixed_mode- Compatibilidad entre modo normal y expresióntest_parenthesis_complex_expression- Expresiones matemáticas complejasEjecución de Tests
Casos de Prueba Manuales
Operaciones básicas con paréntesis:
(2+3)*4=20✅2*(3+4)=14✅(5-2)*(6+4)=30✅(10/2)+5=10.0✅Expresiones anidadas:
((2+3)*4)/5=4.0✅(2+(3*4))=14✅Validaciones:
(2+3→ Error: "Paréntesis desbalanceados" ✅2+3)→ Error: "Paréntesis desbalanceados" ✅Entrada desde teclado:
(y)funcionan correctamente ✅Cobertura de Tests
📝 Documentación
✅ Checklist de Feature
📸 Ejemplos de Uso
Expresión:
(2+3)*4(2+3)*4=20Expresión:
(10/2)+510. 0Expresión anidada:
((2+3)*4)/54.0📝 Notas Adicionales
Implementación:
eval()con validaciones de seguridad (regex) para evitar inyección de códigoTesting:
tests/test_gui.pySeguridad:
📊 Estadísticas
open_parenthesis_click,close_parenthesis_click)👥 Revisores Sugeridos
@Jhos3ph @alexricardotapiacarita-ai