Skip to content

Desafios de Programação em Python para Aperfeiçoar Suas Habilidades

    desafio2

    Python oferece muitas oportunidades para desafiar suas habilidades de programação. Vamos explorar problemas diversos e testar suas habilidades juntos!

    1) Maior Poça

    Imagine uma lista de números representando alturas de terreno. Sua tarefa é escrever uma função que encontre a maior poça no terreno quando chove, retornando suas coordenadas.

    # Exemplo de uso
    alturas_terreno = [2, 5, 1, 3, 2, 4, 5, 7, 4, 2, 3]
    coordenadas = encontrar_maior_poca(alturas_terreno)
    print(f"A maior poça está entre as alturas {alturas_terreno[coordenadas[0]:coordenadas[1]+1]} nas posições {coordenadas[0]} a {coordenadas[1]}.")

    2) Encontrando Coordenadas de Ilhas

    Dado um mapa 2D com 0s representando o mar e 1s representando ilhas, seu objetivo é escrever uma função chamada obter_ilhas(mapa) que retorne uma lista de conjuntos, onde cada conjunto representa uma ilha adjacente. Cada conjunto deve conter as coordenadas (linha, coluna) dos elementos pertencentes a essa ilha.

    # Exemplo de uso
    mapa = [
        [1, 0, 0, 1],
        [1, 1, 0, 1],
        [0, 0, 1, 0],
        [0, 0, 0, 0]
    ]
    
    ilhas_encontradas = obter_ilhas(mapa)
    for i, ilha in enumerate(ilhas_encontradas, 1):
        print(f"Ilha {i}: {ilha}")

    3) Cadeia de Palavras Mais Longa

    Imagine que você possui uma lista de palavras em inglês e deseja encontrar a cadeia de palavras mais longa possível, onde a última letra de uma palavra é igual à primeira letra da próxima. Sua tarefa é escrever uma função chamada maior_cadeia_de_palavras(palavras) que recebe uma lista de palavras e retorna a cadeia mais longa possível. Por exemplo, dada a lista [“apple”, “elephant”, “tank”, “kitten”], a função deve retornar [“apple”, “elephant”, “tank”, “kitten”].

    # Exemplo de uso
    palavras = ["apple", "elephant", "tank", "kitten"]
    resultado = maior_cadeia_de_palavras(palavras)
    print(resultado)

    4) Diamante Vazado

    Agora, um desafio de padrões! Você precisa escrever uma função chamada diamante_vazado(string) que aceita uma string e imprime um padrão de diamante como mostrado abaixo. Se a string não tiver caracteres suficientes para formar um diamante perfeito, preencha os espaços com asteriscos (*).

    # Exemplo de uso
    diamante_vazado('abcdefgh')
    
      a
     b h
    c   g
     d f
      e

    5) Coordenadas de Subidas

    Dada uma lista de números representando alturas de terreno, escreva uma função chamada coordenadas_de_subidas(lista) que retorna uma lista de listas, onde cada lista contém alturas que formam uma subida. Uma subida é definida como um conjunto de alturas onde cada altura subsequente é maior que a anterior.

    # Exemplo de uso
    alturas_terreno = [1, 2, 3, 2, 4, 6, 5, 7, 8, 9]
    resultado = coordenadas_de_subidas(alturas_terreno)
    print(resultado)

    6) Contém o Dígito 1 (Sem Strings)

    Desafio matemático! Escreva uma função chamada contem_1(n) que aceita um número inteiro n e retorna True se o número contiver o dígito 1, e False caso contrário. A dificuldade está em resolver este problema sem usar strings ou métodos de string.

    # Exemplos de uso
    numero1 = 12345
    numero2 = 987654321
    numero3 = 0
    
    print(contem_1(numero1))  # Deve retornar True
    print(contem_1(numero2))  # Deve retornar False
    print(contem_1(numero3))  # Deve retornar False

    7) Mínimo de Moedas

    Você tem uma lista de moedas com diferentes valores e um valor que deseja alcançar. Escreva uma função chamada min_moedas(moedas, valor) que retorna um dicionário representando o número mínimo de moedas necessárias para alcançar o valor desejado. Cada chave do dicionário deve ser o valor da moeda e o valor correspondente deve ser a quantidade mínima de moedas desse valor necessárias para atingir o objetivo.

    # Exemplo de uso
    moedas = [1, 2, 5, 10]
    valor_desejado = 13
    resultado = min_moedas(moedas, valor_desejado)
    print(resultado)

    8) Análise de Dicionário

    Imagine que você possui uma string representando um dicionário Python, mas precisa convertê-la em um dicionário real em Python. Escreva uma função chamada analisar_dicionario(string) que aceita a string e retorna o dicionário correspondente. Você não pode usar bibliotecas ou as funções eval ou exec.

    # Exemplo de uso
    string = '{"nome": "Alice", "idade": 30, "cidade": "São Paulo"}'
    dicionario = analisar_dicionario(string)
    print(dicionario)

    9) Quadrado Mágico

    Um quadrado mágico é uma grade 3×3 com números de 1 a 9, onde a soma de cada linha, coluna e diagonal é igual a 15. Seu desafio é escrever uma função chamada resolver_quadrado_magico(quadrado) que recebe um quadrado mágico incompleto e o preenche com os números ausentes.

    # Exemplo de uso
    quadrado_incompleto = [
        [5, None, 6],
        [None, None, None],
        [4, None, None]
    ]
    
    solucao = resolver_quadrado_magico(quadrado_incompleto)
    
    if solucao:
        for linha in solucao:
            print(linha)
    else:
        print("Não foi possível encontrar uma solução.")

    10) Raiz Quadrada (Sem Funções Integradas)

    Por último, mas não menos importante, escreva uma função chamada raiz_quadrada(n) que aceita um número inteiro n e retorna sua raiz quadrada. O desafio aqui é calcular a raiz quadrada sem usar funções ou operadores de raiz quadrada prontos.

    # Exemplo de uso
    numero = 25
    resultado = raiz_quadrada(numero)
    print(f"A raiz quadrada de {numero} é aproximadamente {resultado:.6f}")

    11) Pirâmide de Letras

    Um desafio de padrões novamente! Escreva uma função chamada piramide(string) que aceita uma string e imprime o padrão de pirâmide mostrado abaixo. Se houver letras insuficientes na string, preencha os espaços com asteriscos (*).

    piramide('abcdef')
    
    a
    bc
    def

    12) Avaliação de Expressões Matemáticas

    Por fim, você recebe uma string representando uma expressão matemática. Sua tarefa é escrever uma função chamada avaliar(expressao) que avalia a expressão e retorna o resultado. Você pode assumir que a expressão contém apenas operadores de adição, subtração, multiplicação e divisão, seguindo a regra PEMDAS (parênteses, exponenciação, multiplicação e divisão, adição e subtração).

    # Exemplo de uso
    expressao = "3 + (4 * 2) - 8 / 2"
    resultado = avaliar(expressao)
    print(resultado)

    Conclusão

    Estes desafios são projetados para aprimorar suas habilidades de programação e pensamento lógico. Sinta-se à vontade para testar suas soluções ou compartilhar suas respostas nos comentários. Divirta-se resolvendo esses quebra-cabeças de programação!

    Leave a Reply

    Your email address will not be published. Required fields are marked *