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 • 3FF4

22 de novembro de 2024

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

import itertools

l1 = ['🏠', '🏚️']
l2 = ['🌳', '🌲']

result = list(itertools.product(l1, l2))
print(result)

Resposta

[('🏠', '🌳'), ('🏠', '🌲'), ('🏚️', '🌳'), ('🏚️', '🌲')]

Vamos analisar o código passo a passo:

# Importa o módulo itertools, que fornece funções criadoras de iteradores para 
# tarefas complexas como permutações, combinações, e o produto cartesiano.
import itertools

# Define uma lista l1 contendo dois elementos: '🏠' (uma casa) e '🏚️' (uma casa em ruínas).
l1 = ['🏠', '🏚️']

# Define outra lista l2 contendo dois elementos: '🌳' (uma árvore) e '🌲' (um pinheiro).
l2 = ['🌳', '🌲']

# Usa a função product do módulo itertools para calcular o produto cartesiano de l1 e l2.
# O produto cartesiano gera todas as combinações possíveis entre os elementos das listas.
# Isto é, cada elemento de l1 será pareado com cada elemento de l2.
result = list(itertools.product(l1, l2))

# Imprime o resultado do produto cartesiano, que é uma lista de tuplas.
# Cada tupla contém um elemento de l1 e um elemento de l2, representando todas as
# combinações possíveis entre os elementos das duas listas.
print(result)

Questão • 61F2

21 de novembro de 2024

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

frutas = ["maçã 🍎🍎🍎", "banana 🍌🍌", "cereja 🍒🍒🍒🍒", "melancia 🍉"]
inventario = {fruta.split()[0]: len(fruta.split()[1]) for fruta in frutas}
print(inventario)

Resposta

{'maçã': 3, 'banana': 2, 'cereja': 4, 'melancia': 1}

Vamos analisar o código passo a passo:

# Lista de frutas com ícones que representam a quantidade de cada fruta
frutas = ["maçã 🍎🍎🍎",    # representa 3 maçãs
          "banana 🍌🍌",    # representa 2 bananas
          "cereja 🍒🍒🍒🍒", # representa 4 cerejas
          "melancia 🍉"]    # representa 1 melancia

# Usando uma compreensão de dicionário para criar um inventário das frutas
inventario = {fruta.split()[0]: len(fruta.split()[1]) for fruta in frutas}

# A expressão acima faz o seguinte:
# 1. `fruta.split()` divide cada string da lista `frutas` em duas partes:
#    - O nome da fruta (ex: "maçã")
#    - Uma sequência de emojis (ex: "🍎🍎🍎")
# 2. `fruta.split()[0]` pega o nome da fruta.
# 3. `len(fruta.split()[1])` conta o número de emojis, que representa a quantidade de cada fruta.
# 4. `{fruta.split()[0]: len(fruta.split()[1]) for fruta in frutas}` cria um dicionário onde:
#    - As chaves são os nomes das frutas.
#    - Os valores são as quantidades contadas dos emojis.

# Imprime o dicionário inventário, que mostra o nome da fruta e sua quantidade
print(inventario)  # Saída esperada: {'maçã': 3, 'banana': 2, 'cereja': 4, 'melancia': 1}

Questão • E10C

19 de novembro de 2024

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

def word_count(s):
    words = s.split()
    word_map = {}
    for word in words:
        if word in word_map:
            word_map[word] += 1
        else:
            word_map[word] = 1
    return word_map

text = "🍪 🍩 🍫 🍩 🍩 🍫 🍫 🧁 🍪"
print(word_count(text))

Resposta

{'🍪': 2, '🍩': 3, '🍫': 3, '🧁': 1}

Vamos analisar o código passo a passo:

def word_count(s):
    # A função 'word_count' recebe uma string 's' e retorna um dicionário
    # com a contagem de ocorrências de cada palavra.

    # Divide a string 's' em uma lista de palavras usando o método 'split()'
    # que, por padrão, divide a string em espaços em branco.
    words = s.split()

    # Cria um dicionário vazio para armazenar a contagem de cada palavra.
    word_map = {}

    # Percorre cada palavra na lista 'words'.
    for word in words:
        # Verifica se a palavra já está no dicionário 'word_map'.
        if word in word_map:
            # Se a palavra já estiver no dicionário, incrementa sua contagem em 1.
            word_map[word] += 1
        else:
            # Se a palavra não estiver no dicionário, adiciona-a com contagem inicial de 1.
            word_map[word] = 1

    # Retorna o dicionário 'word_map' com a contagem de cada palavra.
    return word_map

# String de exemplo contendo emojis.
text = "🍪 🍩 🍫 🍩 🍩 🍫 🍫 🧁 🍪"

# Chama a função 'word_count' passando a string 'text'
# e imprime o resultado, que é um dicionário com a contagem de cada emoji.
print(word_count(text))

Questão • 8AB9

18 de novembro de 2024

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

lista = [42, -7, {"nome": "Alice", "idade": 30}, 3.14, -0.001, True, (1, "dois", 3.0), None, "InfinitePy", 3 + 4j]
print(lista[2]['nome'])

Resposta

Alice

Vamos analisar o código passo a passo:

# Criamos uma lista chamada 'lista' que contém diversos tipos de elementos
# Lembre-se que em Python, uma lista pode armazenar vários tipos de dados diferentes.
lista = [
    42,  # Um número inteiro
    -7,  # Outro número inteiro, mas negativo
    {"nome": "Alice", "idade": 30},  # Um dicionário com pares de chave-valor
    3.14,  # Um número de ponto flutuante (float), representa um valor decimal
    -0.001,  # Outro float, negativo
    True,  # Um valor booleano que representa verdadeiro
    (1, "dois", 3.0),  # Uma tupla que contém um inteiro, uma string e um float
    None,  # Um valor especial em Python que representa a ausência de um valor
    "InfinitePy",  # Uma string, que é uma sequência de caracteres
    3 + 4j  # Um número complexo, com parte real (3) e parte imaginária (4j)
]

# Agora, queremos imprimir o valor associado à chave 'nome' dentro do dicionário.
# Acessamos o terceiro elemento da lista com lista[2], que é o dicionário.
# Em seguida, usamos ['nome'] para obter o valor associado à chave 'nome'.
print(lista[2]['nome'])  # Isso irá imprimir "Alice" na saída.

Questão • 427A

13 de novembro de 2024

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

with open("python.txt", "r+") as f:
    f.write("Python foi criado por Guido van Rossum no final dos anos 1980, lançado em 1991, e seu nome vem da série de comédia 'Monty Python', não da cobra.\n")
    f.write("Python é uma linguagem de programação versátil e fácil de ler, adequada para uma variedade de aplicações, incluindo desenvolvimento web e ciência de dados.\n")
    f.write("Como uma linguagem de alto nível e interpretada, Python permite a escrita de código claro e facilita a depuração, executando o código linha por linha.\n")
    f.write("Python possui um rico conjunto de bibliotecas e frameworks para suportar várias aplicações, como computação científica e aprendizado de máquina.\n")
    f.write("Python é de código aberto e gratuito, com desenvolvimento colaborativo da comunidade, impulsionando seu amplo ecossistema.\n")

print(next(open('python.txt')))

Resposta

Python foi criado por Guido van Rossum no final dos anos 1980, lançado em 1991, e seu nome vem da série de comédia 'Monty Python', não da cobra.

Vamos analisar o código passo a passo:

# O bloco "with open" é usado para abrir o arquivo "python.txt" no modo de leitura e escrita ("r+").
# Isso garante que após o bloco "with" ser executado, o arquivo será fechado automaticamente, independentemente de qualquer erro.
with open("python.txt", "r+") as f:
    # Escreve no arquivo uma sequência de strings a respeito do Python.
    f.write("Python foi criado por Guido van Rossum no final dos anos 1980, lançado em 1991, e seu nome vem da série de comédia 'Monty Python', não da cobra.\n")
    f.write("Python é uma linguagem de programação versátil e fácil de ler, adequada para uma variedade de aplicações, incluindo desenvolvimento web e ciência de dados.\n")
    f.write("Como uma linguagem de alto nível e interpretada, Python permite a escrita de código claro e facilita a depuração, executando o código linha por linha.\n")
    f.write("Python possui um rico conjunto de bibliotecas e frameworks para suportar várias aplicações, como computação científica e aprendizado de máquina.\n")
    f.write("Python é de código aberto e gratuito, com desenvolvimento colaborativo da comunidade, impulsionando seu amplo ecossistema.\n")

# A função "open" é usada aqui fora do contexto "with", apenas para fins de exemplo no código.
# O método "next" é utilizado para obter a próxima linha do arquivo, que neste caso é a primeira linha.
# A função "print" exibe essa linha lida do arquivo no console.
print(next(open('python.txt')))

Questão • 447E

12 de novembro de 2024

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

def gerador_numeros(limite):
    num = 0
    while num < limite:
        yield num
        num += 1

gen = gerador_numeros(5)
numeros = [x for x in gen]

print(numeros)

Resposta

[0, 1, 2, 3, 4]

Vamos analisar o código passo a passo:

def gerador_numeros(limite):
    # Inicializa a variável num com 0
    num = 0

    # Loop que continuará enquanto num for menor que o limite
    while num < limite:
        # A instrução 'yield' é usada para gerar o valor atual de num.
        # Ao invés de retornar um valor e sair da função, 'yield' 
        # pausa a execução, lembrando onde ela parou e retornando o controle ao chamador.
        yield num

        # Incrementa num em 1
        num += 1

# Cria um gerador invocando a função gerador_numeros com limite 5.
# O gerador não executa a função diretamente, apenas prepara para fazer
# isso quando demandado.
gen = gerador_numeros(5)

# Cria uma lista 'numeros' ao iterar sobre os valores gerados por 'gen'.
# Isto é chamado de 'list comprehension' e é uma forma concisa de se
# criar listas.
numeros = [x for x in gen]

# Imprime a lista de números gerados.
# Quando a 'list comprehension' é executada, ela percorre o gerador,
# obtendo valores de 0 até 4 (pois o limite é 5).
print(numeros)

Questão • BB0D

11 de novembro de 2024

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

sweets = ('🍩', '🍫', '🍭', '🍬', '🍰', '🧁', '🍪')
sweets.remove('🍰')
print(sweets)

Resposta

'tuple' object has no attribute 'remove'

Vamos analisar o código passo a passo:

# Criamos uma tupla chamada `sweets` que contém vários elementos que são emojis de doces.
sweets = ('🍩', '🍫', '🍭', '🍬', '🍰', '🧁', '🍪')

# Aqui nós tentamos chamar o método `remove()` na tupla `sweets`.
# No entanto, isso vai gerar um erro! Vamos explicar por quê:
# As tuplas em Python são imutáveis, o que significa que, depois de criadas,
# seus elementos não podem ser alterados, removidos ou adicionados.
# Métodos como `remove()` são válidos para listas, mas não para tuplas.
# Ou seja, a ideia aqui era remover o emoji '🍰',
# mas isso só seria possível se a coleção fosse uma lista, não uma tupla.

# Vamos reescrever esse trecho para corrigir o erro:
# Primeiro, convertemos a tupla em uma lista porque listas são mutáveis.
sweets_list = list(sweets)

# Agora podemos remover um elemento da lista.
sweets_list.remove('🍰')

# Caso o código acima fosse correto, ele printaria a nova tupla sem o '🍰'.
# Portanto, convertemos a lista de volta para uma tupla.
sweets = tuple(sweets_list)

# Por fim, mostramos a tupla atualizada na tela.
print(sweets)  # Saída esperada: ('🍩', '🍫', '🍭', '🍬', '🧁', '🍪')

Questão • 4B04

08 de novembro de 2024

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

sweets1 = ['🍩', '🍫', '🍭', '🍬'] 
sweets2 = ['🍰', '🧁', '🍪']  

sweets1.extend(sweets2)
sweets1.reverse()

print(sweets1)

Resposta

['🍪', '🧁', '🍰', '🍬', '🍭', '🍫', '🍩']

Vamos analisar o código passo a passo:

# Lista de doces chamada sweets1, que contém alguns emojis de doces
sweets1 = ['🍩', '🍫', '🍭', '🍬']

# Outra lista de doces chamada sweets2, com um conjunto diferente de emojis de doces
sweets2 = ['🍰', '🧁', '🍪']

# O método extend é usado para adicionar os elementos de sweets2 ao final de sweets1
# Após esta operação, sweets1 conterá todos os elementos de ambas as listas
sweets1.extend(sweets2)

# O método reverse inverte a ordem dos elementos na lista sweets1
# Agora, o último elemento se torna o primeiro e vice-versa
sweets1.reverse()

# Finalmente, exibimos a lista sweets1, agora combinada e invertida, no console
print(sweets1)  # Saída: ['🍪', '🧁', '🍰', '🍬', '🍭', '🍫', '🍩']

Questão • D56E

07 de novembro de 2024

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

def func(lst):
    n = len(lst)
    for i in range(n):
        for j in range(0, n-i-1):
            if lst[j] < lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

print( func([17, 44, 3, 14, 11]) )

Resposta

[44, 17, 14, 11, 3]

Vamos analisar o código passo a passo:

# Define a função chamada 'func' que aceita um argumento chamado 'lst', que deverá ser uma lista
def func(lst):
    # Armazena o comprimento da lista em uma variável 'n'
    n = len(lst)

    # Primeiro loop 'for' que representa cada passagem pela lista
    # Loop irá iterar de 0 até n-1
    for i in range(n):

        # Segundo loop 'for' que faz a comparação entre pares de elementos adjacentes
        # Este loop vai de 0 até n-i-1 para garantir que não consideremos os elementos já ordenados
        for j in range(0, n-i-1):

            # Compara o elemento atual 'lst[j]' com o próximo elemento 'lst[j+1]'
            # Se o elemento atual for menor que o próximo, trocamos eles de lugar para ordenar de forma decrescente
            if lst[j] < lst[j+1]:
                # Realiza a troca dos elementos; o elemento maior é movido para a esquerda
                lst[j], lst[j+1] = lst[j+1], lst[j]

    # Retorna a lista ordenada em ordem decrescente
    return lst

# Imprime a lista ordenada ao chamar a função 'func' com uma lista de inteiros
print(func([17, 44, 3, 14, 11]))