Validación de entradas
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 67 de 78.
La entrada llega como texto, e int() convierte cualquier texto sin quejarse. Cuando el texto no es un número entero, obtienes un valor incorrecto en lugar de un error:
print(int("abc")) # 0
print(int("12abc")) # 12
print(int("3.14")) # 3Así que comprueba el texto antes de convertirlo. is_valid_int() devuelve true cuando todo el texto es un número entero:
print("42".is_valid_int()) # verdadero
print("-15".is_valid_int()) # verdadero
print("3.14".is_valid_int()) # falso
print("abc".is_valid_int()) # falso
print("".is_valid_int()) # falsois_valid_float() hace lo mismo con los números decimales. También acepta números enteros, porque 5 es un float válido:
print("3.14".is_valid_float()) # true
print("5".is_valid_float()) # true
print("five".is_valid_float()) # falseLos espacios cuentan como caracteres: " 99 ".is_valid_int() es false. Llama primero a strip_edges() cuando la entrada pueda tener espacios alrededor.
Un número válido aún puede ser un valor incorrecto. Después de la conversión, comprueba que esté dentro del rango permitido por tu programa:
var text := OS.read_string_from_stdin()
if not text.is_valid_int():
print("Please enter a whole number")
else:
var age := int(text)
if age < 0 or age > 120:
print("Age must be between 0 and 120")
else:
print("Age: ", age)Desafío
FácilEl programa lee una línea de entrada. Compruébala antes de convertirla:
- Si es un número entero, imprime
You entered:seguido del número - De lo contrario, imprime
Invalid input! Please enter a valid number.
Para la entrada 42, la salida es:
You entered: 42Para las entradas abc y 3.14, la salida es:
Invalid input! Please enter a valid number.Imprime el número convertido, no el texto: para la entrada 007, la salida es You entered: 7.
Pruébalo tú mismo
extends Node
func _ready():
var user_input := OS.read_string_from_stdin()
# Comprueba la entrada y luego imprime el número o el mensaje de error
pass
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionarios12Manejo básico de errores
¿Qué es el manejo de errores?Validación de entradasCláusulas de guardaDevolver códigos de errorRepaso: división seguraPractica por tu cuenta: Compilador de GDScript online