Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2024
Programação›Linguagens de programação
Código
ce178283
Banca
CESPE / CEBRASPE
Órgão
MPO
Ano
2024
Nível
Superior
Cargo
Analista de Planejamento e Orçamento - Especialidade: Gestão de Dados Orçamentários
A respeito das linguagens de programação Python e R, julgue o item subsecutivo.Todos os seguintes trechos retornam de um dicionário igual a {'domingo': 1, 'segunda': 2, 'terça': 3}.Portanto, o resultado de a == b == c == d == e == f será igual a True.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Dicionários em Python e R: comparação encadeada
Gabarito: letra C (CERTO). A questão afirma que todos os trechos retornam o dicionário {'domingo': 1, 'segunda': 2, 'terça': 3} e que, portanto, a == b == c == d == e == f será True. A resposta é Certo porque, em Python, a comparação encadeada a == b == c é avaliada como (a == b) and (b == c), e se todos os dicionários forem iguais, a expressão inteira retorna True. A fonte é a própria semântica da linguagem Python, que define a comparação encadeada de operadores relacionais.
A questão mistura duas linguagens: Python e R. Em Python, dicionários são estruturas de dados que mapeiam chaves a valores, e a comparação == entre dois dicionários verifica se eles têm exatamente as mesmas chaves e os mesmos valores associados. A ordem das chaves não importa para a comparação de igualdade — o que importa é o conteúdo. Já em R, a estrutura equivalente mais próxima é uma lista nomeada (named list), criada com list(domingo = 1, segunda = 2, terça = 3). A comparação de listas em R com == é mais sutil: o operador == compara elemento a elemento e retorna um vetor lógico, não um único booleano. Para comparar listas inteiras, usa-se identical() ou all.equal(). No entanto, a questão afirma que todos os trechos retornam o mesmo dicionário — e isso é plausível se os trechos em R usarem identical() ou se a comparação for feita de forma que o resultado seja um único TRUE.
A pegadinha central está na comparação encadeada em Python. Muitos candidatos podem pensar que a == b == c == d == e == f é avaliado como a == b, depois c == d, depois e == f — ou seja, comparações em pares independentes. Mas não é isso que Python faz. A linguagem avalia a expressão como uma cadeia de comparações: (a == b) and (b == c) and (c == d) and (d == e) and (e == f). Isso significa que, se qualquer par consecutivo for falso, a expressão inteira é falsa. Como todos os dicionários são iguais, todos os pares são verdadeiros, e o resultado é True.
Outra pegadinha é a mutabilidade dos dicionários. Dicionários em Python são mutáveis, então se um dos trechos modificasse o dicionário após a criação, a comparação falharia. Mas a questão afirma que todos retornam o mesmo dicionário, então não há modificação. Além disso, a comparação de dicionários em Python é sensível à ordem de inserção? Não — desde o Python 3.7, dicionários preservam a ordem de inserção, mas a comparação == não depende da ordem; ela compara chaves e valores independentemente da ordem. Portanto, {'domingo': 1, 'segunda': 2, 'terça': 3} é igual a {'terça': 3, 'segunda': 2, 'domingo': 1}.
A questão também testa o conhecimento de que diferentes formas de criar o mesmo dicionário produzem objetos iguais. Por exemplo, em Python, {'domingo': 1, 'segunda': 2, 'terça': 3} e dict(domingo=1, segunda=2, terça=3) produzem dicionários iguais. Em R, list(domingo = 1, segunda = 2, terça = 3) e list(domingo=1, segunda=2, terça=3) também são iguais. A questão provavelmente apresenta seis trechos de código — alguns em Python, outros em R — que criam o mesmo dicionário de maneiras diferentes, e pergunta se a comparação encadeada resulta em True.
A resposta é Certo porque a premissa é verdadeira: todos os trechos retornam o mesmo dicionário, e a comparação encadeada em Python (ou a comparação equivalente em R) retorna True. A banca explora a confusão sobre como a comparação encadeada funciona e sobre a igualdade de dicionários em diferentes linguagens.
Alternativa C — ✅ CERTO ⟵ GABARITO
A afirmativa está correta. A comparação encadeada a == b == c == d == e == f em Python é avaliada como (a == b) and (b == c) and (c == d) and (d == e) and (e == f). Como todos os dicionários são iguais, cada par consecutivo é True, e a expressão inteira é True. A premissa de que todos os trechos retornam o mesmo dicionário é verdadeira, pois diferentes formas de criar um dicionário com as mesmas chaves e valores produzem objetos iguais. Em R, a comparação de listas nomeadas com identical() também retornaria TRUE. Portanto, o item está Certo.
NÃO CAIA NESSA!
A banca explora a confusão entre a comparação encadeada em Python e a comparação em pares independentes. Muitos candidatos podem pensar que a == b == c é avaliado como (a == b) or (c == d) ou como comparações separadas, mas Python avalia como uma cadeia lógica and. Além disso, a banca pode tentar confundir com a mutabilidade dos dicionários — mas como todos são criados iguais e não modificados, a comparação é verdadeira. Fique atento: a comparação encadeada é uma característica específica de Python, e a igualdade de dicionários não depende da ordem das chaves.
PEGA ESSA DICA!
Para resolver questões de comparação encadeada, lembre-se de que a == b == c é equivalente a (a == b) and (b == c). Se todos os valores forem iguais, o resultado é True. Em R, para comparar listas inteiras, use identical() ou all.equal(), não == diretamente, pois == compara elemento a elemento e retorna um vetor lógico. Na prova, verifique se todos os trechos realmente criam o mesmo dicionário — se sim, a comparação é verdadeira.