Questão de TI - Ciência de Dados e Inteligência Artificial — NumPy — CESPE / CEBRASPE 2025
- Código
- ce417538
- Banca
- CESPE / CEBRASPE
- Órgão
- EMBRAPA
- Ano
- 2025
- Cargo
- Pesq ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: CERTO. A função calcular_ndvi declara três parâmetros obrigatórios (arquivo_nir, arquivo_red, saida_ndvi) e, se qualquer um dos arquivos de entrada não for encontrado, a chamada rasterio.open() lança uma exceção que interrompe a execução — não há tratamento de erro no código. A afirmação está correta.
O NDVI (Normalized Difference Vegetation Index) é um índice espectral amplamente usado em sensoriamento remoto para quantificar a presença e a vitalidade da vegetação verde. A fórmula é:
em que NIR é a reflectância na banda do infravermelho próximo e RED é a reflectância na banda do vermelho. O resultado varia de -1 a +1: valores próximos de 1 indicam vegetação densa e saudável, valores próximos de 0 indicam solo exposto ou rocha, e valores negativos indicam água ou superfícies não vegetadas. No código, o denominador recebe um pequeno incremento (1e-10) para evitar divisão por zero quando NIR + RED for exatamente zero — uma prática comum de estabilização numérica.
A questão, porém, não cobra a fórmula do NDVI, e sim o comportamento da função em Python diante de arquivos inexistentes. Em Python, quando uma função é definida com parâmetros sem valor padrão, eles são obrigatórios — a chamada deve fornecer todos eles, sob pena de TypeError. Além disso, a biblioteca rasterio.open() levanta uma exceção (FileNotFoundError, que é uma subclasse de OSError) se o caminho do arquivo não existir. Como o código não possui nenhum bloco try/except para capturar essa exceção, ela se propaga e encerra a execução do programa imediatamente.
A distinção importante aqui é entre parâmetros obrigatórios e parâmetros opcionais. Um parâmetro se torna opcional quando recebe um valor padrão na definição (ex.: def f(a, b=10)). No código apresentado, os três parâmetros não têm valor padrão, portanto são todos obrigatórios. A banca explora exatamente essa confusão: o candidato pode achar que, por serem arquivos, algum deles seria opcional ou que o erro seria tratado internamente — mas não é o caso.
Na prática, se você executar calcular_ndvi('nir.tif', 'red.tif', 'saida.tif') e o arquivo nir.tif não existir, o Python exibirá uma mensagem de erro como FileNotFoundError: [Errno 2] No such file or directory: 'nir.tif' e o programa será interrompido. O mesmo ocorre se red.tif não existir. O arquivo de saída (saida_ndvi) só é criado depois que os dois arquivos de entrada são lidos com sucesso, então um erro nele também interromperia a execução, mas por um motivo diferente (falha ao criar/escrever o arquivo).
A banca testa se você sabe que parâmetros sem valor padrão são obrigatórios e que rasterio.open() lança exceção para arquivo inexistente. O candidato pode cair ao achar que a função "tenta" abrir e segue sem erro, ou que algum parâmetro seria opcional. Mas não há try/except no código — qualquer falha de abertura interrompe a execução. Fique atento: em Python, exceção não tratada = execução encerrada.
A função calcular_ndvi recebe exatamente três parâmetros: arquivo_nir, arquivo_red e saida_ndvi. Nenhum deles possui valor padrão, então todos são obrigatórios. Se qualquer um dos arquivos de entrada não for encontrado, rasterio.open() lança uma exceção (FileNotFoundError), que não é capturada por nenhum try/except no código — portanto, a execução é interrompida. A afirmação está correta em todos os seus termos: três parâmetros obrigatórios, erro ao não encontrar arquivo, e interrupção da execução.
Gabarito: CERTO
Link permanente: /questoes/ce417538