terminado

This commit is contained in:
binlaab
2025-12-09 11:09:08 +01:00
parent 1defdd5e6c
commit 77fef039e0
8 changed files with 249 additions and 194 deletions

View File

@@ -1,32 +1,21 @@
import regex as re
from variables import *
def comprobarLetra(dni: str):
num = int(dni[:-1])
letra = dni[-1]
if letras[num % 23] != letra:
return False
else:
return True
from util import comprobarLetra, gradoDecimal, letraSigno
def validarTelefono(telefono): # revisar sesión 6 ej 1
def validarTelefono(telefono):
match = T.match(telefono)
if match is not None:
# if match.group('prefijo') is None:
# prefijo = '+34'
# else:
# prefijo = match.group('prefijo')
if match is not None and not match['num']:
return {
# 'prefijo': prefijo,
'parte1': match.group('parte1'),
'parte2': match.group('parte2'),
'parte3': match.group('parte3'),
}
return None
elif match is not None and match['num']:
return {
'num': match.group('num'),
}
else:
return None
def validarDni(dni):
match = D.match(dni)
@@ -46,7 +35,8 @@ def validarDni(dni):
'numero': match['numero'],
'letrafinal': match.group('letrafinal'),
}
return None
else:
return None
else:
return None
@@ -75,95 +65,42 @@ def validarInstante(instante):
return None
def decimalGrado(numero):
a = float(numero)
grados = int(numero)
b = a - grados
minutos = int(b*60)
c = b*60-minutos
segundos = int(c*60)
return grados,minutos,segundos
def validarCoordenada(cadena):
m = P.fullmatch(cadena)
if m is not None:
if m.group("Grados1"):
grados1 = m.group("Grados1")
grados2 = m.group("Grados2")
minutos1 = m.group("Minutos1")
minutos2 = m.group("Minutos2")
segundos1 = m.group("Segundos1")
segundos2 = m.group("Segundos2")
letra1 = m.group("Letra1")
letra2 = m.group("Letra2")
latitud = gradoDecimal(grados1,minutos1,segundos1)
longitud = gradoDecimal(grados2,minutos2,segundos2)
signo1 = letraSigno(letra1)
signo2 = letraSigno(letra2)
def gradoDecimal(grados,minutos,segundos):
a = float(segundos)/3600 + float(minutos)/60 + float(grados)
return a
else: # formato 1
signo1 = m.group("Signo1")
latitud = float(m.group("Coord1"))
signo2 = m.group("Signo2")
longitud = float(m.group("Coord2"))
if signo1 == '-':
latitud *= -1
def validarCoordenada(cadena, form):
if P.fullmatch(cadena):
M = P.fullmatch(cadena)
if M.group("Grados1"):
grados1 = M.group("Grados1")
grados2 = M.group("Grados2")
minutos1 = M.group("Minutos1")
minutos2 = M.group("Minutos2")
segundos1 = M.group("Segundos1")
segundos2 = M.group("Segundos2")
letra1 = M.group("Letra1")
letra2 = M.group("Letra2")
num1 = gradoDecimal(grados1,minutos1,segundos1)
num2 = gradoDecimal(grados2,minutos2,segundos2)
if letra1 == 'N':
simb1 = '+'
else:
simb1 = '-'
if letra2== 'E':
simb2 = '+'
else:
simb2 = '-'
else:
num1 = float(M.group("Coord1"))
num2 = float(M.group("Coord2"))
simb1 = M.group("Signo1")
simb2 = M.group("Signo2")
if signo2 == '-':
longitud *= -1
if form == 1:
return f'{simb1}{round(num1,4)}, {simb2}{round(num2,4)}'
elif form == 2:
grados1, minutos1, segundos1= decimalGrado(num1)
grados2, minutos2, segundos2 = decimalGrado(num2)
if simb1 == '+':
letra1 = 'N'
else:
letra1 = 'S'
if simb2 == '+':
letra2 = 'E'
else:
letra2 = 'W'
return f'{grados1}º {minutos1}\' {segundos1:}.0000" {letra1}, {grados2}º {minutos2}\' {segundos2}.0000" {letra2}'
elif form == 3:
grados1, minutos1, segundos1 = decimalGrado(num1)
grados2, minutos2, segundos2 = decimalGrado(num2)
if simb1 == '+':
letra1 = 'N'
else:
letra1 = 'S'
if simb2 == '+':
letra2 = 'E'
else:
letra2 = 'W'
return f'{grados1:0>3}{minutos1:0>2}{segundos1:0>2}.0000{letra1}{grados2:0>3}{minutos2:0>2}{segundos2:0>2}.0000{letra2}'
return {
'latitud': latitud,
'longitud': longitud
}
else:
return None
def validarEntrada(entrada):
telefono, dni, fecha, coordenadas, producto, coste = entrada.split(";")
tel = validarTelefono(telefono.strip())
dni = validarDni(dni.strip())
fecha = validarInstante(fecha.strip())
coordenadas = validarCoordenada(coordenadas.strip(), 1)
valores = {
'telefono': tel,
'dni': dni,
'fecha': fecha,
'coordenadas': coordenadas,
'producto': producto,
'coste': coste,
}
for k in valores.keys():
if valores[k] is None:
return None
return valores
else:
return None