Git Product home page Git Product logo

gs-1-python's Introduction

GS - Computational Thinking With Python

Integrantes 👋

  • João Marcelo Furtado Romero (RM555199)
  • Kayky Silva Stiliano (RM555148)

Instruções

O arquivo main.py é o arquivo principal que deve ser rodado e é recomendado usar o terminal no tamanho 75% ou tela cheia.

Explicação do Projeto 📖

Um app em Python, com o tema de poluição marinha, que dá ao usuário escolhas de seção onde há uma simulação em formato de "mini-game" que usuário escolhe uma praia e procura por coisas, uma seção de dados capturados pelos drones que novamente é escolhida a praia desejada no qual haverá duas opções de display das informações sendo uma "opções detalhadas" com todas os resultados encontrados para aquela praia e outra "opções específicas" onde o usuário escolhe qual dado ele deseja ver tendo a possibilidade de fazer novas pesquisas também. Por fim há uma seção de doação onde o usuário pode doar uma quantia para a empresa que ajuda diretamente na salvação dos oceanos.

Dependências 📦

  • helpers.py
  • simulacao.py
  • simulacao_paths.py
  • sysfunctions.py

Explicando o Código 🧑‍💻

def limpar_tela(linhas=20):
    for i in range(linhas):
        print("\n")
    return

Essa função imprime várias linhas em branco para "limpar" a tela do console. Parâmetros: linhas: Número de linhas em branco a serem impressas. O padrão é 20.
Descrição: O loop for imprime uma nova linha (\n) a cada iteração, criando a impressão de uma tela limpa.


def meu_in(lista, buscar):
    for i in range(len(lista)):
        elem = lista[i]
        if elem == buscar:
            return True
    return False

Essa função verifica se um elemento está presente em uma lista. Parâmetros: lista: A lista onde será feita a busca.
buscar: O elemento a ser buscado na lista.
Descrição: Itera sobre cada elemento da lista. Se o elemento é igual ao buscado, retorna True. Se o loop termina sem encontrar o elemento, retorna False.


def meu_index(lista, buscar):
    for i in range(len(lista)):
        elem = lista[i]
        if elem == buscar:
            return i
    return False

Essa função retorna o índice de um elemento em uma lista ou False se não for encontrado. Parâmetros: lista: A lista onde será feita a busca.
buscar: O elemento a ser buscado na lista.
Descrição: Itera sobre cada elemento da lista. Se o elemento é igual ao buscado, retorna seu índice. Se o loop termina sem encontrar o elemento, retorna False.


def forca_opcao(msg, lista, msg_erro):
    opcao = input(msg)
    while not meu_in(lista, opcao):
        limpar_tela()
        print(msg_erro)
        opcao = input(msg)
    return opcao

Essa função força o usuário a escolher uma opção válida a partir de uma lista. Parâmetros: msg: Mensagem a ser exibida ao solicitar a entrada do usuário.
lista: Lista de opções válidas.
msg_erro: Mensagem de erro a ser exibida se a opção não for válida.
Descrição: Solicita a entrada do usuário. Se a entrada não estiver na lista, limpa a tela e mostra uma mensagem de erro, repetindo a solicitação até que uma opção válida seja inserida.
Retorno: A opção válida escolhida pelo usuário.


def verifica_numero(msg, msg_erro):
    num = input(msg)
    while not num.isnumeric():
        print(msg_erro)
        num = input(msg)
    return int(num)

Essa função força o usuário a inserir um número válido. Parâmetros: msg: Mensagem a ser exibida ao solicitar a entrada do usuário.
msg_erro: Mensagem de erro a ser exibida se a entrada não for um número.
Descrição: Solicita a entrada do usuário. Se a entrada não for numérica, exibe uma mensagem de erro e repete a solicitação até que um número seja inserido.
Retorno: O número inserido pelo usuário, convertido para inteiro.


def print_de_opcoes(lista, line_break=True):
    output = ''
    for i in range(len(lista)):
        if line_break:
            output += f'- {lista[i]}\n'
        else:
            prefix = ''
            if i > 0:
                prefix = ', '
            output += f'{prefix}{lista[i]}'
    if line_break:
        print(output)
    return output

Essa função imprime uma lista de opções formatada, com ou sem quebras de linha. Parâmetros: lista: A lista de opções a serem impressas.
line_break: Booleano que determina se as opções devem ser impressas com quebras de linha (True) ou em uma única linha (False).
Descrição: Itera sobre a lista, adicionando cada elemento a uma string de saída. Se line_break é True, adiciona uma nova linha após cada elemento. Caso contrário, adiciona os elementos em uma linha, separados por vírgulas.
Retorno: A string formatada com as opções.


Explicando o Código 🧑‍💻

from helpers import forca_opcao, limpar_tela
from sysfunctions import sys_dados, sys_doacao
from simulacao import tela_simulacao

Descrição: Importa as funções forca_opcao e limpar_tela do módulo helpers, as funções sys_dados e sys_doacao do módulo sys_functions e a função tela_simulacao do módulo simulacao.


nome_da_empresa = "Ocean Guardians"
lista_menu_opcao = ['1', '2', '3', '0']
lista_praias = ["Maresias", "Juquehy", "Ubatuba"]

Descrição: lista_menu_opcao: Contém as opções de menu principais ('1', '2', '3', '0'). lista_praias: Lista das praias monitoradas pelo sistema.


while True:
    print(f"Seja bem-vindo à {nome_da_empresa}!!!")
    caminho = forca_opcao("Por qual caminho você deseja seguir:\n"
                          "1 - Simulação\n"
                          "2 - Dados capturados\n"
                          "3 - Doação\n"
                          "0 - Sair\n--> ", lista_menu_opcao, "Opção inválida! Digite apenas os números correspondentes ao caminho indicado")
    limpar_tela()
    if caminho == '1':
        tela_simulacao()
    elif caminho == '2':
        print(f"Bem-vindo ao banco de dados {nome_da_empresa},\n aqui você encontrará todos os tipos de dados "
              "capturados pelos nossos sensores oceânicos!\n")
        sys_dados()
    elif caminho == '3':
        print(f"Bem-vindo a seção de doação {nome_da_empresa}, \naqui você pode fazer doações de quantias "
              "de sua preferência para nos ajudar a manter os oceanos sempre monitorados e saudáveis!\n")
        sys_doacao()
    elif caminho == '0':
        break

Descrição: O loop while True exibe continuamente o menu principal até que o usuário escolha sair (opção '0').
Passos no Loop: Exibição do Menu: O sistema exibe uma mensagem de boas-vindas e solicita ao usuário que escolha uma das opções disponíveis no menu.
Processamento da Escolha: A função forca_opcao é usada para garantir que o usuário insira uma opção válida. Caso contrário, uma mensagem de erro é exibida.
Limpeza da Tela: limpar_tela é chamada para limpar a tela antes de continuar com a ação selecionada.
Execução da Função Correspondente: Dependendo da escolha do usuário, uma das três funções é chamada: Simulação: tela_simulacao; Dados Capturados: sys_dados; Doação: sys_doacao; Saída do Loop: Se a escolha for '0', o loop é interrompido e o programa termina.


Explicando o Código 🧑‍💻

from helpers import forca_opcao, limpar_tela, print_de_opcoes
from simulacao_paths import pegar_mapa, caminho_permitido

Descrição: Importa as funções forca_opcao, limpar_tela e print_de_opcoes do módulo helpers e as funções pegar_mapa e caminho_permitido do módulo simulacao_paths.


y_axis = 0
x_axis = 0

Descrição: Define variáveis globais para manter a posição atual do usuário no mapa.


def andar_mapa(direction):
    global y_axis
    global x_axis

    if direction == '1':
        y_axis -= 1
    elif direction == '3':
        y_axis += 1
    elif direction == '2':
        x_axis += 1
    elif direction == '4':
        x_axis -= 1

    updates_coordinates = [str(y_axis), str(x_axis)]
    return updates_coordinates

Parâmetros: direction: A direção em que o usuário deseja se mover ('1', '2', '3', '4').
Descrição: Atualiza as coordenadas y_axis e x_axis com base na direção fornecida. Retorna as novas coordenadas como uma lista de strings.


def tela_simulacao():
    simulacao_welcome_msg = ("Olá, seja bem vindo ao nosso sistema de "
                             "simulação de ajuda litorânea!!\n"
                             "Aqui, você pode nos ajudar a encontrar resíduos "
                             "espalhados pela praia de sua escolha.\n"
                             "Nossos escâners irão lhe ajudar a encontrar "
                             "resíduos na área, para que então "
                             "você possa reportar "
                             "para o nosso aplicativo.\n"
                             "Além de ajudar o meio ambiente "
                             "você ajuda a si mesmo "
                             "e outras pessoas atualizando-as sobre o "
                             "estado ambiental daquela região.")

    praias = ['Maresias', 'Juquehy', 'Ubatuba']
    print_de_praias = print_de_opcoes(praias)

    msg_escolha_praia = 'Escolha um praia para escanear!\n--> '
    msg_erro_escolha_praia = ('Por favor, escolha exatamente uma praia '
                              'da lista:\n'
                              f'{print_de_praias}')

    user_praia = forca_opcao(msg_escolha_praia, praias, msg_erro_escolha_praia)

    print(simulacao_welcome_msg)

Descrição: Exibe uma mensagem de boas-vindas. Mostra uma lista de praias disponíveis e força o usuário a escolher uma praia válida. Exibe a mensagem de boas-vindas após a seleção da praia.


    def each_step(allowed_command):
        comandos_disponiveis = print_de_opcoes(
            allowed_command, line_break=False)
        opcao_disp = f'As opções disponíveis são: 0, {comandos_disponiveis}\n'
        return opcao_disp

    qual_caminho_permitido = caminho_permitido()  # Começando em [0, 0]
    caminho_atual, lixo_achado = pegar_mapa(['0', '0'], user_praia)
    botao_de_voltar = '0'
    botao_de_reportar_lixo = 'achei'
    lixo_foi_achado = False

Parâmetros: allowed_command: Lista de comandos permitidos.
Descrição:Formata e retorna uma string com as opções de comandos permitidos.


    while True:
        if lixo_achado:
            qual_caminho_permitido.append(botao_de_reportar_lixo)

        allowed_options = each_step(qual_caminho_permitido)
        perguntar_user_texto = 'Para onde gostaria de ir?\n--> '
        error_msg = 'Por favor...\n' + allowed_options + '\n' + caminho_atual

        limpar_tela()
        print(each_step(qual_caminho_permitido))
        print(caminho_atual)

        if lixo_foi_achado:
            user_direction = forca_opcao(perguntar_user_texto,
                                         [botao_de_reportar_lixo] +
                                         [botao_de_voltar] +
                                         qual_caminho_permitido,
                                         error_msg)
        else:
            user_direction = forca_opcao(perguntar_user_texto,
                                         [botao_de_voltar] +
                                         qual_caminho_permitido,
                                         error_msg)

        if user_direction == botao_de_voltar:  # Quando o usuário quiser sair
            break
        elif user_direction == botao_de_reportar_lixo:
            print('Lixo reportado para o aplicativo '
                  'e para as autoridades locais')
            return 1
            break

        pegar_coordenadas = andar_mapa(user_direction)
        qual_caminho_permitido = caminho_permitido(pegar_coordenadas)
        caminho_atual, lixo_achado = pegar_mapa(pegar_coordenadas, user_praia)
        lixo_foi_achado = lixo_achado

Descrição: Inicializa variáveis para rastrear os caminhos permitidos, o caminho atual e se o lixo foi encontrado. Define constantes para os botões de voltar e reportar lixo.
Loop infinito que continua até o usuário decidir sair ou reportar lixo. Atualiza as opções de comandos permitidos com base na situação atual. Limpa a tela e exibe as opções disponíveis e o caminho atual. Força o usuário a escolher uma direção válida. Se o usuário escolhe voltar, o loop termina. Se o usuário escolhe reportar lixo, uma mensagem é exibida e o loop termina. Atualiza as coordenadas e os caminhos permitidos com base na escolha do usuário. Verifica se o lixo foi encontrado e atualiza a variável correspondente.


Explicando o Código 🧑‍💻

cima = '1'
direita = '2'
baixo = '3'
esquerda = '4'

Descrição: Define constantes para representar as direções de movimento.


def caminho_permitido(coordenadas=['0', '0']):
    # mapa = [
    #     (*)
    #     [0, 1, 2],
    #     [3, 4, 5],
    #     [6, 7, 8](***),
    #     (**)
    # ]

    # if 0 -> cima(extra*), direita ou baixo
    # if 1 -> esquerda, direita ou baixo
    # if 2 -> esquerda ou baixo

    # if 3 -> direita, cima ou baixo
    # if 4 -> all directions
    # if 5 -> esquerda, cima ou baixo

    # if 6 -> direita baixo(extra**),ou cima
    # if 7 -> esquerda, direita ou cima
    # if 8 -> esquerda, direita(extra***) ou cima

    # mapa = [
    #         [[-1, 0]]
    #         [[0, 0], [0, 1], [0, 2]],
    #         [[1, 0], [1, 1], [1, 2]],
    #         [[2, 0], [2, 1], [2, 2], [2, 3]],
    #         [[3, 0]]
    # ]

    permitir = []

    if coordenadas == ['0', '0']:
        permitir = [cima, direita, baixo]  # + 1 pra cima
    elif coordenadas == ['0', '1']:
        permitir = [direita, baixo, esquerda]
    elif coordenadas == ['0', '2']:
        permitir = [baixo, esquerda]

    elif coordenadas == ['1', '0']:
        permitir = [cima, direita, baixo]
    elif coordenadas == ['1', '1']:
        permitir = [cima, direita, baixo, esquerda]
    elif coordenadas == ['1', '2']:
        permitir = [cima, baixo, esquerda]

    elif coordenadas == ['2', '0']:  # + 1 pra baixo
        permitir = [cima, direita, baixo]
    elif coordenadas == ['2', '1']:
        permitir = [cima, direita, esquerda]
    elif coordenadas == ['2', '2']:  # + 1 pra direita
        permitir = [cima, direita, esquerda]

    elif coordenadas == ['-1', '0']:
        permitir = [baixo]
    elif coordenadas == ['2', '3']:
        permitir = [esquerda]
    elif coordenadas == ['3', '0']:
        permitir = [cima]

    return permitir

Parâmetros: coordenadas: Coordenadas atuais do usuário no mapa, com valor padrão ['0', '0'].
Descrição: Define os movimentos permitidos com base nas coordenadas atuais do usuário. Retorna uma lista de direções permitidas.


def pegar_mapa(coordenadas, user_praia):
    COMMANDOS = ['1.', '2.', '3.', '4.']
    praia1 = 'Maresias'
    praia2 = 'Juquehy'

    info_cima = (f'{user_praia}:\t\t '
                 f'0. Para Voltar\n\n')
    lixo_achado = False

    emoji_tronco = "🪵 (Tronco)"
    emoji_peixe = "🐟 (Peixe)"
    emoji_lixo = "🪨 (Lixo!!)"
    lixo_achado_texto = '(Digite "achei" para reportar)'

    label_cima = f'\t  {COMMANDOS[0]}\n'
    label_esquerda = f'{COMMANDOS[3]}\n'
    label_direita = f' {COMMANDOS[1]}\n'
    label_esquerda_direita = f'{COMMANDOS[3]}   \t \t{label_direita}'
    label_esquerda_direita_com_algo_na_direita = f'{COMMANDOS[3]}   \t \t{COMMANDOS[1]}(?)\n'
    label_baixo = f'\t  {COMMANDOS[2]} \n'

    seta_cima = ('\t^\n'
                 '\t|\n'
                 '\t|\t')

    seta_cima_sem_meio = ('\t^\n'
                          '\t|\n')

    seta_esquerda_com_meio = f'{COMMANDOS[3]}   \t|\n'

    seta_esquerda = ' < - -\n'
    seta_direita = '\t    - - > \n'
    seta_esquerda_direita = ' < - -     - - > \n'

    seta_baixo = ('\t|\n'
                  '\t|\n'
                  '\tv\n')

    algo_pra_cima = f'\t  {COMMANDOS[0]}(?)\n'
    algo_pra_baixo = f'\t  {COMMANDOS[2]}(?)\n'

    nada_cima = '\n\n\n'
    nada_baixo = '\n\n\n\n'

    # 0
    mapa_0 = (info_cima + algo_pra_cima
              + seta_cima + label_direita +
              seta_direita + seta_baixo + label_baixo)

    # 1
    mapa_1 = (info_cima + nada_cima +
              label_esquerda_direita + seta_esquerda_direita +
              seta_baixo + label_baixo)

    # 2
    mapa_2 = (info_cima + nada_cima +
              label_esquerda + seta_esquerda +
              seta_baixo + label_baixo)

    # 3
    mapa_3 = (info_cima + label_cima + seta_cima + label_direita +
              seta_direita + seta_baixo + label_baixo)

    # 4
    mapa_4 = (info_cima + label_cima + seta_cima_sem_meio +
              label_esquerda_direita + seta_esquerda_direita
              + seta_baixo + label_baixo)

    # 5
    mapa_5 = (info_cima + label_cima +
              seta_cima_sem_meio + seta_esquerda_com_meio +
              seta_esquerda +
              seta_baixo + label_baixo)

    # 6
    mapa_6 = (info_cima + label_cima + seta_cima + label_direita +
              seta_direita + seta_baixo + algo_pra_baixo)

    # 7
    mapa_7 = (info_cima + label_cima + seta_cima_sem_meio +
              label_esquerda_direita + seta_esquerda_direita + nada_baixo)

    # 8
    mapa_8 = (info_cima + label_cima + seta_cima_sem_meio +
              label_esquerda_direita_com_algo_na_direita +
              seta_esquerda_direita + nada_baixo)

    mapa_extra_cima_tronco = (info_cima +
                              f'   \t    {emoji_tronco}\n'
                              + nada_baixo + seta_baixo + label_baixo)

    mapa_extra_cima_peixe = (info_cima +
                             f'   \t    {emoji_peixe}\n'
                             + nada_baixo + seta_baixo + label_baixo)

    mapa_extra_cima_lixo = (info_cima +
                            f'   \t    {emoji_lixo}\n\n'
                            f'   \t{lixo_achado_texto}\n\n\n'
                            + seta_baixo + label_baixo)

    mapa_extra_direita_peixe = (info_cima + nada_cima +
                                f'{COMMANDOS[3]}   \t \t {emoji_peixe}\n'
                                ' < - -           \n'
                                + nada_baixo)

    mapa_extra_direita_tronco = (info_cima + nada_cima +
                                 f'{COMMANDOS[3]}   \t \t {emoji_tronco}\n'
                                 + seta_esquerda + nada_baixo)

    mapa_extra_direita_lixo = (info_cima + nada_cima +
                               f'{COMMANDOS[3]}   \t \t {emoji_lixo}\n'
                               f' < - -           {lixo_achado_texto}\n'
                               + nada_baixo)

    mapa_extra_baixo_tronco = (info_cima + label_cima +
                               seta_cima + nada_baixo
                               + f'   \t   {emoji_tronco}\n')

    mapa_extra_baixo_peixe = (info_cima + label_cima +
                              seta_cima + nada_baixo
                              + f'   \t   {emoji_peixe}\n')

    mapa_extra_baixo_lixo = (info_cima + label_cima + seta_cima + nada_baixo +
                             f'   \t   {emoji_lixo}\n{lixo_achado_texto}\n')

    if coordenadas == ['0', '0']:
        retornar_mapa = mapa_0
    elif coordenadas == ['0', '1']:
        retornar_mapa = mapa_1
    elif coordenadas == ['0', '2']:
        retornar_mapa = mapa_2

    elif coordenadas == ['1', '0']:
        retornar_mapa = mapa_3
    elif coordenadas == ['1', '1']:
        retornar_mapa = mapa_4
    elif coordenadas == ['1', '2']:
        retornar_mapa = mapa_5

    elif coordenadas == ['2', '0']:
        retornar_mapa = mapa_6
    elif coordenadas == ['2', '1']:
        retornar_mapa = mapa_7
    elif coordenadas == ['2', '2']:
        retornar_mapa = mapa_8

    elif coordenadas == ['-1', '0']:
        if user_praia == praia1:
            retornar_mapa = mapa_extra_cima_peixe
        elif user_praia == praia2:
            retornar_mapa = mapa_extra_cima_tronco
        else:
            retornar_mapa = mapa_extra_cima_lixo
            lixo_achado = True

    elif coordenadas == ['2', '3']:
        if user_praia == praia1:
            retornar_mapa = mapa_extra_direita_tronco
        elif user_praia == praia2:
            retornar_mapa = mapa_extra_direita_lixo
            lixo_achado = True
        else:
            retornar_mapa = mapa_extra_direita_peixe

    elif coordenadas == ['3', '0']:
        if user_praia == praia1:
            retornar_mapa = mapa_extra_baixo_lixo
            lixo_achado = True
        elif user_praia == praia2:
            retornar_mapa = mapa_extra_baixo_peixe
        else:
            retornar_mapa = mapa_extra_baixo_tronco

    else:
        retornar_mapa = 'SEM_MAPA'

    return retornar_mapa, lixo_achado

Parâmetros: coordenadas: Coordenadas atuais do usuário no mapa. user_praia: Nome da praia associada ao usuário.
Descrição: Define as variáveis e constantes usadas para criar os mapas. Com base nas coordenadas e no nome da praia do usuário, retorna um mapa formatado e um indicador se o lixo foi encontrado.
Retorno: retornar_mapa: Mapa formatado. lixo_achado: Booleano indicando se o lixo foi encontrado.


Explicando o Código 🧑‍💻

from helpers import forca_opcao, verifica_numero, meu_index, print_de_opcoes

Descrição: Importa as funções forca_opcao, verifica_numero, meu_index, print_de_opcoes do módulo helpers.


lista_tipo_dados = ['1', '2']
lista_dados_opcao = ['1', '0']
lista_dados_especificos = ['1', '2', '3', '4', '5', '6', '7']
lista_doacao_opcao = ['s', 'n', '0']
lista_praias = ["Maresias", "Juquehy", "Ubatuba"]

Descrição: Listas que contêm as opções que os usuários podem selecionar.


sensor_LDR = [90, 65, 47]
sensor_DHT_oxy = [7, 4, 2]
sensor_DHT_temp = [25, 20, 10]
sensor_pH = [8, 7.5, 6]
sensor_gas_CO2 = [50, 45, 30]
sensor_gas_CH4 = [1, 5, 15]
sensor_proximidade = [350, 150, 50]
total_doado = 0

Descrição: Listas que contêm valores capturados dos sensores dos drones em diferentes praias.


def sys_dados():
    def exibir_diagrama():
        print("\nDiagrama de informações:\n"
              "Luminosidade:\n - acima de 70% = normal\n - entre 50 e 69% = em alerta\n "
              "- abaixo de 50% = estado crítico / derramamento de óleo\n"
              "Oxigênio:\n - acima ou igual a 5mg/L = normal\n - entre 2.1 e 4.9mg/L = em alerta\n "
              "- abaixo ou igual a 2mg/L = estado crítico\n"
              "Temperatura:\n - entre 20 e 29ºC = normal\n - acima ou igual a 30ºC = temperatura elevada\n - abaixo ou igual a 19ºC = temperatura abaixo\n"
              "pH:\n - entre 7,5 e 8,4 = normal\n - abaixo de 7,5 = acidificação\n - acima de 8,4 = "
              "alcalinidade excessiva\n"
              "Gás Carbônico(CO2):\n - entre 45 e 55% = normal\n - caso contrário = concentração anormal\n"
              "Gás Metano(CH4):\n - entre 0 e 5% = normal\n - caso contrário = concentração excessiva\n"
              "Proximidade:\n - acima ou igual a 200m = lixo não detectado\n - abaixo ou igual a 199m = "
              "objeto detectado\n - abaixo ou igual a 50m = lixo detectado\n")

Descrição: Esta função permite ao usuário consultar dados ambientais das praias e a função interna exibe um diagrama de informações detalhando os intervalos normais, de alerta e críticos para cada tipo de dado.


    def exibir_resultado(local_praia):
        print(f"\nResultado: O mar da praia {lista_praias[local_praia]} está com uma luminosidade de "
              f"{sensor_LDR[local_praia]}%, oxigênio está em {sensor_DHT_oxy[local_praia]}mg/L, "
              f"temperatura está em {sensor_DHT_temp[local_praia]}ºC, o pH está em {sensor_pH[local_praia]}, "
              f"a quantia de CO2(Gás Carbônico) é de {sensor_gas_CO2[local_praia]}% e de CH4"
              f"(Gás Metano) é de {sensor_gas_CH4[local_praia]}%, e a distância do sensor de proximidade é de {sensor_proximidade[local_praia]} metros\n")

Descrição: Exibe todos os resultados de valores dos sensores para uma praia específica.


    def exibir_dado_especifico(local_praia, dado_especifico):
        if dado_especifico == '1':
            print("Luminosidade:\n - acima de 70% = normal\n - entre 50 e 69% = em alerta\n "
                  "- abaixo de 50% = estado crítico / derramamento de óleo\n"
                  f"\nLuminosidade está em {sensor_LDR[local_praia]}%")
        elif dado_especifico == '2':
            print("Oxigênio:\n - acima ou igual a 5mg/L = normal\n - entre 2.1 e 4.9mg/L = em alerta\n - abaixo ou igual a 2mg/L = estado crítico\n"
                  f"\nOxigênio está em {sensor_DHT_oxy[local_praia]}mg/L")
        elif dado_especifico == '3':
            print("Temperatura:\n - entre 20 e 29ºC = normal\n - acima ou igual a 30ºC = temperatura elevada\n - abaixo ou igual a 19ºC = temperatura abaixo\n"
                  f"\nTemperatura está em {sensor_DHT_temp[local_praia]}ºC")
        elif dado_especifico == '4':
            print("pH:\n - entre 7,5 e 8,4 = normal\n - abaixo de 7,5 = acidificação\n - acima de 8,4 = alcalinidade excessiva\n"
                  f"\npH está em {sensor_pH[local_praia]}")
        elif dado_especifico == '5':
            print("Gás Carbônico(CO2):\n - entre 45 e 55% = normal\n - caso contrário = concentração anormal\n"
                  f"\nQuantia de CO2(Gás Carbônico) é de {sensor_gas_CO2[local_praia]}%")
        elif dado_especifico == '6':
            print("Gás Metano(CH4):\n - entre 0 e 5% = normal\n - caso contrário = concentração excessiva\n"
                  f"\nQuantia de CH4(Gás Metano) é de {sensor_gas_CH4[local_praia]}%")
        elif dado_especifico == '7':
            print("Proximidade:\n - acima ou igual a 200m = lixo não detectado\n - abaixo ou igual a 199m = objeto detectado\n - abaixo ou igual a 50m = lixo detectado\n"
                  f"\nDistância do sensor de proximidade é de {sensor_proximidade[local_praia]} metros")
    while True:
        escolha_praia = forca_opcao(
            "Digite uma praia que deseja procurar dados\n --> ", lista_praias, "Opção Inválida!\nPor favor, escolha uma das praias disponíveis:\n" + print_de_opcoes(lista_praias))
        local_praia = meu_index(lista_praias, escolha_praia)
        escolha_tipo_dados = forca_opcao("Você deseja ver opções detalhadas ou específicas? (1 - opções detalhadas e 2 - opções específicas)\n--> ",
                                         lista_tipo_dados, "Digite apenas os números correspondentes ao caminho indicado")
        if escolha_tipo_dados == '1':
            exibir_diagrama()
            exibir_resultado(local_praia)
        elif escolha_tipo_dados == '2':
            dados_especifico = forca_opcao("Qual dado você deseja procurar?\n 1 - Luminosidade\n 2 - Oxigênio\n 3 - Temperatura\n 4 - pH\n 5 - Gás Carbônico(CO2)\n 6 - Gás Metano(CH4)\n 7 - Proximidade\n--> ",
                                           lista_dados_especificos, "Digite apenas os números correspondentes ao caminho indicado")
            exibir_dado_especifico(local_praia, dados_especifico)
        escolha_dados = forca_opcao("O que você deseja fazer?\n 1 - Nova pesquisa\n 0 - Voltar para o menu\n--> ",
                                    lista_dados_opcao, "Opção inválida! Digite apenas os números correspondentes ao caminho indicado")
        if escolha_dados == '1':
            continue
        elif escolha_dados == '0':
            break

Descrição: Exibe informações detalhadas e o valor de um sensor específico para a praia selecionada.
Lógica Principal: Solicita ao usuário que selecione uma praia e o tipo de dados (detalhado ou específico) que deseja ver. Se o usuário selecionar "opções detalhadas", chama exibir_diagrama() e exibir_resultado(). Se o usuário selecionar "opções específicas", solicita o dado específico e chama exibir_dado_especifico(). Após exibir os dados, pergunta se o usuário deseja fazer uma nova pesquisa ou voltar ao menu principal.


def sys_doacao():
    global total_doado
    while True:
        doacao = verifica_numero(
            "Digite a quantia que deseja doar\n--> ", "Digite apenas números inteiros!")
        if doacao <= 0:
            continue

        escolha_doacao = forca_opcao(f"Você deseja doar R${doacao:.2f} ?('s' para continuar, 'n' "
                                     "para voltar, 0 - para sair)\n--> ", lista_doacao_opcao,
                                     "Digite apenas os números correspondentes ao caminho indicado")
        if escolha_doacao == "s":
            total_doado += doacao
            print(f"\nMuitissímo obrigado pela sua doação de R${doacao:.2f} !!!\n"
                  f"Total doado: R${total_doado:.2f}\n")
            break
        elif escolha_doacao == "n":
            continue
        elif escolha_doacao == '0':
            break

Descrição: Esta função permite ao usuário fazer doações.
Lógica Principal: Solicita ao usuário que insira a quantia a ser doada. Pergunta ao usuário se ele deseja confirmar a doação, voltar ou sair. Se confirmado, adiciona a quantia ao total_doado e exibe uma mensagem de agradecimento. Se o usuário escolher voltar, solicita novamente a quantia da doação. Se o usuário escolher sair, a função termina.


Este projeto encontra sob a MIT License.

gs-1-python's People

Contributors

kstiliano avatar gh-johnny avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.