SóProvas


ID
3433585
Banca
VUNESP
Órgão
Prefeitura de Campinas - SP
Ano
2019
Provas
Disciplina
Programação
Assuntos

Considere a instrução Python a seguir:


    x = [

       print(i)

       for i in range(10) if i % 2 == 0

]


Após a execução dessa instrução no Python 3.7, a variável “x” conterá o valor:

Alternativas
Comentários
  • rodei no compilador https://repl.it/languages/python3 e a resposta foi:

    0

    2

    4

    6

    8

    alguém, por favor, consegue explicar?

    depender de professores do QC estaremos lascados.

  • A maldade na questão, pois a banca faz tudo isso para simplesmente pedir o valor de x. Porém a variável x é criada, mas não há valor algum sendo atribuído a ela, mas apenas à variável i, dessa forma quando executado o código irá imprimir para cada valor de i o valor none para x.

     

    Então x terá [None, None, None, None, None] enquanto i terá [0, 2, 4, 6, 8]. 

  • Leilanny Rodrigues, você está vendo a saída da variável i --> print(i)

    AO FINAL DO SEU CÓDIGO, ADICIONE PRINT(X).

    Aí você verá o valor de x.

  • x = [

    print(oquemuda)

    for oquemuda in range(10) if oquemuda % 2 == 0

    ]

    Se ele tivesse pedido i o resultado seria: 0,2,4,6,8

    coloquem assim no seu compilador que ajuda a entender a fórmula.

  • Comentário: MAX Q

    Em Python, existe algo chamado forma pitônica, basicamente, é um código enxuto com poucas linhas de código e robusto ao mesmo tempo. Uma das maneiras de materializar uma 'forma pitônica' é através da compreensão de lista. Exatamente o que é abordado na questão:

    .

    .

    A formatação do código é esta:

    x = [

    print(i)

    for i in range(10) if i % 2 == 0

    ]

    Basicamente, o código é lido assim: primeiramente o for i in range(10), posteriormente o if i % 2 == 0 e depois o print(i)

    1) O for i in range(10) resultará: 0,1,2,3,4,5,6,7,8,9

    2) Por sua vez, o if i % 2 == 0 filtrará os números impares, deixando passar somente os pares: 0,2,4,6,8

    print(i) irá imprimir os valores: 0,2,4,6,8

    .

    Neste exato momento você pensa:" Tá Max, é exatamente o que o Danilo falou!!!" Calma gafanhoto! Ta indo com muita sede ao pote.

    Continuando, o print imprimiu estes valores! Porém que valores foram atribuídos a lista x? Como eu mencionei, na primeira linha, o examinador quer os valores da variável (lista) x e não aquilo que o print imprimiu na tela.

    E como eu vejo isto Max? faça isto:

    x = [

    print(i)

    for i in range(10) if i % 2 == 0

    ]

    print(x)

    .

    A saída do print(x) será: [None, None, None, None, None]

    GABARITO ALTERNATIVA D

    Mas Max por que isto aconteceu?

    Aconteceu porque não for atribuído valores a lista, no lugar de atribuir os valores 0,2,4,6,8 o examinador mandou imprimir na tela, pega ratão né?

  • Pq apareceu hoje 5x e não só 1?

  • A função print retorna sempre None. Em geral, funções que fazem algo (funções com efeito coleteral) não retornam valores, ou seja, retornam None. Basicamente, temos um laço que itera a lista de números pares (if i % 2 == 0 é verdadeiro se o resto da divisão de i por 2 é zero, o que é equivalente a dizer que i é par) de 0 (incluído) a 10 (excluído) - o range é sempre assim -, chamando a função print em cada iteração. O resultado é uma lista dos 5 (são 5 números pares de 0 a 10) retornos de print: [None, None, None, None, None]