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.

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 • 4E9E

31 de julho de 2024

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

import pandas as pd
data = {'Nome': ['Alice', 'João', 'Carlos', 'David', 'Evandro'],
        'Idade': [24, 27, 22, 32, 29],
        'Cidade': ['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Salvador', 'Brasília']}

df = pd.DataFrame(data)

Resposta

df.loc[2, 'Idade']

Vamos analisar o código passo a passo:

# Importando a biblioteca pandas e dando-lhe o apelido 'pd'
import pandas as pd

# Criando um dicionário com dados fictícios
# O dicionário contém três chaves: 'Nome', 'Idade' e 'Cidade'
# Cada chave está associada a uma lista de valores
data = {
    'Nome': ['Alice', 'João', 'Carlos', 'David', 'Evandro'],  # Lista de nomes
    'Idade': [24, 27, 22, 32, 29],  # Lista de idades relacionadas aos nomes
    'Cidade': ['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Salvador', 'Brasília']  # Lista de cidades
}

# Criando um DataFrame (estrutura de dados tabular) a partir do dicionário 'data'
df = pd.DataFrame(data)

As próximas tentativas de acesso causariam os seguintes erros:

df[Idade][2]
  • Este comando causa um erro porque 'Idade' não está definido como uma variável.

  • Para acessar a coluna 'Idade', você deve usar uma string (entre aspas): df['Idade'][2]

df.iloc[2, 'Idade']
  • Este comando causa um erro porque 'iloc' apenas permite indexação por posição inteira.

  • No 'iloc', você deve usar apenas números inteiros: df.iloc[2, 1] ou colunas selecionadas por nomes dentro de colchetes duplos

df.ix[2, 'Idade']
  • Este comando causa um erro porque 'ix' foi depreciado e não existe nas versões mais recentes do pandas.

  • Use 'loc' ou 'iloc' como alternativas apropriadas dependendo do seu caso.

Questão • 8A13

30 de julho de 2024

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

minha_lista = [[1, 2], [3, 4], [5, 6]]
resultado = [p + q for p, q in minha_lista]
print(resultado)

Resposta

[3, 7, 11]

Vamos analisar o código passo a passo:

# Definimos uma lista de listas, onde cada sublista possui dois elementos.
minha_lista = [[1, 2], [3, 4], [5, 6]]

# Usamos uma list comprehension para iterar sobre cada sublista em 'minha_lista'.
# Para cada sublista, descompactamos os dois elementos em 'p' e 'q' e somamos 'p' com 'q'.
# O resultado de cada soma é adicionado à nova lista 'resultado'.
resultado = [p + q for p, q in minha_lista]

# Imprimimos a lista 'resultado', que contém as somas dos elementos de cada sublista em 'minha_lista'.
print(resultado)  # Saída: [3, 7, 11]

Questão • S8E8

29 de julho de 2024

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

lista = ["InfinitePy", [2024, 7, 29], 3 + 4j]
print(lista[1][2])

Resposta

29

Vamos analisar o código passo a passo:

# Definimos uma lista chamada 'lista' com três elementos
# 'InfinitePy' é o primeiro elemento, uma string
# [2024, 7, 29] é o segundo elemento, uma lista contendo três números
# 3 + 4j é o terceiro elemento, um número complexo
lista = ["InfinitePy", [2024, 7, 29], 3 + 4j]

# Aqui estamos tentando imprimir o terceiro elemento do segundo elemento da lista principal
# Em outras palavras, estamos acessando o terceiro elemento da sub-lista [2024, 7, 29]
print(lista[1][2]) # Isso deve imprimir o valor 29

Questão • A77B

28 de julho de 2024

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

def divisao(a, b):
    try:
        resultado = a / b
    except ZeroDivisionError:
        print("Erro: Não é possível dividir por zero.")
        return None
    finally:
        print("Execução concluída.")

    return resultado

# Casos de teste
print(divisao(10, 0))

Resposta

Erro: Não é possível dividir por zero.
Execução concluída.
None

Vamos analisar o código passo a passo:

def divisao(a, b):
    # Tenta executar a divisão dos números fornecidos
    try:
        resultado = a / b
    except ZeroDivisionError:
        # Trata o erro caso a divisão por zero seja tentada
        print("Erro: Não é possível dividir por zero.")
        return None  # Retorna None se houver um erro de divisão por zero
    finally:
        # Este bloco será executado independente do resultado da divisão
        print("Execução concluída.")

    # Retorna o resultado da divisão se não houver erros
    return resultado

# Casos de teste para a função de divisão
print(divisao(10, 0))  # Testa a divisão por zero, que deve acionar o tratamento de erro

Em Python, as instruções try, except e finally são usadas para lidar com exceções (erros) que podem ocorrer durante a execução do código. Aqui está uma explicação detalhada:

Instrução try

A instrução try é usada para envolver um bloco de código que pode causar uma exceção. Se uma exceção ocorrer, a execução do código no bloco try é interrompida e passa para o bloco except.

Instrução except

O bloco except permite lidar com a exceção de uma maneira controlada. Você pode especificar diferentes exceções para capturar e tratá-las de maneiras diferentes. Se nenhum tipo de exceção específico for fornecido, o except capturará todas as exceções.

Instrução finally

O bloco finally contém código que será executado independentemente de uma exceção ter sido lançada ou não. É frequentemente usado para liberar recursos ou realizar alguma limpeza necessária.

Questão • B1E6

27 de julho de 2024

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

def foo(a, b, *args, **kwargs):
    result = a + b
    result += sum(args)
    result += sum(kwargs.values())
    return result

print(foo(1, 2, 3, 4, x=5, y=6))

Resposta

21

Vamos analisar o código passo a passo:

def foo(a, b, *args, **kwargs):
    """
    Adiciona os dois primeiros argumentos, qualquer número de argumentos posicionais
    adicionais e os valores de quaisquer argumentos de palavra-chave.

    Parâmetros:
    a (int ou float): O primeiro número.
    b (int ou float): O segundo número.
    *args (int ou float): Números adicionais.
    **kwargs (int ou float): Argumentos nomeados.

    Retorna:
    int ou float: A soma de todos os números de entrada.
    """
    # Soma dos dois primeiros argumentos posicionais obrigatórios
    result = a + b

    # Adicionando a soma de quaisquer argumentos posicionais adicionais
    result += sum(args)

    # Adicionando a soma dos valores de quaisquer argumentos de palavra-chave adicionais
    result += sum(kwargs.values())

    return result

# Exemplo de uso
print(foo(1, 2, 3, 4, x=5, y=6))

A palavra args é uma abreviação de "arguments" (ou "argumentos" em Português). Quando você usa *args em uma função, você está basicamente permitindo que essa função receba um número variável de argumentos posicionais. Vamos ver um exemplo:

def soma(*args):
    return sum(args)

print(soma(1, 2, 3))  # Saída: 6
print(soma(5, 10, 15, 20))  # Saída: 50

No exemplo acima, a função soma pode aceitar qualquer número de argumentos posicionais, e dentro dela, esses argumentos são tratados como uma tupla.

A palavra kwargs é uma abreviação de "keyword arguments" (ou "argumentos nomeados" em Português). Quando você usa **kwargs em uma função, você está permitindo que essa função receba um número variável de argumentos nomeados. Vamos ver um exemplo:

def exibir_informacoes(**kwargs):
    for chave, valor in kwargs.items():
        print(f"{chave}: {valor}")

exibir_informacoes(nome="Ana", idade=30, cidade="São Paulo")

No exemplo acima, a função exibir_informacoes pode aceitar qualquer número de argumentos nomeados, e dentro dela, esses argumentos são tratados como um dicionário.

Questão • 9E0D

26 de julho de 2024

Quais métodos foram utilizados para a lista inicial chegar na lista final?

lista_inicial = ['🍇', '🍉', '🍊', '🍋', '🍌']
lista_final   = ['🍑', '🍐', '🍎', '🍌', '🍋', '🍊', '🍉', '🍇']

Resposta

extend e reverse

Vamos analisar o código passo a passo:

# Definindo a lista inicial de emojis
lista_inicial = ['🍇', '🍉', '🍊', '🍋', '🍌']

# Definindo a lista final desejada para comparação
lista_final = ['🍑', '🍐', '🍎', '🍌', '🍋', '🍊', '🍉', '🍇']

# Novos itens que serão adicionados à lista inicial
novos_itens = ['🍎', '🍐', '🍑']

# Operação 1
# Adiciona os novos itens ao final da lista_inicial usando o método extend
lista_inicial.extend(novos_itens)

# Operação 2
# Inverte a ordem dos elementos na lista_inicial usando o método reverse
lista_inicial.reverse()

print(lista_inicial)
# Saída: ['🍑', '🍐', '🍎', '🍌', '🍋', '🍊', '🍉', '🍇']

A diferença entre os métodos append e extend em Python.

  • Ambos os métodos são usados ​​para adicionar elementos a uma lista, mas operam de maneiras diferentes.

  • O método append adiciona seu argumento como um único elemento ao final de uma lista. O comprimento da lista aumentará em um.

  • O método extend itera sobre seu argumento, adicionando cada elemento à lista, estendendo a lista. O comprimento da lista aumentará por quantos elementos estavam no iterável.

Questão • 9CEF

25 de julho de 2024

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

chaves = ('a', 'b', 'c')
valor = 0
dicionario = dict.fromkeys(chaves, valor)
print(dicionario)

Resposta

{'a': 0, 'b': 0, 'c': 0}

Vamos analisar o código passo a passo:

# Definimos uma tupla chamada 'chaves' que contém três elementos: 'a', 'b' e 'c'.
chaves = ('a', 'b', 'c')

# Definimos uma variável chamada 'valor' e a inicializamos com o valor 0.
valor = 0

# Utilizamos o método fromkeys da classe dict (dicionário) para criar um novo dicionário.
# Este método cria um dicionário onde todas as chaves são os itens da tupla 'chaves' 
# e todos os valores associados a estas chaves são iguais ao valor definido em 'valor' (neste caso, 0).
dicionario = dict.fromkeys(chaves, valor)

# Imprimimos o dicionário resultante.
print(dicionario)

Questão • 9CAA

24 de julho de 2024

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

items = ['🍫', '🍩', '🍪', '🧁', '🍦', '🍰', '🎂']

for item in items:
    if item == '🍪':
        print("🍪 foi encontrado!", end = " ")
        # break
else:
    print("🍪 não foi encontrado na lista.", end = " ")

Resposta

🍪 foi encontrado! 🍪 não foi encontrado na lista. 

Vamos analisar o código passo a passo:

# Lista de itens com diferentes emojis de sobremesas
items = ['🍫', '🍩', '🍪', '🧁', '🍦', '🍰', '🎂']

# Loop para iterar sobre cada item na lista 'items'
for item in items:
    # Condicional para verificar se o item atual é igual ao emoji de cookie ('🍪')
    if item == '🍪':
        # Imprime uma mensagem indicando que o cookie foi encontrado.
        # 'end = " "' impede que o print adicione uma nova linha automaticamente ao final.
        print("🍪 foi encontrado!", end = " ")
        # O comando 'break' foi comentado para que o loop não interrompa a sua execução ao encontrar o cookie.
        # Se descomentado, o loop pararia ao encontrar o primeiro cookie.
        # break
# Este else pertence ao 'for', não ao 'if'. Ele executa se o loop termina sem que 'break' seja executado.
else:
    # Como o comando break encontra-se comentado, imprime também a mensagem indicando que o cookie não foi encontrado.
    print("🍪 não foi encontrado na lista.", end = " ")

Questão • AE10

23 de julho de 2024

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

class MinhaClasse:
    def __init__(self, valor):
        self.valor = valor

    def imprime_valor(self):
        print(self.valor)

obj = MinhaClasse(123)
obj.imprime_valor()

Resposta

123

Vamos analisar o código passo a passo:

# Definimos uma classe chamada MinhaClasse
class MinhaClasse:
    # Método inicializador da classe, também conhecido como construtor
    def __init__(self, valor):
        # 'self' é uma referência à instância atual da classe
        # Atributo 'valor' é inicializado com o valor passado como argumento
        self.valor = valor

    # Método da classe que imprime o valor do atributo 'valor'
    def imprime_valor(self):
        # Imprime o valor do atributo 'valor' da instância atual
        print(self.valor)

# Criamos um objeto (ou instância) da classe MinhaClasse passando 123 como argumento
obj = MinhaClasse(123)

# Chamamos o método imprime_valor da instância 'obj', que irá imprimir o valor 123
obj.imprime_valor()

Definindo a classe e seu método inicializador (__init__):

class MinhaClasse:
    def __init__(self, valor):
        self.valor = valor
  • class MinhaClasse: Define uma nova classe chamada MinhaClasse.

  • def init(self, valor): Este é o método inicializador da classe. Ele é chamado automaticamente quando criamos uma nova instância da classe.

  • self.valor = valor: Inicializa o atributo valor da instância com o valor passado como argumento ao criar a instância.

Método para imprimir o valor:

def imprime_valor(self):
    print(self.valor)
  • def imprime_valor(self): Define um método na classe que não recebe argumentos além de self.

  • print(self.valor): Imprime o valor do atributo valor da instância.

Criando uma instância da classe e chamando um método:

obj = MinhaClasse(123)
obj.imprime_valor()
  • obj = MinhaClasse(123): Cria uma nova instância da classe MinhaClasse, passando 123 como argumento para o método __init__ . Isso configura o atributo valor da instância obj para 123.

  • obj.imprime_valor(): Chama o método imprime_valor da instância obj, que imprime o valor 123.

Questão • 98FD

22 de julho de 2024

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

lista = ['🥦', '🥕', '🌽', '🍅', '🌶️']
lista[1:3] = []
print(lista)

Resposta

['🥦', '🍅', '🌶️']

Comentários

Slicing: lista[1:3]

  • Este trecho seleciona uma fatia da lista começando do índice 1 até, mas não incluindo, o índice 3. Isso significa, os elementos nos índices 1 e 2.

  • Portanto, ele tem como alvo os elementos no índice 1 ('🥕') e no índice 2 ('🌽').

Atribuição: = []

  • Atribuir esta fatia a uma lista vazia [] remove efetivamente esses elementos.

  • A lista agora tem os elementos nessas posições removidos, resultando em '🥦', '🍅' e '🌶️'.