Elaborado por Ferney Vanegas Hernández
Programa en Python cuyo objetivo principal es practicar expresiones, condicionales, módulos y librerías. Su construcción es sumamente instructiva. Es parte de los ejercicios del programa con el Ministerio de Tecnologías de Comunicación de Colombia en el 2022. Inicialmente fue construido en la plataforma repli.it pero ahora (ya habíendo sido calificado), lo comparto con el mundo!
Proyecto para Misión TIC 2022
El juego WorldCraft ASCII es muy popular y a diario varias personas desean registrarse para poder jugarlo y disfrutar de todo lo que ofrece
- Realizar la verificación de un código ingresado por el usuario (CDIA) para evaluar la posibilidad de que pueda ingresar como nuevo jugador del WorldCraft ASCII
- Una vez admitido al WorldCraft ASCII se le debe asignar un Mundo para iniciar a jugar
- Aspirantes a jugadores de WorldCraft ASCII
- El aspirante debe proporcionar un código CDIA (código de identificación ASCII) para poder ingresar
- El CDIA es una cadena que debe cumplir con las siguientes restricciones:
- Se debe verificar que el CDIA sea de tipo str exclusivamente y sin dígitos numéricos
- El CDIA solo puede tener 10 caracteres de longitud
- En la posición 6 de la cadena del CDIA debe ir siempre el carácter arroba (‘@’)
- El carácter en la primera posición y el carácter en la última posición del CDIA deben ser diferentes.
- El CDIA debe contener en cualquier posición de la cadena el carácter (‘+’)
- El código CDIA no debe contener más de 3 veces la letra ’k’
- El CDIA debe tener al menos uno de los siguientes símbolos (‘?’,’=’,’&’)
- El CDIA no debe estar registrado por otro jugador
- Ya existe una función en un módulo para verificar que el CDIA no esté registrado con otro jugador
- El aspirante debe ser mayor de 12 años
- Cuando un nuevo jugador es admitido al WorldCraft ASCII se le debe asignar un Mundo para iniciar a jugar de acuerdo a las siguientes reglas:
- Mundo 1: jugadores entre 12 y 20 años que no han jugado antes.
- Mundo 2: jugadores entre 12 y 20 años que ya han jugado antes y su nivel actual es menor a 50.
- Mundo 3: jugadores entre 12 y 20 años que ya han jugado antes y su nivel actual es mayor o igual a 50.
- Mundo 4: jugadores mayores a 20 años que no han jugado antes
- Mundo 5: jugadores mayores a 20 años que ya han jugado antes y su nivel actual es menor a 50.
- Mundo 5: jugadores mayores a 20 años que ya han jugado antes y su nivel actual es mayor o igual a 50.
- Se debe saber cómo calcular la edad de una persona
- El funcionamiento de la Función proporcionada que valida que el CDIA no esté registrado
- Investigar un poco de arrays
- Investigar sobre de For y While (bucles)
- Definir un módulo principal
- Importar módulos externos
- Solicitar CDIA
- Realizar validaciones para evaluar la inscripción del Jugador
- Verificar que el CDIA sea str
- Verificar quq el CDIA sea de 10 caracteres
- Verificar que el sexto caracter del CDIA sea @
- Verificar que en el primer y último caracter de la CDIA sean diferentes
- Verificar la existencia del caracter +
- Verificar que en el CDIA no se repita más de 3 veces la letra k
- Verificar que en CDIA esté al menos uno de: (‘?’,’=’,’&’)
- Realizar validaciones de existencia de CDIA
- Solicitar y Validar Fecha de Nacimiento
- Calcular la edad del usuario según su fecha de nacimiento
- Solicitar Alias (minimo 5 caracteres sin espacios)
- Solicitar Experiencia en el juego
- Realizar validaciones para asignación a un mundo
- Asignar mundo según la edad, la experiencia y el nivel
- No es string
- CDIA = 1234
- No tiene arroba en el lugar correcto
- Fer@ney
- Caracteres igüales al inicio y al final
- Ferne@y+F
- Más de tres veces la k
- Fkrnk@y+k_k
- CDIA correcto:
- Luisfe@=g+
- 12/12/2014, No ha jugado antes => 8 años (No admitido)
- 02/08/1986, Ya ha jugado antes, nivel 10 => 36 años (Admitido a Mundo 5)
- Solicitar el código CDIA
- Validar reglas de construcción del CDIA
- Validar existencia
- Solicitar fecha de nacimiento
- Validar fecha de nacimiento
- Solicitar alias, experiencia y nivel
- Si se infringe algo en la validación de reglas, existencia ó edad, reportar al usuario que no se puede continuar
- Si todas las validaciones están bien, informar al usuario su proceso satisfactorio completo
- Funcion calc_age <- age(fecha_nacimiento:str)
- today = fecha_de_hoy
- age = today - fecha_nacimiento
- Devolver calc_age
- FinFuncion
- Funcion existe <- cdia_unico (CDIA:str)
-
CDIA = poner_en_mayusculas(CDIA) -
existe = False -
Dimension listaCDIA[N] -
Para i<-0 Hasta N-1 con Paso 1 Hacer -
Si listaCDIA[i] == CDIA -
existe = True -
FinPara -
Devolver existe - FinFuncion
- Funcion value <- existen_numeros(CDIA:str)
- value = False
- Para i<-0 hasta longitud(CDIA) - 1 con Paso 1 Hacer
- Si CDIA[i] es_numero Entonces
- value = True
- FinSi
- Si CDIA[i] es_numero Entonces
- FinPara
- Retornar value
- FinFuncion
- Funcion valido <- validarCadena (CDIA:str)
-
valido = False -
CDIA = convertir_mayuscula(CDIA) -
Si existen_numeros(CDIA) == False Entonces: -
Si CDIA.longitud == 10 Entonces: -
Si CDIA.sexto_carater == @ Entonces: -
primer_caracter = CDIA.primer_caracter -
ultimo_caracter = CDIA.ultimo_caracter -
Si primer_caracter != ultimo_caracter Entonces: -
Si CDIA tiene + Entonces: -
num_K = CDIA.contar_K -
Si num_K <=3 Entonces: -
Si CDIA contine (‘?’,’=’,’&’) Entonces: -
valido = True -
FinSi -
FinSi -
FinSi -
FinSi -
FinSi -
FinSi -
FinSi -
Devolver valido - FinFuncion
- Funcion asig <- asig_world(age:int, answer:bool, level:int)
- asig = ''
- Si answer == True Entonces
- Si age > 12 and age <= 20 and level < 50 Entonces
- asig = 'Asignado a Mundo 2'
- SiNo
- Si age > 12 and age <= 20 and level >= 50 Entonces
- asig = 'Asignado a Mundo 3'
- SiNo
- Si age > 20 and level < 50
- asig = 'Asignado a Mundo 5'
- SiNo
- Si age > 20 and level >= 50
- asig = 'Asignado a Mundo 5'
- /Creo que hay un error en las copias, y en este caso debía ser asignado al Mundo 6. Pero hago lo que está en las copias/
- FinSi
- Si age > 20 and level >= 50
- FinSi
- Si age > 20 and level < 50
- FinSi
- Si age > 12 and age <= 20 and level >= 50 Entonces
- FinSi
- Si age > 12 and age <= 20 and level < 50 Entonces
- SiNo
- Si age > 12 and age <= 20 Entonces
- asig = 'Asignado a Mundo 1'
- SiNo
- asig = 'Asignado a Mundo 4'
- FinSi
- Si age > 12 and age <= 20 Entonces
- FinSi
- Devolver asig
- FinFuncion
- Funcion array[year, month, day] <- format_age(brithDay)
- Si brithDay.Longitud == 10 and brithDay.Contiene('/') Entonces
- day <- brithDay['day']
- month <- brithDay['month']
- year <- brithDay['year']
- Si day es int and mont es int and year es int:
- Si year > 1900 and 12 >= month > 0 and 31 >= day > 0 Entonces Retorne array[year, month, day]
- SiNo
- Retorne False
- FinSi
- SiNo
- Retorne False
- FinSi
- SiNo
- Retorne False
- FinSi
- Si brithDay.Longitud == 10 and brithDay.Contiene('/') Entonces
- FinFuncion
- Algoritmo main
- Escribir 'Por favor ingresa una CDIA'
- Leer CDIA
- Si cdia_validar(CDIA) == True Entonces
- Si cdia_unico(CDIA) == True Entonces
- fecha_correcta = False
- Mientras fecha_correcta == False Hacer:
- Escribir 'Por favor ingresa tu fecha de nacimiento en el formato * DD/MM/AAAA'
- Leer fecha_nacimiento
- Si formatearFecha(fecha_nacimiento) != False
- age = calcularEdad(fecha_nacimiento)
- fecha_correcta = True
- FinSi
- FinMientras
- Si age(fecha_nacimiento) => 12 Entonces
- Escribir 'Escribe un Alias':
- Leer alias
- Mientras alias.longitud < 5 or alias.sinEspacios Hacer
- Escribir 'El alias debe tener más de 5 caracteres y no debe tener espacios. Intenta otra vez...'
- Leer alias
- FinMientras
- Escribir 'Ya antes has jugado WorldCraft ASCII? 1=Sí ó 2=Nop'
- Leer answer
- Mientras answer != 1 and answer !=2 Hacer
- Escribe 'Escoge una opción válida! 1=Sí ó 2=Nop'
- Leer answer
- Si answer == Si Entonces
- answer = True
- Escribir 'Hasta qué nivel llegaste?'
- Leer level
- Mientras level <= 0 or level >100 Hacer
- Escriba 'Especifica un level existente en el juego...'
- Leer level
- FinMientras
- Si age >= 16 Entonces
- level = level + 2
- Si level > 100 Entonces
- level = 100
- FinSi
- FinSi
- SiNo
- answer = False
- Si age < 16 Entonces
- level = 2
- SiNo
- level = 1
- FinSi
- FinSi
- asig_world = world(age, answer, level)
- Escribir 'Bienvenido a WorldCraft ASCII! asig_world'
- SiNo:
- Escriba 'No tienes edad suficiente'
- FinSi
- SiNo
- Escriba 'CDIA ya existe!'
- FinSi
- Si cdia_unico(CDIA) == True Entonces
- SiNo
- Escriba 'CDIA Inválido'
- FinSi
- FinAlgoritmo
Implementar los algoritmos en Python