Prévia do material em texto
Avaliação Capítulo 3: Python para desenvolvimento de Inteligência Artificial: do básico às aplicações avançadas 0 de 0 pontos 1) Você está trabalhando em um sistema de processamento de pedidos e precisa verificar a integridade dos dados antes de continuar com o processamento. Um loop itera sobre uma lista de números de pedidos; se encontrar um número de pedido negativo, o loop deve parar imediatamente, indicando um problema nos dados. Qual será o valor de j quando o loop for interrompido? numeros_de_pedidos = [1023, 1204, 1122, -1, 1302] j = 0 while j < len(numeros_de_pedidos): if numeros_de_pedidos[j] < 0: break j += 1 * A) 4 B) 3 C) 2 D) 1 E) 0 Resposta correta B) 3 Feedback O loop itera sobre a lista numeros_de_pedidos e verifica cada elemento para ver se é um número negativo. O loop deve parar imediatamente quando encontra um número negativo, que é o sinal de um problema nos dados. Na lista numeros_de_pedidos = [1023, 1204, 1122, -1, 1302], o primeiro número negativo aparece na quarta posição da lista (índice 3, já que a indexação começa em 0). O loop inicia com j = 0 e incrementa j a cada iteração (j += 1). O loop verifica cada elemento até que encontre o número -1. Quando encontra -1, a condição if numeros_de_pedidos[j] < 0: é satisfeita e a instrução break é executada, interrompendo o loop. Neste ponto, j é igual a 3, pois o loop já incrementou j três vezes (0 para 1, 1 para 2, 2 para 3) antes de encontrar o número negativo. Portanto, o valor de j quando o loop é interrompido é 3. 2) Você está trabalhando em um sistema de monitoramento de qualidade do ar, onde os dados de várias estações são registrados em uma matriz. Cada linha representa uma hora diferente do dia e cada coluna representa uma estação de monitoramento diferente. Você também tem um dicionário que associa cada índice de coluna à respectiva estação de monitoramento. Seu objetivo é identificar e imprimir as estações de monitoramento que registraram níveis de poluição acima de um certo limite (por exemplo, 150) em qualquer hora do dia, juntamente com a hora em que isso ocorreu. Qual será a saída do seguinte código? Considere que a indexação das horas começa em 0 e o mapeamento das estações é fornecido pelo dicionário estacoes. A saída deve indicar claramente em qual hora e em qual estação o nível de poluição excedeu o limite. poluicao = [[120, 160, 140], [180, 110, 90], [130, 200, 120]] estacoes = {0: 'Centro', 1: 'Norte', 2: 'Sul'} limite = 150 for i, hora in enumerate(poluicao): for j, nivel in enumerate(hora): if nivel > limite: print(f"Hora {i}, Estação {estacoes[j]}: {nivel}") * A) Hora 0, Estação Norte: 160, Hora 1, Estação Centro: 180, Hora 2, Estação Norte: 200 B) Hora 0, Estação Centro: 160, Hora 1, Estação Norte: 180, Hora 2, Estação Sul: 200 C) Centro: 180, Norte: 160, 200, Sul: 140 D) Hora 0, Estação Norte: 160, Hora 1, Estação Centro: 180, Hora 2, Estação Norte: 200, Hora 2, Estação Sul: 120 E) nenhuma das alternativas anteriores Resposta correta A) Hora 0, Estação Norte: 160, Hora 1, Estação Centro: 180, Hora 2, Estação Norte: 200 Feedback O código está percorrendo a matriz poluicao, onde cada linha representa uma hora diferente do dia e cada coluna representa uma estação de monitoramento. O loop aninhado verifica o nível de poluição em cada estação a cada hora. Quando o nível de poluição excede o limite definido (150 no caso), a informação é impressa. Na matriz poluicao = [[120, 160, 140], [180, 110, 90], [130, 200, 120]]: Na primeira hora (i=0), a estação Norte (índice de coluna j=1) tem um nível de poluição de 160, que é maior que o limite. Na segunda hora (i=1), a estação Centro (índice de coluna j=0) tem um nível de poluição de 180, que também é maior que o limite. Na terceira hora (i=2), a estação Norte (índice de coluna j=1) tem um nível de poluição de 200, novamente maior que o limite. Consequentemente, as impressões correspondentes às estações e horas onde os níveis de poluição excedem o limite são: "Hora 0, Estação Norte: 160" "Hora 1, Estação Centro: 180" "Hora 2, Estação Norte: 200" As outras opções não correspondem aos dados e à lógica do código fornecidos: A opção b) mistura os nomes das estações com os índices errados. A opção c) não fornece informações sobre as horas e apresenta os dados de forma agregada, o que não corresponde à saída do código. A opção d) inclui uma leitura incorreta da Estação Sul na Hora 2. A opção e) é a opção "nenhuma das anteriores", que não é correta neste caso. 3) Considere o seguinte trecho de código Python: soma = 0 for i in range(1, 11, 2): soma += i Qual é o valor final de soma após a execução do loop for? * A) 25 B) 30 C) 20 D) 15 E) 10 Resposta correta A) 25 Feedback Este código define uma variável soma com valor inicial 0 e itera um loop for sobre um intervalo de números de 1 a 10 (o segundo argumento do range é não-inclusivo), com um passo de 2. Isso significa que i tomará os valores ímpares de 1 a 9 (inclusive). Em cada iteração, o código soma o valor atual de i à variável soma. Os valores de i que serão somados são: 1, 3, 5, 7 e 9. Vou somar esses números e fornecer o resultado. O valor final de soma após a execução do loop for é 25. Portanto, a alternativa correta é a A) 25. 4) Em um sistema de controle de acesso, o acesso é permitido apenas durante o horário comercial (das 9h às 18h) e se a pessoa tiver uma autorização especial. Analise o seguinte código: hora_atual = 17 tem_autorizacao = True if 9 <= hora_atual < 18 and tem_autorizacao: acesso_permitido = True else: acesso_permitido = False A pessoa conseguirá acessar o sistema? * A) Não, porque não está no horário comercial. B) Sim, porque tem autorização especial. C) Não, porque não tem autorização especial. D) Sim, porque está no horário comercial e tem autorização. E) Não é possível determinar com as informações fornecidas. Resposta correta D) Sim, porque está no horário comercial e tem autorização. Feedback De acordo com o código: hora_atual é igual a 17, o que significa que são 17h. tem_autorizacao é True, indicando que a pessoa tem autorização especial. O código permite acesso (acesso_permitido = True) se for dentro do horário comercial (das 9h às 18h) e se a pessoa tiver autorização especial. Como a hora_atual é 17, isso está dentro do horário comercial especificado de 9h às 18h. Além disso, a pessoa tem autorização especial (tem_autorizacao = True). Portanto, a condição do if é verdadeira e acesso_permitido será definido como True. A alternativa correta é: D) Sim, porque está no horário comercial e tem autorização. 5) Imagine que você está desenvolvendo um jogo de trivia em Python e precisa calcular a pontuação final de um jogador com base nas respostas corretas. A pontuação para cada resposta correta segue uma regra específica: ela é igual ao quadrado do número da questão. Por exemplo, a pontuação da primeira pergunta correta é 1 (1²), da segunda é 4 (2²), e assim por diante. Você escreve o seguinte código para calcular a pontuação total com base em um array respostas_corretas, que contém os números das perguntas que o jogador acertou: respostas_corretas = [1, 2, 4, 5] pontuacao_total = 0 for questao in respostas_corretas: pontuacao_total += questao ** 2 Qual é a pontuação final do jogador? * A) 30 B) 54 C) 46 D) 50 E) 40 Resposta correta C) 46 Feedback Para calcular a pontuação final do jogador com base no código fornecido, precisamos seguir os passos dados no loop. O código multiplica cada número da pergunta correta pelo quadrado desse número e adiciona esse valor à pontuação total. O código para calcular isso seria interpretado da seguinte forma: respostas_corretas = [1, 2, 4, 5] pontuacao_total = 0 for questao in respostas_corretas: pontuacao_total += questao ** 2 Se seguirmos o código como está, as pontuações seriam: Para a pergunta 1: 1² =1 Para a pergunta 2: 2² = 4 Para a pergunta 4: 4² = 16 Para a pergunta 5: 5² = 25 Vamos somar essesvalores para encontrar a pontuação total correta. A pontuação final do jogador, de acordo com o código e a regra de pontuação fornecidos, é 46. Portanto, a alternativa correta é a C) 46. 6) Em um programa Python para um sistema de gerenciamento de biblioteca, você está mantendo o registro do número total de livros e o número de novos livros adicionados mensalmente. Inicialmente, há 1000 livros. A cada mês, 50 novos livros são adicionados. Após três meses, um novo requisito é introduzido: a cada mês subsequente, além dos 50 novos livros, 10 livros são retirados da biblioteca. Qual trecho de código a seguir corretamente calcula o número total de livros após 5 meses? * A) B) C) D) E) Resposta correta E) Feedback A lógica que estamos buscando é aquela que começa com 1000 livros e adiciona 50 novos livros a cada mês durante 5 meses. A partir do quarto mês, também devemos subtrair 10 livros a cada mês. Opção A: Este código adiciona 50 livros a cada um dos 5 meses, mas não subtrai os 10 a partir do quarto mês. Opção B: Este código está incorreto porque adiciona 40 livros em vez de subtrair 10 a partir do quarto mês. Além disso, ele adiciona 50 livros nos primeiros 3 meses. Opção C: Este código adiciona 50 livros a cada mês e subtrai 10 livros a partir do terceiro mês. Esta é quase a lógica que queremos, mas precisamos subtrair 10 a partir do quarto mês, não do terceiro. Opção D: Este código está incorreto porque subtrai 10 livros nos primeiros 3 meses e adiciona 40 nos últimos 2 meses, o que não está de acordo com o enunciado. Opção E: Este código adiciona 50 livros a cada mês e subtrai 10 livros a partir do quarto mês, que é exatamente a lógica que estamos procurando. A opção correta é a E, pois ela segue a lógica exata descrita no enunciado do problema. 7) Você está desenvolvendo um sistema de análise de texto e precisa verificar a presença de certas palavras-chave em uma mensagem recebida. Se uma mensagem contém qualquer uma das palavras-chave, o sistema deve imprimir a palavra-chave encontrada e a posição em que ela aparece na mensagem pela primeira vez. Qual será a saída do seguinte código? Considere que a mensagem e as palavras-chave são fornecidas como strings e que a indexação começa em 0. mensagem = "O clima está agradável hoje, perfeito para um piquenique no parque." palavras_chave = ["chuva", "sol", "neve", "tempestade", "agradável"] for palavra in palavras_chave: posicao = mensagem.find(palavra) if posicao != -1: print(f"Palavra-chave '{palavra}' encontrada na posição {posicao}") * A) Palavra-chave 'clima' encontrada na posição 2 B) Palavra-chave 'sol' encontrada na posição 15 C) Palavra-chave 'agradável' encontrada na posição 15 D) Palavra-chave 'agradável' encontrada na posição 13 E) Palavra-chave 'piquenique' encontrada na posição 34 Resposta correta D) Palavra-chave 'agradável' encontrada na posição 13 Feedback O código itera sobre a lista palavras_chave e verifica a presença de cada palavra na mensagem usando o método .find(). Esse método retorna a posição inicial da primeira ocorrência da palavra na mensagem, ou -1 se a palavra não for encontrada. Na mensagem = "O clima está agradável hoje, perfeito para um piquenique no parque.", a única palavra da lista palavras_chave = ["chuva", "sol", "neve", "tempestade", "agradável"] que está presente na mensagem é "agradável". A contagem das posições na string começa em 0. A palavra "agradável" inicia após "O clima está ", que possui 12 caracteres (incluindo espaços e vírgula), o que significa que a primeira letra de "agradável" está na posição 13 (começando a contar do 0). Portanto, quando o método .find() procura por "agradável", ele retorna 13, e a mensagem correspondente é impressa, confirmando que a opção d) "Palavra-chave 'agradável' encontrada na posição 13" é a correta. 8) Você está desenvolvendo uma função em Python que deve processar uma string de entrada. A string contém várias palavras separadas por espaços e pode incluir pontuações. A função deve realizar as seguintes operações: 1- Remover todas as pontuações da string. 2- Inverter a ordem das palavras na string. 3- Converter todas as letras para maiúsculas. 4- Retornar a string processada. Por exemplo, se a string de entrada for "Olá, mundo!", a saída deve ser "MUNDO OLÁ". Qual das seguintes implementações atende corretamente a esses requisitos? * A) B) C) D)E) Resposta correta: C) Feedback A alternativa correta é a C), e aqui está o porquê: Remove todas as pontuações da string: A função str.translate(str.maketrans('', '', string.punctuation)) substitui todas as pontuações definidas em string.punctuation por uma string vazia, efetivamente removendo-as. Inverte a ordem das palavras na string: A expressão palavras[::-1] inverte a lista de palavras. A função split() divide a string em uma lista de palavras, e [::-1] inverte essa lista. Converte todas as letras para maiúsculas: O método upper() é chamado em toda a string reconstruída para converter todas as letras para maiúsculas. Retorna a string processada: O método join() é utilizado para reconstruir a string a partir da lista de palavras invertida, e o resultado é retornado. As outras alternativas falham por várias razões: A) e B) utilizam uma expressão regular que não está correta para remover todas as pontuações. Elas parecem tentar manter os caracteres que não são palavras (\W), o que não é o que queremos. D) não remove todas as pontuações corretamente e utiliza o método capitalize() que só irá capitalizar a primeira letra da string resultante, em vez de todas as letras. E) usa uma compreensão de lista para converter todos os caracteres alfabéticos para maiúsculas antes de dividir a string, o que irá capitalizar cada letra, mas não remove pontuações e a função reversed(palavras) não é aplicada corretamente para gerar uma string. Ela retorna um iterador reverso, que não pode ser diretamente unido com join. Portanto, a opção C) é a implementação que atende corretamente a todos os requisitos listados. 9) Em um projeto de análise de dados para prever tendências de mercado usando aprendizado de máquina, você precisa limpar e formatar um grande conjunto de dados. Qual biblioteca Python é mais indicada para manipular esses dados, oferecendo funcionalidades como tratamento de valores ausentes, conversão de tipos de dados e filtragem de linhas ou colunas? A) Keras B) PyTorch C) Pandas D) TensorFlow E) Matplotlib Resposta correta C) Pandas Feedback A alternativa correta é: C) Pandas Porque: Pandas é uma biblioteca de software escrita para a linguagem de programação Python para manipulação e análise de dados. Oferece estruturas de dados e operações para manipular tabelas numéricas e séries temporais. É particularmente bem adequada para a realização de tarefas de limpeza e formatação de conjuntos de dados grandes, tais como tratamento de valores ausentes, conversão de tipos de dados e filtragem de linhas ou colunas. Isso a torna uma ferramenta indispensável para análise de dados e pré-processamento de dados para aprendizado de máquina. As outras bibliotecas listadas têm propósitos diferentes: A) Keras e D) TensorFlow são bibliotecas de aprendizado profundo utilizadas para construir e treinar modelos de aprendizado de máquina, não para limpeza e formatação de dados. B) PyTorch é outra biblioteca de aprendizado profundo e também não é projetada para manipulação direta de dados. E) Matplotlib é uma biblioteca de plotagem para a linguagem de programação Python e sua extensão matemática NumPy. É usada para criar gráficos estáticos, interativos e animados, mas não para a limpeza e formatação de dados. 10) Suponha que você está trabalhando com visualização de dados usando a biblioteca Matplotlib em Python. Você recebeu um conjunto de dados contendo informações sobre as vendas mensais de diferentes categorias de produtos ao longo de um ano. Seu objetivo é criar um gráfico de linhas para visualizar as tendências de vendas dessas categorias aolongo do ano. Considere o seguinte código Python utilizando Matplotlib: import matplotlib.pyplot as plt import numpy as np # Dados: vendas mensais de 3 categorias de produtos ao longo de um ano meses = np.arange(1, 13) categoria_a = np.random.randint(100, 200, size=12) categoria_b = np.random.randint(150, 250, size=12) categoria_c = np.random.randint(50, 150, size=12) plt.figure(figsize=(10, 5)) plt.plot(meses, categoria_a, label='Categoria A', color='blue', marker='o') plt.plot(meses, categoria_b, label='Categoria B', color='red', linestyle='--') plt.plot(meses, categoria_c, label='Categoria C', color='green', linestyle='-.', marker='x') plt.title('Vendas Mensais por Categoria de Produto') plt.xlabel('Mês') plt.ylabel('Vendas') plt.legend() plt.grid(True) plt.xticks(meses) plt.yticks(range(0, 301, 50)) Com base no código fornecido, qual das seguintes visualizações será gerada? A) Um gráfico de linhas com três linhas de cores diferentes, cada uma representando uma categoria de produto. As linhas para as categorias A e C têm marcadores em cada ponto de dados, enquanto a linha para a categoria B é tracejada. B) Um gráfico de barras com três conjuntos de barras, cada conjunto representando um mês e cada barra dentro de um conjunto representando uma categoria de produto. C) Um gráfico de dispersão com três grupos de pontos, cada grupo representando uma categoria de produto. Os pontos são coloridos de acordo com a categoria. D) Um gráfico de linhas com uma única linha, representando a soma total das vendas de todas as categorias para cada mês. E) Um gráfico de linhas com três linhas de cores diferentes, mas todas as linhas são contínuas e sem marcadores, representando cada categoria de produto. Resposta correta A) Um gráfico de linhas com três linhas de cores diferentes, cada uma representando uma categoria de produto. As linhas para as categorias A e C têm marcadores em cada ponto de dados, enquanto a linha para a categoria B é tracejada. Feedback O código está usando a função plt.plot() do Matplotlib para criar gráficos de linhas. Cada chamada a plt.plot() adiciona uma nova linha ao gráfico. No código fornecido, há três chamadas a plt.plot(), uma para cada categoria de produto (A, B e C), o que significa que haverá três linhas no gráfico. Para a categoria A, a linha é configurada com a cor azul (color='blue') e marcadores circulares em cada ponto de dados (marker='o'). Para a categoria B, a linha é configurada com a cor vermelha (color='red') e um estilo de linha tracejada (linestyle='--'). Não há marcadores especificados para esta linha. Para a categoria C, a linha é configurada com a cor verde (color='green'), um estilo de linha de traço-ponto (linestyle='-.') e marcadores em forma de 'x' (marker='x'). As outras opções não correspondem ao código fornecido: A opção b) descreve um gráfico de barras, mas o código está criando um gráfico de linhas. A opção c) descreve um gráfico de dispersão, mas novamente, o código está criando um gráfico de linhas. A opção d) menciona uma única linha representando a soma total das vendas, o que não corresponde ao código que desenha três linhas separadas para cada categoria. A opção e) afirma que todas as linhas são contínuas e sem marcadores, o que não é verdade conforme a configuração das linhas para as categorias A e C no código.