As Estruturas de Controle são fundamentais para a programação, determinando o fluxo de execução do programa.
Linguagens de programação diferentes têm sintaxe própria, mas funcionamento similar, executando instruções sequencialmente, como foram declaradas na programação, uma após a outra, a atual sempre após a anterior e sempre antes da próxima.
Por exemplo, podemos atribuir valores às variáveis x e y e depois imprimir estes valores.
x = 10
y = 20
print(x)
print(y)
As instruções acima são executadas sequencialmente, na ordem em que foram declaradas.
Primeiro atribuindo o valor 10 à variável x, depois o valor 20 à variável y, então imprimindo o valor de x e finalmente imprimindo o valor de y.
A execução sempre segue o fluxo sequencial de instruções declarado na programação, a não ser que este comportamento possa ser controlado e ocorrer de forma diferente.
As estruturas de controle permitem a execução de blocos de código em função da ocorrência de determinadas instruções condicionais ou de repetição, alterando o comportamento do fluxo de execução.
São como as rédeas de um cavalo, permitindo que você conduza o comportamento do seu código, ao invés de apenas deixá-lo simplesmente seguir sempre em frente e em linha reta, fluindo sequencialmente e sem desvios.
As cláusulas condicionais em programação são estruturas fundamentais para controlar o fluxo do código, permitindo que certas partes do programa sejam executadas com base em condições específicas.
Em Python, as cláusulas condicionais são frequentemente utilizadas e há várias combinações que podem ser empregadas para criar lógicas mais complexas.
As principais cláusulas condicionais em Python são if, else e elif (abreviação de else if).
Combinações de cláusulas condicionais:
if-else: É a estrutura mais simples, onde um bloco de código é executado se a condição do if for verdadeira e outro bloco é executado se for falsa.
if condicao:
# bloco de código se a condição for verdadeira
else:
# bloco de código se a condição for falsa
if-elif-else: Permite testar várias condições em sequência. Se a condição do if for falsa, verifica a condição do elif e executa o bloco correspondente caso seja verdadeira. Se nenhuma condição for verdadeira, o bloco do else é executado.
if condicao1:
# bloco de código se a condição1 for verdadeira
elif condicao2:
# bloco de código se a condição2 for verdadeira
else:
# bloco de código se nenhuma condição for verdadeira
Combinações aninhadas: As cláusulas condicionais podem ser aninhadas umas nas outras para formar lógicas mais complexas, permitindo verificar condições específicas em profundidade.
if condicao1:
if condicao2:
# bloco de código se ambas as condições forem verdadeiras
else:
# bloco de código se a primeira condição for verdadeira e a segunda for falsa
else:
# bloco de código se a primeira condição for falsa
Essas combinações permitem criar lógicas condicionais sofisticadas para controlar o fluxo de um programa, possibilitando a execução de diferentes blocos de código com base em condições variáveis.
A compreensão e o domínio das cláusulas condicionais são essenciais para construir programas robustos e funcionais em Python.
As cláusulas de repetição, também conhecidas como estruturas de controle de fluxo de repetição ou laços (loops), são utilizadas em programação para executar um bloco de código repetidamente enquanto uma condição específica é atendida. Em Python, as cláusulas de repetição principais são for e while, podendo ser combinadas para criar lógicas complexas de repetição.
for: O laço for é utilizado para iterar sobre uma sequência (como listas, tuplas, strings, dicionários, conjuntos) ou qualquer objeto que seja iterável.
for item in sequencia:
# bloco de código a ser executado para cada item na sequência
for/range(): A função range() gera uma sequência de números. Pode ser utilizado para iterar um número específico de vezes.
for i in range(5):
# bloco de código executado 5 vezes
# os valores de i variam de 0 a 4
while: O laço while executa um bloco de código repetidamente enquanto uma condição específica é verdadeira.
while condicao:
# bloco de código a ser repetido enquanto a condição for verdadeira
Laço infinito: Um laço while pode resultar em infinito se a condição nunca se tornar falsa.
while True:
# Este bloco de código será executado indefinidamente
Combinação de Cláusulas de Repetição:
Aninhamento de laços: Os laços for e while podem ser aninhados, permitindo realizar tarefas complexas que exigem múltiplas iterações.
Usando while:
i = 0
while i < 3:
j = 0
while j < 3:
# bloco de código executado para cada combinação i, j
j += 1
i += 1
Usando for:
for i in range(3):
for j in range(2):
# bloco de código executado para cada combinação i, j
Uso de laços com cláusulas condicionais: Os laços podem ser combinados com cláusulas condicionais (if, elif, else) para criar lógicas complexas de controle de fluxo dentro de cada iteração.
for item in lista:
if condicao:
# bloco de código se a condição for verdadeira
else:
# bloco de código se a condição for falsa
Controle de laço: Palavras-chave como break (quebra o laço), continue (vai para a próxima iteração) e pass (não faz nada) são usadas para controlar o comportamento do laço.
for item in lista:
if condicao:
break # Interrompe o laço
elif:
pass # Nada acontece
else:
continue # Vai para a próxima iteração
Essas combinações e estruturas permitem criar algoritmos poderosos e complexos, possibilitando a manipulação e processamento de dados de maneira eficiente.
Entender como combinar e utilizar essas cláusulas de repetição é fundamental para qualquer programador Python.
Com estruturas de controle, as decisões podem ser tomadas com base em condições específicas ou criar repetições baseadas em iterações ou condicionais, tornando a execução de tarefas mais eficiente.
Vamos começar entendendo as declarações condicionais, que são blocos de código que permitem que você tome decisões no programa, como "se isso acontecer, faça isso; senão, faça aquilo".
Veremos como usar os comandos if, else, e elif para criar bifurcações lógicas em seu código, e também o comando match, que funciona como um seletor de caso (switch-case).
Em seguida, abordaremos as estruturas de repetição, que permitem que você execute um conjunto de instruções várias vezes.
O for e o while são dois tipos comuns de laços em Python, e aprenderemos a utilizá-los de forma eficaz. Veremos como utilizar comandos como break e continue para controlar o fluxo dentro dos laços, permitindo que o fim da execução de um laço antes que ele seja concluído, ou pule a iterações e siga para próxima.
Aqui estão os principais tópicos que serão abordados neste capítulo:
As estruturas de controle são pilares fundamentais da programação, permitindo que desenvolvedores criem programas mais flexíveis e adaptáveis.
Ao dominar as condicionais e laços em Python, você poderá resolver problemas complexos e criar algoritmos mais eficientes.
Ao final deste capítulo, você estará apto(a) a controlar o fluxo de execução do seu programa de forma inteligente e lógica.
As estruturas de controle são ferramentas poderosas que adicionam dinamismo e funcionalidade aos seus códigos, e você estará pronto(a) para aplicá-las em seus futuros projetos.
As estruturas condicionais em Python permitem que você tome decisões em seu programa com base em certas condições. Elas são fundamentais para controlar o fluxo de execução do código e executar diferentes blocos de código dependendo das circunstâncias.
Aqui está uma explicação detalhada de cada parte das condicionais:
Observações:
A indentação é essencial em Python para definir os blocos de código dentro das estruturas condicionais. Certifique-se de alinhar corretamente o código com espaços ou tabulações.
O Python avalia as condições de cima para baixo, portanto, se uma condição for verdadeira, os blocos subsequentes serão ignorados.
As estruturas de controle condicionais são ferramentas poderosas para criar lógica em programas Python.
Com elas, você pode tomar decisões com base em diversas situações e criar programas mais dinâmicos e adaptáveis.
Lembre-se de que a lógica das condicionais é fundamental para a maioria das aplicações, e dominar esse conceito é essencial para programação eficiente em Python.
A estrutura if é usada para realizar um teste condicional. Ela avalia uma expressão ou variável e, se a condição for verdadeira, o bloco de código indentado abaixo do if será executado. Se a condição for falsa, o bloco será ignorado. A sintaxe é a seguinte:
if condição:
# Código a ser executado se a condição for verdadeira
...
Exemplo:
idade = 18
if idade >= 18:
print("Você é maior de idade.")
A palavra-chave elif é usada para testar múltiplas condições. Quando o if for falso, o programa verificará a próxima condição usando elif. Se a condição for verdadeira, o bloco de código indentado abaixo do elif será executado. Você pode ter quantos blocos elif forem necessários para lidar com diferentes cenários. A sintaxe é a seguinte:
if condição1:
# Código a ser executado se a condição1 for verdadeira
...
elif condição2:
# Código a ser executado se a condição2 for verdadeira
...
Exemplo:
idade = 25
if idade < 18:
print("Você é menor de idade.")
elif idade >= 18 and idade < 65:
print("Você é adulto.")
else:
print("Você é idoso.")
A estrutura else é opcional e é usada para definir um bloco de código a ser executado caso nenhuma das condições anteriores seja verdadeira. Se todas as condições do if e elif forem falsas, o bloco de código após o else será executado.
A sintaxe é a seguinte:
if condição1:
# Código a ser executado se a condição1 for verdadeira
...
elif condição2:
# Código a ser executado se a condição2 for verdadeira
...
else:
# Código a ser executado se nenhuma das condições for verdadeira
...
Exemplo:
nota = 7
if nota >= 7:
print("Você foi aprovado!")
else:
print("Você foi reprovado.")
A estrutura "match" é usada para realizar um teste de correspondência entre um padrão e uma cadeia de caracteres.
A sintaxe é a seguinte:
match valor:
case padrão1:
# Código a ser executado se o valor corresponde ao padrão1
case padrão2:
# Código a ser executado se o valor corresponde ao padrão2
case padrão3:
# Código a ser executado se o valor corresponde ao padrão3
case padrão4:
# Código a ser executado se o valor corresponde ao padrão4
case padrão5:
# Código a ser executado se o valor corresponde ao padrão5
case padrão6:
# Código a ser executado se o valor corresponde ao padrão6
case padrão7:
# Código a ser executado se o valor corresponde ao padrão7
case padrão8:
# Código a ser executado se o valor corresponde ao padrão8
case padrão9:
# Código a ser executado se o valor corresponde ao padrão9
Exemplo:
numero = 5
match numero:
case 1:
print("Um")
case 2:
print("Dois")
case 3:
print("Tres")
case 4:
print("Quatro")
case 5:
print("Cinco")
case 6:
print("Seis")
case 7:
print("Sete")
case 8:
print("Oito")
case 9:
print("Nove")
case 10:
print("Dez")
case _:
print("Outro")
As estruturas condicionais aninhadas em Python referem-se à prática de colocar condicionais (if, elif, else) dentro de outros condicionais, permitindo que você crie lógicas mais complexas e sofisticadas na tomada de decisões e a execução de ações com base em diferentes cenários.
O exemplo a seguir mostra o aninhamento de condicionais em função de idade e altura.
idade = 25
altura = 175
if idade >= 18:
if altura <= 170:
print("Você é maior de idade e tem uma altura adequada para o brinquedo.")
else:
print("Você é maior de idade, mas sua altura não é adequada para o brinquedo.")
else:
print("Você é menor de idade.")
Neste exemplo, temos um condicional if aninhado dentro de outro condicional if.
O programa primeiro verifica se a idade é maior ou igual a 18.
Se for, ele entra no próximo nível de condicional e verifica se a altura é maior ou igual a 170 (em cm).
Dependendo dessas condições, serão impressas diferentes mensagens.
Os laços são estruturas de controle que permitem que você execute repetidamente um bloco de código até que uma condição específica seja atendida.
O Python oferece duas principais formas de implementar laços: o laço while e o laço for.
O laço while é usado quando você deseja que um bloco de código seja executado repetidamente enquanto uma condição específica for verdadeira.
Ele executa o bloco de código repetidamente até que a condição seja avaliada como falsa.
A sintaxe do laço while é a seguinte:
while condição:
# Código a ser executado enquanto a condição for verdadeira
...
Exemplo:
contador = 0
while contador < 5:
print("Contador: ", contador)
contador += 1
O laço for é usado quando você deseja percorrer um conjunto de elementos, como uma lista, string ou qualquer outro objeto iterável.
Em cada iteração do laço, o bloco de código será executado com o valor atual do elemento.
A sintaxe do laço for é a seguinte:
for elemento in sequência:
# Código a ser executado para cada elemento na sequência
Exemplo:
frutas = ["maçã", "banana", "laranja"]
for fruta in frutas:
print(fruta)
O exemplo acima pode ser simplificado com o uso de compreensão de listas.
[print(fruta) for fruta in frutas]
[print(fruta) for fruta in frutas]
Observações:
A indentação é fundamental em Python para definir os blocos de código dentro dos laços.
No laço for, o termo "elemento" é apenas uma variável temporária que representa cada elemento da sequência em cada iteração.
A função range() é frequentemente utilizada em laços for para gerar sequências de números. A função range() pode ser usada de várias formas, mas a mais comum é com um único argumento, que determina o número de iterações:
Exemplo:
for i in range(5):
print(i)
Neste exemplo, o laço for irá iterar cinco vezes, exibindo os números de 0 a 4.
O exemplo acima pode ser simplificado com o uso de compreensão de listas.
[print(i) for i in range(5)]
A instrução break é usada para sair do laço prematuramente, interrompendo a execução do laço antes de todas as iterações serem concluídas.
A instrução continue é usada para pular para a próxima iteração do laço, ignorando o restante do bloco de código para aquela iteração específica.
Exemplo:
for i in range(10):
if i == 5:
break
if i % 2 == 0:
continue
print(i)
Neste exemplo, o laço for irá iterar de 0 a 9, mas quando o valor de "i" for igual a 5, a instrução break será executada, e o laço será interrompido.
Além disso, se o valor de "i" for par, a instrução continue será executada, e o restante do bloco de código para aquela iteração será ignorado, e o valor do índice i não será exibido.
O exemplo acima pode ser simplificado com o uso de compreensão de listas.
Usando uma sequência de operadores if:
[print(i) for i in range(10) if i < 5 if i % 2 != 0]
Usando as condições separadas com o operador condicional and:
[print(i) for i in range(10) if i < 5 and i % 2 != 0]
Entretanto, a compreensão de listas nestes dos casos acima obrigará a execução da iteração completa da faixa de índices de 0 a 9, aumentando desnecessariamente o número de instruções executadas, pois todos os valores de i maiores que 5 serão sistematicamente filtrados fora e não serão exibidos.
Os laços são fundamentais para criar código eficiente e realizar tarefas repetitivas em Python. Eles permitem automatizar tarefas, processar listas de dados e resolver problemas complexos. Dominar as estruturas de laço é essencial para se tornar um(a) programador(a) completo(a) em Python e expandir suas habilidades de desenvolvimento.
O controle de laço com as instruções break e continue é uma técnica poderosa em Python para modificar o comportamento dos laços e torná-los mais flexíveis. Essas instruções permitem que você tome decisões dentro do laço com base em certas condições, o que pode ser útil para parar o laço prematuramente ou pular para a próxima iteração.
A instrução break é usada para sair do laço imediatamente quando uma condição específica é atendida. Quando o Python encontra a instrução break dentro de um laço, ele encerra o laço imediatamente e continua a execução do código após o laço.
Exemplo:
for i in range(5):
if i == 3:
break
print(i)
Neste exemplo, o laço for irá iterar de 0 a 4, mas quando o valor de "i" for igual a 3, a instrução break será executada e o laço será encerrado prematuramente.
A instrução continue é usada para pular para a próxima iteração do laço, ignorando o restante do bloco de código para aquela iteração específica. Quando o Python encontra a instrução continue dentro de um laço, ele pula para a próxima iteração sem executar o restante do código no bloco de laço para a iteração atual.
Exemplo:
for i in range(5):
if i == 2:
continue
print(i)
Neste exemplo, o laço for irá iterar de 0 a 4, mas quando o valor de "i" for igual a 2, a instrução continue será executada e o restante do bloco de código será ignorado para a iteração atual. Portanto, a saída será:
As instruções break e continue são úteis para criar lógica mais complexa dentro de laços, permitindo que você controle o fluxo de execução de acordo com condições específicas. Elas são frequentemente usadas em conjunto com condicionais (if, elif, else) dentro de laços.
Exemplo:
for i in range(10):
if i % 2 == 0:
continue
if i == 7:
break
print(i)
Neste exemplo, o laço for irá iterar de 0 a 9. A instrução continue é usada para pular as iterações com valores pares, e a instrução break é usada para interromper o laço quando o valor de "i" for igual a 7. Portanto, a saída será:
Observações:
O uso cuidadoso das instruções break e continue é essencial para evitar laços infinitos ou resultados inesperados.
As instruções break e continue funcionam tanto com laços for quanto com laços while.
O controle de laço com break e continue é uma técnica avançada e poderosa que permite personalizar a execução de laços em Python, tornando seus programas mais eficientes e flexíveis. Ao aplicar essas instruções adequadamente, você pode resolver problemas complexos e criar algoritmos mais inteligentes e eficazes.
As estruturas de repetição aninhadas em Python referem-se à prática de colocar laços (for, while) dentro de outros laços.
Essa técnica permite criar lógica com diferentes níveis de iteração.
for i in range(3):
for j in range(3):
print(f"i = {i}, j = {j}")
Neste exemplo, temos um laço for aninhado dentro de outro laço for. O programa executa todas as combinações possíveis de valores de "i" e "j", imprimindo cada combinação.
Também podemos aninhar controles de repetição com controles condicionais.
numeros = [1, 2, 3, 4, 5]
pares = []
impares = []
for num in numeros:
if num % 2 == 0:
pares.append(num)
else:
impares.append(num)
print("Números pares:", pares)
print("Números ímpares:", impares)
Neste exemplo, temos um laço for que itera sobre uma lista de números. Dentro do laço, há um condicional if para verificar se o número é par ou ímpar. Dependendo da condição, o número é adicionado à lista "pares" ou à lista "ímpares".
Observações:
O aninhamento de estruturas de controle pode se estender a vários níveis, mas é essencial manter uma boa organização e indentação do código para garantir a legibilidade.
Estruturas de controle aninhadas são úteis quando você precisa resolver problemas mais complexos que envolvem várias condições e iterações.
As estruturas de controle aninhadas em Python são uma ferramenta poderosa para lidar com lógica complexa em seus programas, permitindo criar algoritmos mais sofisticados e respostas adaptáveis a diferentes situações.
No entanto, é importante equilibrar o aninhamento para manter a clareza e a facilidade de manutenção do código.
Com prática e experiência, você poderá utilizar efetivamente essas estruturas aninhadas para resolver problemas desafiadores em seus projetos de desenvolvimento.
Agora iremos explorar exemplos para aplicar as estruturas de controle aprendidas anteriormente.
Os exemplos práticos ajudarão você a aplicar as estruturas de controle em cenários reais, tornando o aprendizado mais significativo, incentivando a criatividade e o pensamento lógico, desafiando você a resolver problemas complexos.
Neste exemplo, vamos criar um programa em Python que recebe um número inteiro positivo do usuário e verifica se ele é um número primo ou não. Um número primo é aquele que é divisível apenas por 1 e por ele mesmo, ou seja, possui exatamente dois divisores. Vamos criar uma função que realiza essa verificação e exibe o resultado ao usuário.
def eh_primo(numero):
if numero <= 1:
return False
for i in range(2, int(numero**0.5) + 1):
if numero % i == 0:
return False
return True
try:
numero = int(input("Digite um número inteiro positivo: "))
if eh_primo(numero):
print(f"{numero} é um número primo.")
else:
print(f"{numero} não é um número primo.")
except ValueError:
print("Entrada inválida. Digite um número inteiro positivo.")
Criamos a função eh_primo(numero) que recebe um número inteiro como argumento e verifica se ele é um número primo ou não. Se o número for menor ou igual a 1, retornamos False, já que números menores ou iguais a 1 não são primos.
Em seguida, percorremos um laço de 2 até a raiz quadrada do número mais 1 (int(numero**0.5) + 1). A raiz quadrada é usada para otimizar o laço, pois não é necessário verificar divisores maiores que a raiz quadrada do número.
Dentro do laço, verificamos se o número é divisível por i. Se for, significa que ele possui mais de dois divisores e não é primo, então retornamos False.
Se o laço não encontrar divisores entre 2 e a raiz quadrada do número, retornamos True, indicando que o número é primo.
No bloco try-except, pedimos ao usuário para digitar um número inteiro positivo. Caso o usuário digite um valor inválido (por exemplo, uma letra ou número negativo), o programa captura a exceção ValueError e exibe uma mensagem de erro.
O programa, então, chama a função eh_primo(numero) com o valor digitado pelo usuário e imprime na tela o resultado da verificação.
Suponha que o usuário digite o número 13, que é um número primo. A saída do programa seria:
Digite um número inteiro positivo: 13
13 é um número primo.
E se o usuário digitar o número 6, que não é primo, a saída seria:
Digite um número inteiro positivo: 6
6 não é um número primo.
O programa verifica se o número digitado pelo usuário é um número primo ou não, fornecendo um resultado claro e correto.
Neste exemplo, vamos criar um programa em Python que solicita ao usuário uma palavra ou frase e conta quantas vogais (a, e, i, o, u) estão presentes nela.
Vamos criar uma função que realiza e retorna a contagem de vogais em um texto.
import unicodedata
vogais_nao_acentuadas = "aeiouAEIOU"
vogais_acento_agudo = "áéíóúÁÉÍÓÚ"
vogais_acento_grave = "àèìòùÀÈÌÒÙ"
vogais_acento_circunflexo = "âêîôûÂÊÎÔÛ"
vogais_acento_til = "ãẽĩõũÃẼĨÕŨ"
vogais_acento_trema = "äëïöüÄËÏÖÜ"
todas_vogais = \
vogais_nao_acentuadas + \
vogais_acento_agudo + \
vogais_acento_grave + \
vogais_acento_circunflexo + \
vogais_acento_til + \
vogais_acento_trema
todas_vogais_normalizadas = unicodedata.normalize("NFC", todas_vogais)
def contar_vogais(texto, vogais=todas_vogais_normalizadas):
contador = 0
for letra in texto:
if letra in vogais:
contador += 1
return contador
Criamos a função contar_vogais() que recebe um texto como argumento. A função inicializa uma variável contador para armazenar a quantidade de vogais encontradas.
Em seguida, criamos uma variáveis com os textos de vogais acentuadas, tanto minúsculas quanto maiúsculas.
Usamos um laço for para percorrer cada letra no texto passado na função no argumento texto.
Dentro do laço, verificamos se a letra está presente em texto. Se estiver, incrementamos o contador.
Quando o laço termina, retornamos o valor do contador, que representa a quantidade de vogais em texto.
Vamos testar algumas frases:
print(contar_vogais('Primeiro teste!'))
print(contar_vogais('O dia está muito belo'))
print(contar_vogais('Amanhã é um novo dia'))
O programa conta as vogais presentes nas frases com as contagens de vogais acentuadas e não acentuadas.
Os caracteres acentuados na variável todas_vogais contém caracteres compostos por uma letra seguida de um acento agudo como entidades separadas, e não como um único caractere pré-composto.
Isso pode ser uma fonte de confusão porque visualmente os caracteres parecem ser únicos com acentos, mas tecnicamente eles são formados por duas unidades de código (ou "code points") no padrão Unicode: uma para a letra e outra para o acento.
No Python, quando você acessa vogais_acento[0], onde supsotamente se encontra a letra 'á', ele retorna o primeiro "code point" Unicode da string, que no caso é a letra 'a', e não o caractere composto 'á'.
No exemplo acima, a função normalize do módulo unicodedata com o modo 'NFC' (Normalization Form Composed), combinou os caracteres e os acentos em um único "code point", se possível.
Depois dessa normalização, ao acessar os índices do texto da variável todas_vogais_normalizadas, serão retornados os caracteres acentuados como um caracter único, como esperado.
Neste desafio, vamos criar um programa em Python que recebe um número inteiro do usuário e exibe a tabuada de multiplicação desse número, indo de 1 a 10.
Vamos criar uma função para calcular a tabuada e exibir os resultados ao usuário.
def tabuada_multiplicacao(numero):
print(f"Tabuada de multiplicação do número {numero}:")
for i in range(1, 11):
resultado = numero * i
print(f"{numero} x {i} = {resultado}")
Criamos a função tabuada_multiplicacao(numero) que recebe um número inteiro numero como argumento. A função exibe a tabuada de multiplicação do número fornecido, indo de 1 a 10.
Utilizamos um laço for usando função range(1, 11) para percorrer os valores de 1 a 10.
Dentro do laço, calculamos o resultado da multiplicação entre número e i e o armazenamos na variável resultado.
Em seguida, imprimimos a expressão da tabuada no formato "numero x i = resultado".
Vamos fazer a tabuada de 1 a 10.
for i in range(1, 11):
tabuada_multiplicacao(i)
O programa exibe a tabuada de multiplicação dos número 1 a 10, muiltiplicando estes valores de 1 a 10.
Cada linha representa uma multiplicação diferente, e o resultado é exibido ao lado da expressão.
Neste desafio, vamos criar um programa em Python que implementa o clássico "Jogo da Adivinhação".
O programa irá gerar um número aleatório entre 1 e 100 e pedir ao usuário para adivinhar qual é esse número. O usuário terá um número limitado de tentativas para acertar o número.
Vamos fornecer dicas ao usuário, informando se o número a ser adivinhado é maior ou menor do que o palpite atual.
import random
def jogo_da_adivinhacao():
numero_secreto = random.randint(1, 100)
max_tentativas = 10
print("Bem-vindo ao Jogo da Adivinhação!")
print("Tente adivinhar o número secreto entre 1 e 100.")
for tentativa in range(1, max_tentativas + 1):
palpite = int(input(f"Tentativa {tentativa}: Digite seu palpite: "))
if palpite == numero_secreto:
print(f"Parabéns! Você acertou o número secreto {numero_secreto} em {tentativa} tentativa(s)!")
break
elif palpite < numero_secreto:
print("Dica: O número secreto é maior.")
else:
print("Dica: O número secreto é menor.")
else:
print(f"Fim de jogo! O número secreto era {numero_secreto}. Tente novamente!")
try:
jogo_da_adivinhacao()
except ValueError:
print("Entrada inválida. Digite apenas números inteiros.")
Importamos o módulo random para gerar o número secreto aleatoriamente.
Criamos a função jogo_da_adivinhacao() que será responsável por executar o jogo.
A variável numero_secreto é inicializada com um número aleatório entre 1 e 100 usando random.randint(1, 100).
Definimos a variável max_tentativas para limitar o número de tentativas que o usuário terá para adivinhar o número.
Dentro do laço for, o programa pede ao usuário para digitar o palpite.
O programa verifica se o palpite é igual ao número secreto. Se for, o usuário acertou e o programa exibe uma mensagem de parabéns com o número de tentativas.
Caso o palpite seja menor que o número secreto, o programa fornece a dica "O número secreto é maior.", e caso for maior, fornece a dica "O número secreto é menor.".
Se o laço terminar sem que o usuário acerte o número, o programa exibe uma mensagem de "Fim de jogo" e revela o número secreto.
A cada tentativa, o usuário deve digitar um palpite. Suponha que o número secreto seja 50. Uma possível sequência de interação pode ser:
Bem-vindo ao Jogo da Adivinhação!
Tente adivinhar o número secreto entre 1 e 100.
Tentativa 1: Digite seu palpite: 75
Dica: O número secreto é menor.
Tentativa 2: Digite seu palpite: 40
Dica: O número secreto é maior.
Tentativa 3: Digite seu palpite: 55
Dica: O número secreto é menor.
Tentativa 4: Digite seu palpite: 50
Parabéns! Você acertou o número secreto 50 em 4 tentativa(s)!
O programa fornece dicas ao usuário, indicando se o número secreto é maior ou menor do que o palpite atual, até que o usuário acerte o número ou atinja o limite de tentativas.
Neste desafio, vamos criar um programa em Python que solicita ao usuário as notas de três provas e calcula a média aritmética dessas notas.
Em seguida, o programa determina a situação escolar do aluno com base na média obtida.
def calcular_media(nota1, nota2, nota3):
return (nota1 + nota2 + nota3) / 3
def verificar_situacao(media):
if media >= 7:
return "Aprovado"
elif 5 <= media < 7:
return "Recuperação"
else:
return "Reprovado"
try:
nota1 = float(input("Digite a nota da primeira prova: "))
nota2 = float(input("Digite a nota da segunda prova: "))
nota3 = float(input("Digite a nota da terceira prova: "))
media_aluno = calcular_media(nota1, nota2, nota3)
situacao_aluno = verificar_situacao(media_aluno)
print(f"A média do aluno é: {media_aluno:.2f}")
print(f"Situação Escolar: {situacao_aluno}")
except ValueError:
print("Entrada inválida. Digite apenas números.")
Criamos a função calcular_media(nota1, nota2, nota3) que recebe as três notas das provas como argumentos e retorna a média aritmética das notas.
Em seguida, criamos a função verificar_situacao(media) que recebe a média como argumento e retorna a situação escolar do aluno com base na média.
Dentro da função verificar_situacao, utilizamos declarações if-elif-else para determinar a situação do aluno de acordo com os seguintes critérios:
Se a média for maior ou igual a 7, o aluno é aprovado.
Se a média estiver entre 5 (inclusive) e 7 (exclusivo), o aluno está em recuperação.
Caso contrário, o aluno é reprovado.
No bloco try-except, solicitamos ao usuário para digitar as notas das três provas. Se o usuário digitar um valor inválido (por exemplo, uma letra), o programa captura a exceção ValueError e exibe uma mensagem de erro.
O programa, então, calcula a média do aluno chamando a função calcular_media(nota1, nota2, nota3) com as notas fornecidas pelo usuário.
Em seguida, o programa determina a situação do aluno chamando a função verificar_situacao(media_aluno) com a média calculada.
Por fim, o programa exibe a média do aluno e sua situação escolar na tela.
Suponha que o usuário digite as notas 7, 8 e 6, respectivamente. A saída do programa seria:
Digite a nota da primeira prova: 7
Digite a nota da segunda prova: 8
Digite a nota da terceira prova: 6
A média do aluno é: 7.00
Situação Escolar: Aprovado
O programa calcula a média (7 + 8 + 6) / 3 = 7 e informa que o aluno foi aprovado, pois a média é maior ou igual a 7.
Neste exemplo, vamos criar um programa em Python que calcula o fatorial de um número fornecido pelo usuário. O fatorial de um número inteiro positivo "n" é o produto de todos os números inteiros positivos menores ou iguais a "n". Vamos criar uma função para calcular o fatorial e exibir o resultado ao usuário.
def calcular_fatorial(numero):
if numero < 0:
return None
elif numero == 0:
return 1
else:
fatorial = 1
for i in range(1, numero + 1):
fatorial *= i
return fatorial
try:
numero = int(input("Digite um número inteiro positivo: "))
resultado_fatorial = calcular_fatorial(numero)
if resultado_fatorial is not None:
print(f"O fatorial de {numero} é: {resultado_fatorial}")
else:
print("O fatorial não está definido para números negativos.")
except ValueError:
print("Entrada inválida. Digite um número inteiro positivo.")
Criamos a função calcular_fatorial(numero) que recebe um número inteiro numero como argumento e retorna o fatorial do número.
Antes de realizar o cálculo, verificamos se o numero é negativo. Se for, retornamos None, indicando que o fatorial não está definido para números negativos.
Se o numero for igual a 0, retornamos 1, pois o fatorial de 0 é 1.
Caso contrário, inicializamos a variável fatorial com o valor 1 e usamos um laço for i in range(1, numero + 1) para calcular o fatorial.
Multiplicamos o valor de fatorial por cada número inteiro de 1 até numero, atualizando o valor de fatorial a cada iteração.
Por fim, retornamos o valor de fatorial, que é o fatorial do número numero.
No bloco try-except, solicitamos ao usuário para digitar um número inteiro positivo. Se o usuário digitar um valor inválido (por exemplo, uma letra), o programa captura a exceção ValueError e exibe uma mensagem de erro.
O programa, então, chama a função calcular_fatorial(numero) com o valor digitado pelo usuário e imprime na tela o resultado do cálculo do fatorial.
Suponha que o usuário digite o número 5. A saída do programa seria:
Digite um número inteiro positivo: 5
O fatorial de 5 é: 120
O programa calcula o fatorial de 5 (5 x 4 x 3 x 2 x 1) e exibe o resultado 120.
Neste desafio, vamos criar um programa em Python que gera a sequência de Fibonacci. A sequência de Fibonacci é uma sequência de números em que cada número é a soma dos dois números anteriores. Os primeiros dois números da sequência são 0 e 1. Vamos criar uma função que gera a sequência de Fibonacci até um determinado limite fornecido pelo usuário.
def gerar_sequencia_fibonacci(limite):
sequencia = [0, 1]
while True:
proximo_numero = sequencia[-1] + sequencia[-2]
if proximo_numero > limite:
break
sequencia.append(proximo_numero)
return sequencia
try:
limite = int(input("Digite o limite para a sequência de Fibonacci: "))
sequencia_fibonacci = gerar_sequencia_fibonacci(limite)
print("Sequência de Fibonacci:")
for numero in sequencia_fibonacci:
print(numero)
except ValueError:
print("Entrada inválida. Digite um número inteiro.")
Criamos a função gerar_sequencia_fibonacci(limite) que recebe um número inteiro limite como argumento e gera a sequência de Fibonacci até esse limite.
Inicializamos a lista sequencia com os primeiros dois números da sequência, que são 0 e 1.
Utilizamos um laço while True para continuar gerando números da sequência até que o próximo número seja maior que o limite fornecido.
Dentro do laço, calculamos o próximo número da sequência somando os dois últimos números da lista sequencia (sequencia[-1] e sequencia[-2]).
Verificamos se o próximo número é maior que o limite. Se for, interrompemos o laço usando a instrução break.
Caso contrário, adicionamos o próximo número à lista sequencia.
Por fim, retornamos a lista sequencia contendo a sequência de Fibonacci até o limite fornecido.
No bloco try-except, solicitamos ao usuário para digitar um limite para a sequência de Fibonacci. Se o usuário digitar um valor inválido (por exemplo, uma letra), o programa captura a exceção ValueError e exibe uma mensagem de erro.
O programa, então, chama a função gerar_sequencia_fibonacci(limite) com o valor digitado pelo usuário e imprime na tela os números da sequência de Fibonacci.
Suponha que o usuário digite o limite 100. A saída do programa seria:
Digite o limite para a sequência de Fibonacci: 100
Sequência de Fibonacci:
0
1
1
2
3
5
8
13
21
34
55
89
O programa gera a sequência de Fibonacci até o limite de 100 e imprime os números da sequência. Cada número é a soma dos dois números anteriores na sequência.