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á:
- ANome: Ciclano de Tal
- BNome: Fulano de Tal
- CNome: Beltrano da Silva (alternativa correta)
- DNome: Antonio da Silva
- EAluno não reconhecido
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
namefosse "Fulano de Tal" e o código imprimissenameResp. No entanto,nameé "Beltrano da Silva" devido à indexaçãonames[1]. - (B) Incorreta: Esta alternativa seria correta se a variável
namefosse "Fulano de Tal" e o código imprimissename. Masnameé "Beltrano da Silva". - (C) Correta: O código primeiro encontra todos os elementos
<nomeAluno>e armazena-os na listanames. Como a lista é[<nomeAluno>Fulano de Tal</nomeAluno>, <nomeAluno>Beltrano da Silva</nomeAluno>],name = names[1].textatribui "Beltrano da Silva" à variávelname. Em seguida, o código verificaelif name == "Beltrano da Silva":, que é verdadeiro. Assim, ele executaprint("Nome: " + name), resultando em "Nome: Beltrano da Silva". - (D) Incorreta: Esta alternativa seria correta se a variável
namefosse "Fulano de Tal" e o código imprimissenameResp. No entanto,nameé "Beltrano da Silva", e o blocoelifque é executado imprime o valor dename, não denameResp. A armadilha aqui é quenameRespé 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
namenão fosse nem "Fulano de Tal" nem "Beltrano da Silva". Comonameé "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.