Questão nº 89

Questão de Tecnologia da Informação · FGV TCE-PA 2024 (nº 89)

FGV2024Auditor de Controle Externo - Informática - Analista de SistemasTecnologia da Informação
Gabarito: Cver comentário ↓

Considere o seguinte trecho de código Python que faz uma chamada a um serviço web e processa a resposta XML.

import requests
import xml.etree.ElementTree as ET
def get_student_name():
    url = "http://example.com/studentService"
    headers = {'Accept': 'application/xml'}
    response = requests.get(url, headers=headers)
    if response.status_code != 200:
        raise Exception("Failed : HTTP error code : " + str(response.status_code))
    root = ET.fromstring(response.content)
    names = root.findall('.//nomeAluno')
    name = names[1].text
    namesResp = root.findall('.//nomeResp')
    nameResp = namesResp[1].text
    if name == "Fulano de Tal":
        print("Nome: " + nameResp)
    elif name == "Beltrano da Silva":
        print("Nome: " + name)
    else:
        print("Aluno não reconhecido")
try:
    get_student_name()
except Exception as e:
    print(e)

Suponha que a resposta XML do serviço web seja a seguinte:

<alunos>
    <aluno>
        <matricula>12345</matricula>
        <nomeAluno>Fulano de Tal</nomeAluno>
        <emailAluno>fulano.tal@example.com</emailAluno>
        <nomeResp>Ciclano de Tal</nomeResp>
    </aluno>
    <aluno>
        <matricula>12346</matricula>
        <nomeAluno>Beltrano da Silva</nomeAluno>
        <emailAluno>beltrano.silva@example.com</emailAluno>
        <nomeResp>Antonio da Silva</nomeResp>
    </aluno>
</alunos>

O valor impresso pelo programa será:

Resposta comentada

Gabarito Alternativa C

Em Python, a função findall('.//tag') busca todos os elementos com o nome tag em qualquer nível da estrutura XML e retorna uma lista desses elementos. A indexação de listas em Python começa em 0, ou seja, [0] acessa o primeiro item, [1] o segundo, e assim por diante.

  • (A) Incorreta: Esta alternativa seria correta se a variável name fosse "Fulano de Tal" e o código imprimisse nameResp. No entanto, name é "Beltrano da Silva" devido à indexação names[1].
  • (B) Incorreta: Esta alternativa seria correta se a variável name fosse "Fulano de Tal" e o código imprimisse name. Mas name é "Beltrano da Silva".
  • (C) Correta: O código primeiro encontra todos os elementos <nomeAluno> e armazena-os na lista names. Como a lista é [<nomeAluno>Fulano de Tal</nomeAluno>, <nomeAluno>Beltrano da Silva</nomeAluno>], name = names[1].text atribui "Beltrano da Silva" à variável name. Em seguida, o código verifica elif name == "Beltrano da Silva":, que é verdadeiro. Assim, ele executa print("Nome: " + name), resultando em "Nome: Beltrano da Silva".
  • (D) Incorreta: Esta alternativa seria correta se a variável name fosse "Fulano de Tal" e o código imprimisse nameResp. No entanto, name é "Beltrano da Silva", e o bloco elif que é executado imprime o valor de name, não de nameResp. A armadilha aqui é que nameResp é calculado (Antonio da Silva), mas não é o que é impresso neste caminho de execução.
  • (E) Incorreta: Esta alternativa seria correta se a variável name não fosse nem "Fulano de Tal" nem "Beltrano da Silva". Como name é "Beltrano da Silva", uma das condições é satisfeita.

Fonte: FGV TCE-PA 2024 Auditor de Controle Externo - Informática - Analista de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho