Descubra Python: Questões Diárias para Todos os Níveis.

Bem-vindo(a) ao nosso desafio diário de Python! Como amantes e entusiastas dessa linguagem incrível, criamos um espaço onde você pode aprimorar suas habilidades e testar seus conhecimentos todos os dias.

📢 Entre no nosso canal do WhatsApp e receba as questões em primeira mão.

A cada dia, postaremos uma nova questão de Python, abrangendo desde conceitos básicos até tópicos avançados. Quer você seja um iniciante ansioso para aprender ou um programador experiente buscando novos desafios, nossos exercícios são projetados para todos. Junte-se a nós nessa jornada de aprendizado contínuo.

🔔 Assine o InfinitePy Newsletter para mais recursos e uma abordagem passo a passo para aprender Python, e fique atualizado com as últimas tendências e dicas práticas.

Todos os exemplos também são explicados aqui 👨‍🔬, um notebook Google Colab para tornar seu aprendizado ainda mais interativo.

InfinitePy Newsletter - Sua fonte de aprendizado e inspiração em Python.

Questão • 84A3

06 de novembro de 2024

Qual é a saída para o código Python abaixo?

def mystery_function(x):
    result = 1
    while x > 0:
        result *= x
        x -= 1
    return result

mystery_function(4)

Resposta

24

Vamos analisar o código passo a passo:

def mystery_function(x):
    # Inicializa a variável 'result' com o valor 1
    # 'result' será usado para calcular o produto dos números
    result = 1

    # Enquanto 'x' for maior que 0, continue executando o bloco de código abaixo
    while x > 0:
        # Multiplica o valor atual de 'result' por 'x' e armazena de volta em 'result'
        # Isso efetivamente acumula o produto de 'x' com todos os inteiros abaixo dele
        result *= x

        # Decrementa 'x' em 1 a cada iteração
        # Isso é importante para eventualmente parar o loop quando 'x' chegar a 0
        x -= 1

    # Retorna o valor calculado de 'result', que no final será o fatorial de 'x' inicial
    return result

# Chama a função 'mystery_function' com o argumento 4
# Espera-se que o resultado seja 4 * 3 * 2 * 1 = 24
mystery_function(4)

Questão • 85AB

05 de novembro de 2024

Qual é a saída para o código Python abaixo?

def apresente_se(nome, idade, cidade="São Paulo"):
    print(f"Sou a {nome}, tenho {idade} anos e vivo em {cidade}.")

apresente_se(nome="Alice", idade=30)

Resposta

Sou a Alice, tenho 30 anos e vivo em São Paulo.

Vamos analisar o código passo a passo:

# Definimos uma função chamada 'apresente_se' que aceita três argumentos
# 'nome' e 'idade' são argumentos obrigatórios
# 'cidade' é um argumento opcional com um valor padrão "São Paulo"
def apresente_se(nome, idade, cidade="São Paulo"):
    # Utilizamos uma string formatada (f-string) para imprimir uma mensagem
    # Essa mensagem inclui o nome, a idade, e a cidade da pessoa
    print(f"Sou a {nome}, tenho {idade} anos e vivo em {cidade}.")

# Chamamos a função 'apresente_se' com argumentos nomeados
# Passamos o valor "Alice" para o parâmetro 'nome'
# Passamos o valor 30 para o parâmetro 'idade'
# Não passamos nada para 'cidade', então ele usa o valor padrão "São Paulo"
apresente_se(nome="Alice", idade=30)

# O resultado desta chamada será:
# "Sou a Alice, tenho 30 anos e vivo em São Paulo."

Questão • 26D6

04 de novembro de 2024

Qual é a saída para o código Python abaixo?

def decorator(func):
    def wrapper():
        print("(Início)", end = ' ')
        func()
        print("(Fim)", end = ' ')
    return wrapper

@decorator
def cumprimento():
    print("Olá", end = ' ')

cumprimento()

Resposta

(Início) Olá (Fim) 

Vamos analisar o código passo a passo:

# Definimos uma função chamada `decorator` que recebe outra função como argumento.
def decorator(func):
    # Dentro do `decorator`, criamos uma função `wrapper` que irá envolver (ou "embrulhar") a função original.
    def wrapper():
        # Imprime "(Início)" antes de chamar a função original. 
        # O parâmetro `end=' '` impede a mudança de linha após a impressão.
        print("(Início)", end=' ')
        # Chama-se a função original passada como argumento para o decorator.
        # Neste exemplo, seria a função `cumprimento`.
        func()
        # Imprime "(Fim)" após a execução da função original.
        # O `end=' '` novamente impede a mudança de linha, para que continue na mesma linha.
        print("(Fim)", end=' ')
    # Retorna a função `wrapper`, agora "decorada", em vez da função original.
    return wrapper

# Utilizamos o decorator `@decorator` logo acima da definição da função `cumprimento`.
# Isso significa que `cumprimento` será passado automaticamente como argumento para a função `decorator`.
@decorator
def cumprimento():
    # Essa é a função original que desejamos decorar.
    # Imprime "Olá" no terminal.
    print("Olá", end=' ')

# Ao chamar `cumprimento()`, na realidade estamos chamando a função `wrapper` retornada pelo `decorator`.
# Portanto, a saída será "(Início) Olá (Fim)" tudo na mesma linha.
cumprimento()

Questão • CEDB

01 de novembro de 2024

Qual é a saída para o código Python abaixo?

class CaixaDeBrinquedosMágica(type):
    def __init__(cls, nome, bases, attrs):
        cls._contador_brinquedos = 0
        super().__init__(nome, bases, attrs)

    def __call__(cls, *args, **kwargs):
        cls._contador_brinquedos += 1
        return super().__call__(*args, **kwargs)

class Brinquedo(metaclass=CaixaDeBrinquedosMágica):
    def __init__(self, forma_divertida):
        self.forma_divertida = forma_divertida

brinquedo1 = Brinquedo("🚗")
brinquedo2 = Brinquedo("🐻")
brinquedo3 = Brinquedo("🦕")

print(f"Quantos brinquedos na caixa? {Brinquedo._contador_brinquedos}")

Resposta

3

Vamos analisar o código passo a passo:

# Definindo uma classe metaclass chamada CaixaDeBrinquedosMágica
# Metaclasses são como classes de classes, ou seja, elas definem o comportamento de outras classes.
class CaixaDeBrinquedosMágica(type):
    # Método especial __init__, que é chamado quando a classe (não a instância) é criada
    def __init__(cls, nome, bases, attrs):
        # Inicializa um contador de brinquedos na classe que usa esta metaclasse
        cls._contador_brinquedos = 0
        # Chama o método __init__ da superclasse 'type'
        super().__init__(nome, bases, attrs)

    # Método especial __call__, que é chamado quando uma instância da classe (que usa esta metaclasse) é criada
    def __call__(cls, *args, **kwargs):
        # Incrementa o contador de brinquedos a cada vez que uma instância é criada
        cls._contador_brinquedos += 1
        # Chama o __call__ da superclasse para efetivamente criar a instância
        return super().__call__(*args, **kwargs)

# Criando a classe Brinquedo que usa a metaclasse CaixaDeBrinquedosMágica
class Brinquedo(metaclass=CaixaDeBrinquedosMágica):
    # Método especial __init__ de uma instância, que é chamado ao criar cada brinquedo
    def __init__(self, forma_divertida):
        # Armazena a forma divertida do brinquedo passado no momento da criação da instância
        self.forma_divertida = forma_divertida

# Cria várias instâncias da classe Brinquedo, cada uma com uma forma divertida específica
brinquedo1 = Brinquedo("🚗")
brinquedo2 = Brinquedo("🐻")
brinquedo3 = Brinquedo("🦕")

# Imprime o número total de brinquedos na 'caixa', que é na verdade o número de instâncias criadas
print(f"Quantos brinquedos na caixa? {Brinquedo._contador_brinquedos}")

Questão • 86C9

31 de outubro de 2024

Qual é a saída para o código Python abaixo?

dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 3}
print(dict1 != dict2)

Resposta

True

Vamos analisar o código passo a passo:

# Criamos dois dicionários, dict1 e dict2, que contêm pares chave-valor. 
# Um dicionário em Python é uma coleção de pares chave-valor, 
# onde cada chave é única. 
dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 3}

# Aqui, estamos comparando os dois dicionários usando o operador != 
# O operador != significa "diferente de", então ele verifica se os dois
# dicionários não são iguais.
# Python considera dois dicionários iguais se eles têm o mesmo conjunto de 
# chaves e os valores correspondentes a essas chaves também são iguais.
print(dict1 != dict2) 

# O print irá exibir True, porque os dicionários dict1 e dict2 são diferentes.
# Apesar de ambos terem as mesmas chaves ("a" e "b"), os valores associados 
# à chave "b" são diferentes (2 em dict1 e 3 em dict2).

Questão • 4AEB

30 de outubro de 2024

Qual é a saída para o código Python abaixo?

x = ['🥦', '🥕', '🌽']
y = x[:]
y.append('🍅')
print(x)

Resposta

['🥦', '🥕', '🌽']

Vamos analisar o código passo a passo:

# Inicializamos uma lista chamada 'x' que contém alguns emojis de vegetais.
x = ['🥦', '🥕', '🌽']

# Criamos uma cópia da lista 'x' usando a notação de 'slicing'.
# O '[:]' cria uma nova lista que começa no início e vai até o final da lista 'x'.
# Isso significa que 'y' é uma nova lista, e não apenas uma referência à lista 'x'.
y = x[:]

# Adicionamos um novo elemento (emoji de tomate) à lista 'y' usando o método 'append'.
# Isso modifica apenas a lista 'y' porque 'y' e 'x' são listas diferentes.
y.append('🍅')

# Imprimimos a lista 'x' para verificar seu conteúdo após a operação acima.
# Esperamos que ela ainda contenha apenas os emojis iniciais, sem o emoji de tomate.
print(x)  # Saída esperada: ['🥦', '🥕', '🌽']

Questão • E5F1

29 de outubro de 2024

Qual é a saída para o código Python abaixo?

from collections import deque

my_deque = deque(['a', 'b', 'c'])

my_deque.append('d')
my_deque.appendleft('z')
my_deque.pop()

print(list(my_deque))

Resposta

['z', 'a', 'b', 'c']

Vamos analisar o código passo a passo:

# Importando a classe deque a partir do módulo collections.
# Deque é uma abreviação de "double-ended queue" (fila de duas pontas).
# Ela permite adicionar e remover elementos de ambas as extremidades da fila com eficiência O(1).
from collections import deque

# Criando um deque com elementos iniciais 'a', 'b', e 'c'.
my_deque = deque(['a', 'b', 'c'])

# Adicionando o elemento 'd' ao final do deque.
# O método append adiciona um item ao final da lista, similar ao método de lista padrão.
my_deque.append('d')

# Adicionando o elemento 'z' ao início do deque.
# O método appendleft é específico do deque e insere um item na posição inicial.
my_deque.appendleft('z')

# Removendo e retornando o último elemento do deque.
# O método pop remove o item localizado na extremidade direita do deque.
my_deque.pop()

# Convertendo o deque em uma lista e imprimindo os elementos.
# A função list() é usada para transformar o deque em uma lista Python padrão,
# o que é útil para visualização e operações adicionais.
print(list(my_deque))

Questão • B4BA

28 de outubro de 2024

Qual é a saída para o código Python abaixo?

def verificar_numeros(numeros):
    for numero in numeros:
        if numero < 0:
            print("Encontrado um número negativo:", numero)
            break
    else:
        print("Todos os números são não-negativos.")

numeros = [1, 2, 3, 4]
verificar_numeros(numeros)

Resposta

Todos os números são não-negativos.

Vamos analisar o código passo a passo:

# Defina uma função chamada "verificar_numeros" que recebe uma lista de números como parâmetro.
def verificar_numeros(numeros):
    # Percorre cada número na lista fornecida.
    for numero in numeros:
        # Se o número atual for menor que zero, indica que é negativo.
        if numero < 0:
            # Imprime a mensagem informando que foi encontrado um número negativo, seguido do número.
            print("Encontrado um número negativo:", numero)
            # Interrompe o loop, pois apenas precisávamos encontrar um número negativo para parar.
            break
    # O 'else' aqui é um bloco que só será executado se o loop não foi interrompido pelo 'break'.
    else:
        # Se percorrer toda a lista sem encontrar números negativos, imprime que todos são não-negativos.
        print("Todos os números são não-negativos.")

# Cria uma lista de números para testar a função.
numeros = [1, 2, 3, 4]

# Chama a função "verificar_numeros" passando a lista de números como argumento.
verificar_numeros(numeros)

Questão • E961

25 de outubro de 2024

Qual é a saída para o código Python abaixo?

def x(n):
    return n ** 2

n = [1, 2, 3, 4]
result = list(map(x, n))

print(result)

Resposta

[1, 4, 9, 16]

Vamos analisar o código passo a passo:

# Definindo uma função chamada 'x' que recebe um argumento 'n'
def x(n):
    # A função retorna o quadrado de 'n', ou seja, n elevado à segunda potência
    return n ** 2

# Criando uma lista chamada 'n' com alguns números inteiros
n = [1, 2, 3, 4]

# Usando a função 'map' para aplicar a função 'x' a cada elemento da lista 'n'
# 'map(x, n)' retorna um iterador que aplica a função 'x' a cada elemento de 'n'
# Convertendo o iterador em uma lista para obter os resultados
result = list(map(x, n))

# Imprimindo a lista 'result', que contém os quadrados de cada número na lista original 'n'
print(result)

Questão • 85B9

24 de outubro de 2024

Qual é a saída para o código Python abaixo?

list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
zipped = list(zip(list1, list2))

print(zipped)

Resposta

{'a': [], 'b': [2], 'c': [], 'd': []}

Vamos analisar o código passo a passo:

# Definição de duas listas diferentes. 
# 'list1' é uma lista de caracteres/strings
list1 = ['a', 'b', 'c']

# 'list2' é uma lista de números inteiros
list2 = [1, 2, 3]

# A função zip() é usada para combinar elementos de duas ou mais listas.
# Ela cria pares a partir dos elementos nas mesmas posições das listas passadas.
# Aqui, estamos convertendo o objeto zip em uma lista usando list(),
# então 'zipped' conterá pares (tuplas) de elementos, um de cada lista original.
# Por exemplo, o primeiro elemento do resultado será ('a', 1).
zipped = list(zip(list1, list2))

# Imprime a lista de tuplas criada pela operação zip.
# Neste caso, o output será: [('a', 1), ('b', 2), ('c', 3)]
print(zipped)