Untitled
Cerbon
python
a year ago
4.4 kB
5
Indexable
import random
from time import sleep
import matplotlib.pyplot as plt
foto_com_microplastico: str = "Com Microplásticos"
foto_sem_microplastico: str = "Sem Microplástico"
def main():
coordenadas: list = pegar_coordenadas()
raio: int = pegar_raio_de_analise()
coord_para_qtd_microplastico: dict = {}
for coordenada in coordenadas:
ir_ate_coordenada(coordenada)
fazer_varredura(raio)
foto: str = tirar_fotos(10)
if foto == foto_com_microplastico:
print('Microplastico detectado')
amostra: str = coletar_amostra()
coord_para_qtd_microplastico[coordenada] = pegar_porcentagem_de_microplastico(amostra)
else:
print('Nenhum microplástico encontrado')
print(coord_para_qtd_microplastico)
criar_grafico(coord_para_qtd_microplastico)
def pegar_coordenadas() -> list:
coordenadas: list = []
print('Digite a coordenada desejada: [X,Z]')
while True:
coord_x: float = pegar_coordenada('x')
coord_z: float = pegar_coordenada('z')
coordenada: tuple = (coord_x, coord_z)
coordenadas.append(coordenada)
print_verde('Coordenada registrada com sucesso!')
print()
if pegar_mais_coordenadas():
continue
else:
break
return coordenadas
def pegar_coordenada(xz: str) -> float:
while True:
coord: str = input(f'{xz}: ')
if coordenada_valida(coord):
return float(coord)
else:
continue
def coordenada_valida(num_str: str) -> bool:
try:
float(num_str)
return True
except ValueError:
print_vermelho('Erro, digite novamente sem letras e com ponto (.) ao invés de vírgula (,)...')
return False
def pegar_mais_coordenadas() -> bool:
while True:
resposta: str = input('Deseja registrar mais um ponto de coordenada? [S/N]').strip()
if resposta in 'Ss':
return True
elif resposta in 'Nn':
break
else:
print_vermelho('Por favor responda apenas com Ss ou Nn')
continue
return False
def pegar_raio_de_analise() -> int:
while True:
raio: str = input("Digite o raio de analise do drone: ")
if numero_inteiro_valido(raio):
print()
return int(raio)
else:
continue
def ir_ate_coordenada(coordenada: tuple) -> None:
print(f'Indo até a coordenada {coordenada}...')
sleep(5)
print_verde('Coordenada alcançada com sucesso')
print()
def fazer_varredura(raio: int) -> None:
print(f'Fazendo varredura num raio de {raio} metros...')
sleep(5)
print_verde('Varredura completa com sucesso')
print()
def tirar_fotos(qtd: int) -> str:
print(f'Tirando {qtd} fotos...')
sleep(5)
print_verde('Fotos tiradas com sucesso')
print()
return foto_sem_microplastico if random.randint(0, 1) == 0 else foto_com_microplastico
def coletar_amostra() -> str:
print('Coletando amostra')
sleep(5)
print_verde("Amostra coletada com sucesso")
print()
return foto_com_microplastico
def pegar_porcentagem_de_microplastico(amostra: str) -> float:
if amostra == foto_sem_microplastico:
return 0
return float(str(f'{random.uniform(0, 95):.2f}'))
def print_verde(arg):
print(f'\033[32m{arg}\033[m')
def print_vermelho(arg):
print(f'\033[31m{arg}\033[m')
def numero_inteiro_valido(num_str: str) -> bool:
try:
int(num_str)
return True
except ValueError:
print_vermelho('Erro, digite novamente sem letras e um numero inteiro (1, 2, 3)...')
return False
def criar_grafico(coord_para_qtd_microplastico: dict) -> None:
coordenadas = list(coord_para_qtd_microplastico.keys())
porcentagens = list(coord_para_qtd_microplastico.values())
labels: list = [f"({x}, {y})" for x, y in coordenadas]
plt.figure(figsize=(10, 6))
plt.bar(labels, porcentagens, color='skyblue')
plt.xlabel('Coordenadas (x, y)')
plt.ylabel('Porcentagem de microplásticos')
plt.title('Microplásticos distribuídos por area')
plt.show()
if __name__ == "__main__":
main()
Editor is loading...
Leave a Comment