{"subject_id":"3a3cc48d00998155a63dcaa0ba88797f","topico":"Python: tipagem, estruturas, comprehensions, decorators, geradores, GIL","stems":["A respeito da linguagem de programação Python (versão 3.10.0 ou superior), julgue os próximos itens.","Acerca da linguagem Python, julgue os itens subsequentes.","A respeito de desenvolvimento de software, julgue os itens que se seguem.","Julgue os itens subsequentes, referentes a Python e Java.","Acerca de desenvolvimento de sistemas, julgue os próximos itens.","Com base no trecho de código precedente, escrito em Python, julgue os itens a seguir.","Acerca da linguagem de programação Python, julgue os itens que se seguem.","Acerca de linguagens de script, julgue os próximos itens.","Considerando linguagens de programação, julgue os itens que se seguem.","Julgue os itens subsecutivos, que se referem a conceitos de programação e banco de dados.","A respeito das bibliotecas NumPy e Pandas, julgue os itens a seguir.","Considerando que as bibliotecas necessárias estão corretamente instaladas, julgue os itens subsecutivos em relação à linguagem Python e R.","No que se refere à biblioteca Pandas, julgue o próximo item.","A respeito da biblioteca Numpy, julgue os itens a seguir.","Julgue os itens a seguir, relativos a Python e Java.","De acordo com o que dispõem os conceitos de segurança da informação, julgue os itens que se seguem.","Julgue os itens que se seguem, a respeito de Python, Java e orientação a objetos.","Julgue os próximos itens, relativos a HTML5, BootStrap e Python.","Com relação a programação e desenvolvimento de sistemas, julgue os itens a seguir.","Em relação aos conceitos de Python, julgue os seguintes itens."],"questions":[{"id":"8a8ba10f2a4e","number":47,"stem":0,"statement":"A execução da função fun1(), apresentada no código Python a seguir, resultará em um erro do tipo\n\nUnboundLocalError.\n            1 Var1 = 10\n            2 def fun1():\n            3 print(Var1)\n            4 Var1 += 1","answer":"C","source":{"slug":"INFRASA_26_ANALISTA","ano":2026},"explanation":{"verdict_reason":"Em Python, o escopo de um nome é decidido em tempo de compilação da função: como Var1 recebe atribuição no corpo de fun1() (Var1 += 1), o interpretador trata Var1 como variável local em toda a função, inclusive na linha anterior. O print(Var1) então tenta ler uma local que ainda não foi atribuída, e o resultado é UnboundLocalError. Para ler a global seria preciso declarar global Var1.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Escopo de variáveis e UnboundLocalError em Python","citation":"Python Language Reference, 4.2.2 — Resolution of names","trap_note":"Atribuir a um nome em qualquer ponto da função o torna local na função inteira. O erro aparece na leitura que vem antes da atribuição, não na atribuição."}},{"id":"903722fe77b3","number":48,"stem":0,"statement":"A execução do código Python a seguir não terá qualquer tipo de parada.\n\n1 def calcula_area(l, c):\n2 area = l * c\n3 breakpoint()\n4 return area","answer":"E","source":{"slug":"INFRASA_26_ANALISTA","ano":2026},"explanation":{"verdict_reason":"A função embutida breakpoint() existe justamente para interromper a execução: por padrão ela chama pdb.set_trace() e entrega o controle ao depurador, suspendendo o programa naquele ponto. Portanto a execução tem, sim, uma parada antes do return area.","distortion_type":"generalizacao","distorted_span":"não terá qualquer tipo de parada","corrected_statement":"A execução do código Python a seguir terá uma parada no depurador, provocada pela chamada de breakpoint().","concept":"breakpoint() e depuração em Python","citation":"Python — função embutida breakpoint() (PEP 553)","trap_note":"Negações absolutas — \"não terá qualquer\", \"em nenhuma hipótese\" — exigem apenas um contraexemplo para cair. Procure no código a única linha que derruba a afirmação."}},{"id":"fc5b39b1b39f","number":59,"stem":1,"statement":"A linguagem Python suporta programação orientada a objetos, incluindo o uso de classes, de herança e de polimorfismo.","answer":"C","source":{"slug":"TELEBRAS_25","ano":2025},"explanation":{"verdict_reason":"Python é multiparadigma e a orientação a objetos está na base da linguagem: tudo é objeto, inclusive funções, classes e módulos. A palavra class define classes, a herança é declarada entre parênteses no cabeçalho da classe e admite até herança múltipla, e o polimorfismo funciona por tipagem dinâmica, sem exigir interface declarada.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Python é multiparadigma com suporte pleno a OO","citation":null,"trap_note":"Suportar orientação a objetos não é ser exclusivamente orientada a objetos. Python aceita código procedural e funcional na mesma base; item que exigir exclusividade em qualquer direção está errado."}},{"id":"8a52265b34d0","number":60,"stem":1,"statement":"A linguagem Python possui tipagem dinâmica, pois os tipos das variáveis são definidos em tempo de execução.","answer":"C","source":{"slug":"TELEBRAS_25","ano":2025},"explanation":{"verdict_reason":"Em Python o nome não carrega tipo: quem tem tipo é o objeto, e o vínculo entre nome e objeto se estabelece na execução. Por isso a mesma variável pode receber um inteiro e depois uma string sem declaração e sem conversão explícita. Isso é exatamente tipagem dinâmica, e não deve ser confundido com tipagem fraca: Python continua sendo fortemente tipado e recusa somar inteiro com string.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"tipagem dinâmica e forte","citation":null,"trap_note":"Dinâmica × estática responde quando o tipo é verificado; forte × fraca responde se há conversão implícita. Python é dinâmica e forte. O item que chamar Python de fracamente tipada trocou o eixo."}},{"id":"a06f877e82ef","number":63,"stem":2,"statement":"Considere o código em Python a seguir.\n\nlista = [14, 57, 8, 14, 25, 57, 25, 57, 89]\nsaida = dict()\nfor item in lista:\n if item in saida:\n saida[item] += 1\n else:\n saida[item] = 1\nprint( saida )\n\nEsse código, ao ser executado, apresentará o seguinte resultado. {14: 2, 57: 3, 8: 1, 25: 2, 89: 1}","answer":"C","source":{"slug":"MP_CE_25_SERVIDOR","ano":2025},"explanation":{"verdict_reason":"O laço percorre a lista uma vez e usa o próprio valor como chave: a cada repetição incrementa o contador, a cada valor novo cria a entrada com 1. As contagens fecham — 14 aparece duas vezes, 57 três, 8 uma, 25 duas e 89 uma. E a ordem impressa é a ordem em que cada chave foi criada, não a ordem numérica, porque desde a versão 3.7 o dicionário preserva a ordem de inserção.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"contagem com dicionário e ordem de inserção","citation":null,"trap_note":"Em item de saída de dicionário confira duas coisas separadamente: os valores e a ordem das chaves. A ordem correta é a da primeira inserção; se o item apresentar as chaves ordenadas por valor ou em ordem crescente, é aí que costuma estar o erro."}},{"id":"92d1dffb0718","number":95,"stem":3,"statement":"x = [10, 20, 30]\n\ny = x\ny += [60, 50, 40]\nprint(x)\nprint(y)\n\nO código Python precedente, ao ser executado, apresentará o resultado a seguir.\n\n[10, 20, 30]\n[60, 60, 60]","answer":"E","source":{"slug":"TJ_PA_25_SERVIDOR","ano":2025},"explanation":{"verdict_reason":"y = x não copia a lista: cria um segundo nome para o mesmo objeto. E o operador += sobre lista é extensão no próprio objeto, equivalente a extend, e não rebinding como ocorreria com y = y + [...]. Logo os dois nomes continuam apontando para a mesma lista e os dois prints imprimem [10, 20, 30, 60, 50, 40].","distortion_type":"numero_errado","distorted_span":"[60, 60, 60]","corrected_statement":"O código Python precedente, ao ser executado, apresentará duas vezes o resultado [10, 20, 30, 60, 50, 40].","concept":"+= em lista altera o objeto compartilhado","citation":null,"trap_note":"Atribuir uma lista a outro nome compartilha o objeto. Guarde a diferença: y += [...] altera a lista de x; y = y + [...] cria lista nova e desfaz o compartilhamento. A mesma pergunta reaparece com listas passadas a funções."}},{"id":"b8f1a4369cee","number":56,"stem":4,"statement":"Em Python, listas de elementos podem ser preenchidas por qualquer tipo de objeto, porém a quantidade de objetos que terão essas listas só poderá ser alterada durante a criação delas.","answer":"E","source":{"slug":"TRT10_24","ano":2024},"explanation":{"verdict_reason":"A primeira metade está certa: a lista é heterogênea e aceita objetos de qualquer tipo, inclusive misturados. A segunda inverte a característica que define a lista — ela é mutável e de tamanho variável, e append, insert, extend, remove, pop e del alteram a quantidade de elementos a qualquer momento depois da criação. Tamanho fixo na criação é comportamento de array em outras linguagens, não de lista em Python.","distortion_type":"inversao","distorted_span":"a quantidade de objetos que terão essas listas só poderá ser alterada durante a criação delas","corrected_statement":"Em Python, listas de elementos podem ser preenchidas por qualquer tipo de objeto, e a quantidade de objetos que terão essas listas pode ser alterada a qualquer momento após a criação delas.","concept":"lista é mutável e de tamanho variável","citation":null,"trap_note":"Quando metade do item está claramente certa, o erro está na outra metade: a banca usa a parte verdadeira como âncora. Aqui o teste é sempre o mesmo — a lista cresce e encolhe depois de criada; quem não muda de tamanho é a tupla."}},{"id":"d9aafbf3f9cd","number":74,"stem":5,"statement":"Não é necessário que a estrutura if dentro da estrutura for esteja endentada para que o código funcione sem problemas.","answer":"E","source":{"slug":"MPO_24","ano":2024},"explanation":{"verdict_reason":"Em Python a endentação não é estilo, é sintaxe: é ela que delimita o bloco, no lugar das chaves de C e Java. Um if escrito no mesmo nível do for deixa de pertencer ao corpo do laço, e a primeira linha logo após os dois-pontos do for obrigatoriamente precisa estar endentada, sob pena de IndentationError. Portanto a endentação é necessária para que o código funcione.","distortion_type":"inversao","distorted_span":"Não é necessário que a estrutura if dentro da estrutura for esteja endentada","corrected_statement":"É necessário que a estrutura if dentro da estrutura for esteja endentada para que o código funcione sem problemas.","concept":"endentação delimita bloco em Python","citation":null,"trap_note":"Tudo que em C ou Java é opcional por ser estético, em Python costuma ser obrigatório por ser sintático. Diante de item que chame a endentação de recomendação, convenção ou boa prática, marque errado."}},{"id":"1201e2a53122","number":83,"stem":6,"statement":"Diferentemente do que ocorre em um loop FOR, em um loop WHILE, os comandos BREAK, CONTINUE e PASS são considerados sinônimos, pois podem ser utilizados com o mesmo objetivo.","answer":"E","source":{"slug":"CODEVASF_24","ano":2024},"explanation":{"verdict_reason":"Os três comandos fazem coisas distintas em qualquer laço: break encerra o laço; continue abandona apenas a repetição corrente e volta ao teste; pass não faz nada, é apenas o preenchimento sintático de um bloco que não pode ficar vazio. E o comportamento dos três é o mesmo em for e em while — não existe regra que os torne equivalentes dentro do while.","distortion_type":"troca_de_termo","distorted_span":"os comandos BREAK, CONTINUE e PASS são considerados sinônimos","corrected_statement":"Tanto em um loop FOR quanto em um loop WHILE, os comandos BREAK, CONTINUE e PASS têm efeitos distintos: break encerra o laço, continue passa à próxima repetição e pass não executa ação alguma.","concept":"break encerra, continue pula, pass não faz nada","citation":null,"trap_note":"Item que declara dois ou três comandos sinônimos quase sempre está errado: a banca aproveita a semelhança de contexto para achatar comandos distintos. Escreva a definição de cada um antes de julgar."}},{"id":"a54e7a263593","number":83,"stem":7,"statement":"Considere o código Python a seguir.\n\nfruits = ['abacaxi', 'banana', 'abacate',\n'morango', 'jabuticaba']\nfor i,j in enumerate(fruits):\n    print(“{i}”,j)\n\nA execução desse código tem o seguinte resultado.\n\n0 abacaxi\n1 banana\n2 abacate\n3 morango\n4 jabuticaba","answer":"E","source":{"slug":"CNJ_24","ano":2024},"explanation":{"verdict_reason":"A chave só é substituída por valor quando a string é de formatação — com o prefixo f, ou por meio de format. Como a string do print é literal comum, o que se imprime é o texto {i} tal qual, seguido do nome da fruta. A saída são cinco linhas começando por {i}, e não pelo índice 0, 1, 2, 3 e 4 que o enumerate produz e que o código não chega a exibir.","distortion_type":"troca_de_termo","distorted_span":"0 abacaxi","corrected_statement":"A execução desse código tem o seguinte resultado: {i} abacaxi, {i} banana, {i} abacate, {i} morango e {i} jabuticaba.","concept":"f-string × string comum com chaves","citation":null,"trap_note":"Antes de traduzir chaves em valores, procure o prefixo f na abertura da string ou a chamada de format no fim. Sem um dos dois, chave é caractere literal — é o mesmo teste em qualquer item de formatação de texto em Python."}},{"id":"648b04ec65ee","number":84,"stem":6,"statement":"A linguagem Python possui três tipos de sequências — list, tuple e range —, que são imutáveis, ou seja, não podem ser alteradas depois de sua criação.","answer":"E","source":{"slug":"CODEVASF_24","ano":2024},"explanation":{"verdict_reason":"Os três tipos citados são de fato as sequências básicas do Python, mas a imutabilidade não vale para os três: tuple e range são imutáveis, e list é a sequência mutável por excelência — aceita append, insert, remoção e atribuição por índice depois de criada. A regra está certa para dois dos tipos e foi esticada até o terceiro.","distortion_type":"escopo_ampliado","distorted_span":"que são imutáveis, ou seja, não podem ser alteradas depois de sua criação","corrected_statement":"A linguagem Python possui três tipos de sequências — list, tuple e range —, das quais tuple e range são imutáveis, ou seja, não podem ser alteradas depois de sua criação, enquanto list é mutável.","concept":"list é mutável; tuple e range são imutáveis","citation":null,"trap_note":"Monte a lista de mutáveis e imutáveis e confira item a item: mutáveis são list, dict, set e bytearray; imutáveis são tuple, range, str, frozenset, bytes e os numéricos. A banca costuma acertar dois elementos da enumeração e errar um."}},{"id":"0794d98edf36","number":104,"stem":8,"statement":"Considere o código Python a seguir.\n\nx = (\"laranja\",\"lima\",\"taiti\")\ny = [\"laranja\",\"lima\",\"taiti\"]\nprint (type(x))\nprint (type(y))\n\nEsse código, após executado, apresentará o seguinte resultado.\n\n<class 'list'>\n<class 'array'>","answer":"E","source":{"slug":"SEPLAG_CE_24","ano":2024},"explanation":{"verdict_reason":"Parênteses constroem tupla e colchetes constroem lista, de modo que type(x) devolve tuple e type(y) devolve list, nessa ordem. O resultado anunciado inverte a ordem e, pior, inventa um tipo: array não é tipo nativo do Python nem nome que type devolva — o array de verdade vem do módulo array ou do numpy, e ali o nome seria numpy.ndarray.","distortion_type":"troca_de_termo","distorted_span":"<class 'array'>","corrected_statement":"Esse código, após executado, apresentará o seguinte resultado: <class 'tuple'> e <class 'list'>.","concept":"parênteses fazem tupla; colchetes fazem lista","citation":null,"trap_note":"Fixe os delimitadores: () tupla, [] lista, {} dicionário e {x} conjunto. E desconfie sempre de nome de tipo que não existe no Python nativo — array e vector aparecem com frequência como isca."}},{"id":"453a55e3cdf1","number":58,"stem":9,"statement":"Na linguagem Python, os blocos de código são separados por chaves.","answer":"E","source":{"slug":"CNMP_23","ano":2023},"explanation":{"verdict_reason":"Python delimita bloco por endentação: os dois-pontos abrem a estrutura e o recuo consistente das linhas seguintes define o que pertence a ela. Chaves em Python constroem dicionário ou conjunto, e não bloco de código — quem usa chave para delimitar bloco é a família C, incluindo Java, C# e JavaScript.","distortion_type":"troca_de_termo","distorted_span":"os blocos de código são separados por chaves","corrected_statement":"Na linguagem Python, os blocos de código são separados por endentação.","concept":"bloco por endentação, não por chaves","citation":null,"trap_note":"Chaves em Python têm outro emprego: {} é dicionário vazio e {1, 2} é conjunto. Guarde os três delimitadores por função e o item se resolve de imediato."}},{"id":"40ab0bdc44ae","number":71,"stem":10,"statement":"A classe numpy.poly1d() permite a criação de arrays multidimensionais.","answer":"E","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"poly1d é, como o próprio nome diz, a classe de polinômios de uma variável: recebe a lista de coeficientes e permite avaliar, somar, multiplicar, derivar e integrar o polinômio. Quem cria arrays multidimensionais é np.array, com a classe ndarray por trás, além de construtores como zeros, ones, arange e reshape. A função descrita existe, mas pertence a outro objeto da biblioteca.","distortion_type":"atribuicao_errada","distorted_span":"permite a criação de arrays multidimensionais","corrected_statement":"A classe numpy.poly1d() permite a criação e a manipulação de polinômios de uma variável.","concept":"poly1d é polinômio; ndarray é o array n-dimensional","citation":null,"trap_note":"Quando o item descreve corretamente uma capacidade da biblioteca mas a pendura em outro nome, o teste é o significado do nome: poly1d traz polinômio e a dimensão 1 embutidos. Leia o nome como se fosse a definição."}},{"id":"779f4253ae97","number":72,"stem":10,"statement":"Se um conjunto de dados for armazenado em um array numpy, então, por meio dos seus métodos pré-definidos, será possível obter dados de resumo estatístico desse conjunto de dados.","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"O ndarray já traz métodos de agregação embutidos — mean, std, var, min, max, sum, cumsum — que reduzem o array inteiro ou operam por eixo. Não é preciso biblioteca adicional nem laço explícito para obter o resumo estatístico de um conjunto armazenado como array numpy.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"ndarray traz métodos de agregação estatística","citation":null,"trap_note":"Numpy é a base numérica e já resolve as estatísticas descritivas; Pandas acrescenta rótulo de linha e coluna e o describe pronto. Item que negue estatística ao numpy para atribuí-la exclusivamente ao Pandas está errado."}},{"id":"53a87dc372f9","number":73,"stem":10,"statement":"A biblioteca Pandas apresenta os dados em uma estrutura de DataFrame, composta por linhas e colunas.","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"O DataFrame é a estrutura central do Pandas: uma tabela bidimensional de colunas possivelmente heterogêneas, com índice de linhas e rótulos de colunas. A estrutura de uma dimensão só é a Series, que corresponde a uma única coluna desse conjunto.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"DataFrame é tabela; Series é a coluna","citation":null,"trap_note":"Guarde o par: Series é unidimensional e rotulada; DataFrame é bidimensional, linhas e colunas. A banca troca uma pela outra e atribui à Series a natureza tabular."}},{"id":"76913dd5deec","number":74,"stem":10,"statement":"O método describe() da biblioteca Pandas retorna as linhas superiores e inferiores do DataFrame.","answer":"E","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"describe devolve o resumo estatístico das colunas — contagem, média, desvio-padrão, mínimo, quartis e máximo. Quem devolve as primeiras linhas é head e quem devolve as últimas é tail. A ação descrita existe no Pandas, mas pertence a outros dois métodos.","distortion_type":"troca_de_termo","distorted_span":"retorna as linhas superiores e inferiores do DataFrame","corrected_statement":"O método describe() da biblioteca Pandas retorna o resumo estatístico das colunas do DataFrame.","concept":"describe resume; head e tail recortam linhas","citation":null,"trap_note":"Separe os métodos por finalidade: head e tail recortam linhas, info descreve tipos e memória, shape dá as dimensões e describe calcula estatísticas. Cada item de Pandas costuma se resolver com essa lista."}},{"id":"899f87e1872e","number":75,"stem":10,"statement":"A biblioteca numpy permite realizar operações matemáticas entre arrays de diferentes dimensões usando o mecanismo de broadcast.","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"Broadcasting é a regra pela qual o numpy alinha as formas pela direita e replica virtualmente as dimensões de tamanho 1 ou ausentes, permitindo operar arrays de dimensões diferentes sem copiar dados. É o que faz uma matriz somar com um vetor de uma linha, ou com um escalar, sem laço explícito.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"broadcasting alinha formas compatíveis","citation":null,"trap_note":"Broadcasting não é regra de qualquer par de formas: as dimensões comparadas precisam ser iguais ou uma delas valer 1. Item que afirme que o numpy opera arrays de formas quaisquer generalizou."}},{"id":"2fd60a69e74c","number":88,"stem":11,"statement":"A execução do código Python seguinte irá imprimir em tela, duas vezes, a concatenação das strings do array lista.\n\nstrings = [“Olá, “, “mundo!”]\nprint(''.join(strings))\nconcatena = ''.join(strings)\nprint(concatena)","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"join é método da string separadora e concatena os elementos do iterável usando essa string entre eles; com separador vazio, o resultado é a simples emenda dos dois itens, Olá, mundo!. O primeiro print calcula e imprime esse valor; o segundo guarda o mesmo resultado em concatena e o imprime de novo. Duas impressões idênticas, como o item afirma.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"str.join concatena com o separador à esquerda","citation":null,"trap_note":"A leitura correta é separador.join(lista), não lista.join(separador) — a ordem invertida é item errado clássico. E join só aceita elementos do tipo str; com número na lista, lança TypeError."}},{"id":"4831d64ac179","number":91,"stem":12,"statement":"import pandas as pd\n\na = [10, 78, 23]\nmyvar = pd.Series(a, index = [“x”, “y”, “z”])\nprint(myvar.describe())\n\nCaso o código em Python precedente seja executado, então será apresentado em tela o que se segue.\n\ncount 4.000000\nmean 38.000000\nstd 6.097091\nmin 10.000000\n25% 16.500000\n50% 23.000000\n75% 50.500000\nmax 78.000000\ndtype: float64","answer":"E","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"A Series tem três elementos, e não quatro: count sai 3 e a média é 111 dividido por 3, ou seja, 37, e não 38. O índice nomeado x, y e z apenas rotula as posições; não acrescenta elemento algum. Errado o primeiro número, toda a coluna de estatísticas que dele deriva também está errada.","distortion_type":"numero_errado","distorted_span":"count 4.000000","corrected_statement":"Caso o código em Python precedente seja executado, então será apresentado em tela count 3.000000 e mean 37.000000, entre as demais estatísticas.","concept":"describe conta os elementos, não os rótulos do índice","citation":null,"trap_note":"Em saída de describe, confira primeiro o count: ele tem de ser o número de elementos não nulos. Um count inflado é a distorção mais barata da banca, porque contamina média, desvio e quartis de uma vez."}},{"id":"2642482b61ed","number":92,"stem":13,"statement":"O resultado da execução do código Python a seguir resultará em valores diferentes para as variáveis c e d.\n\nimport numpy as np\na = np.array([[1,2],[3,4]])\nb = np.array([[4,3],[2,1]])\nc= np.dot(a,b)\nprint(c)\nd=a*b\nprint(d)","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"São operações diferentes sobre as mesmas matrizes. np.dot faz o produto matricial, somando produtos de linha por coluna, e devolve [[8, 5], [20, 13]]. Já o operador * em numpy é elemento a elemento, e devolve [[4, 6], [6, 4]]. Como as duas contas não coincidem, c e d realmente ficam com valores diferentes.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"np.dot é produto matricial; * é elemento a elemento","citation":null,"trap_note":"Em numpy, o asterisco nunca é multiplicação de matrizes: para isso existem np.dot, np.matmul e o operador arroba. Item que apresentar a * b como produto matricial trocou a operação."}},{"id":"864488422df1","number":93,"stem":13,"statement":"import numpy as np\n\na = np.array([(1, 2), (3, 4), (5, 6)],\ndtype=[('x', 'i4'), ('y', 'i4')])\nprint(a)\nprint(a.shape)\n\nO resultado da execução do código Python apresentado anteriormente é o que se segue.\n\n[[1 2]\n[3 4]\n[5 6]\n['x','i4']\n['y','i4']]\n(3, 2)","answer":"E","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"O dtype com campos nomeados x e y cria um array estruturado: cada elemento é um registro com dois campos, e não uma linha de dois elementos. Por isso o array é unidimensional, com três registros, e a.shape devolve (3,) — a forma não conta os campos como uma segunda dimensão. A impressão também sai como três tuplas, e não como a matriz seguida dos nomes dos campos.","distortion_type":"numero_errado","distorted_span":"(3, 2)","corrected_statement":"O resultado da execução do código Python apresentado anteriormente exibe os três registros [(1, 2) (3, 4) (5, 6)] e a forma (3,).","concept":"array estruturado tem forma unidimensional","citation":null,"trap_note":"shape conta dimensões, não colunas lógicas. Quando o dtype nomeia campos, o array continua com uma dimensão; a segunda posição da tupla de forma só aparece quando há aninhamento real de sequências."}},{"id":"f55ad23dee83","number":95,"stem":14,"statement":"Considere o seguinte código desenvolvido em Python.\n\nprint(len(“Banco”))\nprint(len([“Banco”, “Central”, “do Brasil”]))\nprint(len({“Presidente”: “Roberto Campos Neto”,\n“Email”: “presidencia@bcb.gov.br”}))\n\nAo ser executado, esse código apresentará o seguinte resultado.","answer":"C","source":{"slug":"BCB_24","ano":2023},"explanation":{"verdict_reason":"len é uma função única que pergunta ao objeto o seu tamanho, e cada estrutura responde com a sua própria contagem: a string devolve o número de caracteres, 5; a lista devolve o número de elementos, 3; e o dicionário devolve o número de chaves, 2, e não o número de caracteres nem o de pares somados aos valores. Os três prints saem 5, 3 e 2, nessa ordem.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"len conta caracteres, elementos ou chaves","citation":null,"trap_note":"len sobre dicionário conta chaves, não pares chave-valor multiplicados nem caracteres. É o ponto que a banca inverte quando quer transformar esse mesmo código em item errado."}},{"id":"fabac8bfb9b7","number":97,"stem":15,"statement":"O Pandas é uma das bibliotecas de Python que é utilizada para trabalhar com análise de dados e é utilizada em mineração de dados, por exemplo, por oferecer uma série de funções que permitem a leitura e manipulação de dados.","answer":"C","source":{"slug":"DATAPREV_23","ano":2023},"explanation":{"verdict_reason":"Pandas é a biblioteca de manipulação e análise de dados tabulares do Python: lê CSV, Excel, JSON, SQL e outros formatos, e oferece filtragem, agrupamento, junção, tratamento de ausentes e agregação sobre Series e DataFrame. É por isso que aparece como ferramenta corrente nas etapas de preparação e exploração em mineração de dados.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Pandas para leitura e manipulação de dados","citation":null,"trap_note":"Reparta o ecossistema por papel: numpy é cálculo numérico sobre arrays, Pandas é dado tabular rotulado, Matplotlib é gráfico e scikit-learn é aprendizado de máquina. Quase todo item de biblioteca Python se resolve nessa divisão."}},{"id":"ef2d4e253a2a","number":107,"stem":16,"statement":"O código em Python a seguir apresentará um erro de execução.\n\nr = 10\ni = 7\nc = complex(r, i) + (6 + 3j)\nprint(c)","answer":"E","source":{"slug":"SEFIN_FORTALEZA_CE_23","ano":2023},"explanation":{"verdict_reason":"complex(10, 7) constrói o número 10+7j e complexo é tipo nativo do Python, com literal imaginário escrito com o sufixo j. Somar (6+3j) é operação definida entre dois complexos e devolve (16+10j), que é impresso sem qualquer exceção. Não há erro de execução: o código roda até o fim.","distortion_type":"inversao","distorted_span":"apresentará um erro de execução","corrected_statement":"O código em Python a seguir será executado sem erro e imprimirá (16+10j).","concept":"complex é tipo nativo; j é o literal imaginário","citation":null,"trap_note":"Item que anuncia erro é afirmação de comportamento como qualquer outra: execute o trecho mentalmente antes de aceitar a falha. Em Python, o erro anunciado só existe se houver operação entre tipos realmente incompatíveis, nome inexistente ou endentação quebrada."}},{"id":"9ff302a2d9ea","number":109,"stem":16,"statement":"O resultado da execução do código em Python a seguir será\n\nMeu nome é Garfield.\nclass Animal:\n     nome = ““\n     def patas(self):\n          print(“Tenho quatro patas”)\nclass Gato(Animal):\n     def display(self):\n          print(“Meu nome é”, self.nome)\ngarfield = Gato()\ngarfield.nome = “Garfield”\ngarfield.patas()\ngarfield.display()","answer":"E","source":{"slug":"SEFIN_FORTALEZA_CE_23","ano":2023},"explanation":{"verdict_reason":"São duas chamadas, e o item só apresenta a saída da segunda. garfield.patas() é herdado de Animal e imprime Tenho quatro patas antes de qualquer outra coisa; só depois display() imprime Meu nome é Garfield. O resultado completo tem duas linhas, nessa ordem, e a que o item omite é justamente a que vem primeiro.","distortion_type":"troca_de_termo","distorted_span":"Meu nome é Garfield.","corrected_statement":"O resultado da execução do código em Python a seguir será Tenho quatro patas seguido de Meu nome é Garfield.","concept":"herança: o método da superclasse também é chamado","citation":null,"trap_note":"Conte as chamadas antes de conferir a saída. Quando o objeto invoca dois métodos, a saída anunciada precisa ter as duas linhas; apresentar só a última é a forma mais barata de a banca fazer você esquecer o método herdado."}},{"id":"7af37c7f464e","number":112,"stem":17,"statement":"Considere-se o seguinte código em Python.\n\nlista = ['I', 'N', 'P', 'I']\nlista = list(dict.fromkeys(lista))\nprint(lista)\n\nAo se executar o código em Python precedente, o resultado será o apresentado a seguir. ['I', 'I', 'N', 'P']","answer":"E","source":{"slug":"INPI_23","ano":2023},"explanation":{"verdict_reason":"dict.fromkeys usa os elementos como chaves, e chave de dicionário é única: o segundo I é descartado. Convertida de volta para lista, sobram três elementos, na ordem da primeira ocorrência, porque o dicionário preserva a ordem de inserção. A saída é ['I', 'N', 'P'] — o resultado anunciado mantém a duplicata e ainda ordena os elementos, duas coisas que a construção não faz.","distortion_type":"troca_de_termo","distorted_span":"['I', 'I', 'N', 'P']","corrected_statement":"Ao se executar o código em Python precedente, o resultado será o apresentado a seguir. ['I', 'N', 'P']","concept":"dict.fromkeys remove duplicatas preservando a ordem","citation":null,"trap_note":"Esse idioma existe justamente para eliminar repetições sem perder a ordem — é a alternativa ao set, que elimina a repetição mas não promete ordem nenhuma. Item que apresente saída ordenada alfabeticamente confundiu remoção de duplicata com ordenação."}},{"id":"2e75ce78c020","number":91,"stem":18,"statement":"Em Python, deque é uma coleção ordenada de itens em que novos elementos podem ser incluídos nas duas extremidades, ou seja, no início ou no fim.","answer":"C","source":{"slug":"SEPLAN_RR_22","ano":2022},"explanation":{"verdict_reason":"O deque do módulo collections é uma fila de duas pontas: existe append e appendleft para inserir, pop e popleft para retirar, e as quatro operações custam tempo constante. É justamente essa simetria entre as extremidades que o distingue da lista, cuja inserção no início obriga a deslocar todos os elementos.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"deque insere e remove nas duas extremidades","citation":null,"trap_note":"Guarde o par de estruturas do collections que a banca cobra: deque é fila de duas pontas, Counter conta ocorrências, defaultdict cria a chave ausente e OrderedDict preserva ordem. Cada uma responde a uma pergunta diferente."}},{"id":"1a3958da38f9","number":91,"stem":19,"statement":"Assuma o código Python a seguir.\n\na=3\nb=“ BNB “\nprint (a*b)\n\nA execução do código Python precedente gerará o seguinte erro.\n\nTypeError: unsupported operand type(s) for *:\n'int' and 'str'","answer":"E","source":{"slug":"BANCO_DO_NORDESTE_22","ano":2022},"explanation":{"verdict_reason":"Multiplicar inteiro por string é operação definida em Python: é a repetição da sequência, de modo que 3 vezes a string produz o texto repetido três vezes, sem exceção alguma. O TypeError anunciado ocorreria com a soma de inteiro com string, não com a multiplicação. O código roda e imprime a string triplicada.","distortion_type":"inversao","distorted_span":"A execução do código Python precedente gerará o seguinte erro","corrected_statement":"A execução do código Python precedente imprimirá a string repetida três vezes, sem gerar erro.","concept":"int vezes str é repetição de sequência","citation":null,"trap_note":"Separe as duas operações: int mais str é TypeError; int vezes str é repetição, e vale também para lista e tupla. A banca usa a existência real do TypeError na soma para tornar plausível o erro anunciado na multiplicação."}},{"id":"0af9ed3c179e","number":92,"stem":19,"statement":"Considere o código Python a seguir.\n\nmeuNome = “Pedro”\nmeuInsta = “@pedro”\ngosto = “programar em Python”\nprint (“Meu nome é {}, meu instagram é {} e\neu amo {}”.format (meuNome, meuInsta, gosto))\nprint (“Meu nome é {meuNome}, meu instagram é\n{meuInsta} e eu amo {gosto}”)\n\nA execução do referido código Python apresentará o seguinte resultado.\n\nMeu nome é Pedro, meu instagram é @pedro e eu\namo programar em Python\nMeu nome é Pedro, meu instagram é @pedro e eu\namo programar em python","answer":"E","source":{"slug":"BANCO_DO_NORDESTE_22","ano":2022},"explanation":{"verdict_reason":"A primeira linha sai como anunciado, porque há chamada a format substituindo as chaves vazias na ordem dos argumentos. A segunda não: a string não tem prefixo f nem chamada a format, de modo que as chaves permanecem literais e o que se imprime é Meu nome é {meuNome}, meu instagram é {meuInsta} e eu amo {gosto}. O item repete a primeira saída no lugar da segunda.","distortion_type":"troca_de_termo","distorted_span":"Meu nome é Pedro, meu instagram é @pedro e eu\namo programar em python","corrected_statement":"A execução do referido código Python apresentará a primeira linha com os valores substituídos e a segunda com as chaves literais: Meu nome é {meuNome}, meu instagram é {meuInsta} e eu amo {gosto}.","concept":"substituição exige format ou prefixo f","citation":null,"trap_note":"Item que mostra dois prints quase iguais está comparando duas formas de escrever a mesma coisa — e uma delas não funciona. Procure o mecanismo de substituição em cada linha separadamente: format explícito, prefixo f, ou nada."}}]}