Aula 03: Execuções condicionais e alternativas

Tópicos

Entrada e saída formatada

Exemplo:

Para quatro variáveis a,b,c e d, tal que a = 1.3432, b = 342.02, c = 3000.8023 e d = 20900.978234, faça um programa que exibe os 4 valores com duas casas de precisão após a vírgula, e na forma de uma tabela, conforme o exemplo abaixo:
| a:     1.34 | b:   342.02 |
| c:  3000.80 | d: 20900.98 |

Solução:

    print("| a: %8.2f | b: %8.2f |"%(a,b))
    print("| c: %8.2f | d: %8.2f |"%(c,d))
  

Operadores // e % (Divisão inteira e Resto)

Operador Nome Explicação Exemplos
// Divisão Inteira Retorna a parte inteira do quociente 7 // 2 retorna 3
% Módulo Retorna o resto da divisão 7 % 2 retorna 1

Exemplo 1:

Para testar se um dado valor contido em uma variável inteira x é par ou ímpar, devemos verificar se x é divisível ou não por 2.
Um número é divisível por outro quando o resto da divisão entre os dois é igual a zero.

Veja abaixo alguns exemplos de comandos digitados no prompt (>>>) do Python shell:

>>> x = 5
>>> x % 2 == 0 #Testa se x é par.
False
>>> x % 2 == 1 #Testa se x é ímpar.
True
>>> x = 6
>>> x % 2 == 0 #Testa se x é par.
True
>>> x % 2 == 1 #Testa se x é ímpar.
False

Exemplo 2:

Os operadores de divisão inteira e resto de divisão são úteis em problemas envolvendo o processamento dos dígitos de um número inteiro. O dígito mais à esquerda, por representar a parcela de maior valor, é usualmente chamado de dígito mais significativo. Correspondentemente, o dígito mais à direita é chamado de dígito menos significativo.

O dígito menos significativo de um inteiro contido em uma variável x pode ser obtido tomando o seu resto da divisão por 10, isto é, r = x % 10. Uma vez processado esse dígito em r, podemos então removê-lo de x usando sua divisão inteira por 10, isto é, x = x // 10. Repetindo o processo, podemos então acessar os demais dígitos, do menos significativo em direção ao mais significativo. Veja o exemplo abaixo digitado no prompt (>>>) do Python shell:

>>> x = 6583
>>> x % 10
3
>>> x = x // 10
>>> x % 10
8
>>> x = x // 10
>>> x % 10
5
>>> x = x // 10
>>> x % 10
6

Estrutura condicional simples

Permite a escolha de um grupo de comandos (bloco de comandos) quando uma determinada condição lógica é satisfeita.

Exemplo:

Dados um número inteiro n, n>0, e uma sequência com n números inteiros, determinar quantos números da sequência são pares. Por exemplo, para a sequência
    6    -2    7   0    -5    8   4 
o seu programa deve escrever o número 4 para o número de pares.

Uma primeira solução é apresentada abaixo.

  n = int(input("Digite o tam da seq: "))
  conta_par = 0 # Contador de números pares encontrados.
  i = 1
  while i <= n:
      num = int(input("Digite um num da seq: "))
      if num % 2 == 0: # Testa se num é par.
          conta_par = conta_par + 1
      i = i + 1
  print("Quant. pares =", conta_par)
  # Fim do programa.
  

Uma segunda versão que decrementa o próprio valor em n para controlar o laço.

  n = int(input("Digite o tam da seq: "))
  conta_par = 0 # Contador de números pares encontrados.
  while n > 0:
      num = int(input("Digite um num da seq: "))
      if num % 2 == 0: # Testa se num é par.
          conta_par = conta_par + 1
      n = n - 1
  print("Quant. pares =", conta_par)
  # Fim do programa.
  

Estrutura condicional composta

Permite a escolha de um bloco de comandos, quando uma condição é satisfeita, e de um outro bloco quando a condição não é satisfeita.

Exemplo:

Dados um número inteiro n, n>0, e uma sequência com n números inteiros, determinar quantos números da sequência são pares e quantos são ímpares. Por exemplo, para a sequência
    6    -2    7   0    -5    8   4 
o seu programa deve escrever o número 4 para o número de pares e 2 para o de ímpares.

Uma primeira solução é apresentada abaixo, usando a estrutura condicional composta.

  n = int(input("Digite o tam da seq: "))
  conta_par = 0 # Contador de números pares encontrados.
  conta_imp = 0 # Contador de números ímpares encontrados.
  while n > 0:
      num = int(input("Digite um num da seq: "))
      if num % 2 == 0: #par
          conta_par = conta_par + 1
      else: #ímpar
          conta_imp = conta_imp + 1
      n = n - 1
  print("Quant. pares   =", conta_par)
  print("Quant. ímpares =", conta_imp)
  # Fim do programa.
  

Note que podemos evitar o comando condicional composto na resolução desse problema, dado que a quantidade de números ímpares pode ser obtida por exclusão, subtraindo-se do total o número de pares encontrados.

  n = int(input("Digite o tam da seq: "))
  n_salvo = n
  conta_par = 0 # Contador de números pares encontrados.
  while n > 0:
      num = int(input("Digite um num da seq: "))
      if num % 2 == 0: #par
          conta_par = conta_par + 1
      n = n - 1
  print("Quant. pares   =", conta_par)
  print("Quant. ímpares =", n_salvo - conta_par)
  # Fim do programa.
 

Problema 1:

Dados um número inteiro n, n > 0, e um dígito d (0<=d<=9), determinar quantas vezes d ocorre em n. Por exemplo, 3 ocorre 2 vezes em 63453.

Solução:
A estratégia aqui adotada é ler o número n como um inteiro e dividi-lo sucessivamente por 10 até que o resultado seja zero. Durante o processo de divisões sucessivas, vamos nos desfazendo gradualmente dos dígitos menos significativos em direção aos mais significativos, obtendo cada um dos dígitos pelo uso do operador de resto de divisão por 10 e contabilizando o número de ocorrências do valor em d.

  n = int(input("Digite o valor de n: "))
  d = int(input("Digite um dígito [0,9]: "))
  num = n
  cont = 0
  while n != 0:
      r = n % 10
      if r == d:
          cont = cont + 1
      n = n // 10

  print(d,"ocorre",cont,"vezes em",num)
  

Problema 2:

Dado um número inteiro n, n > 0, imprimir o número com os dígitos invertidos (isto é, espelhados/refletidos). Por exemplo, para n igual a 63452, o programa deve imprimir 25436.

Solução:

#Inverte dígitos:
n = int(input("Digite o valor de n: "))
inv = 0 # variável que irá armazenar o valor de n com os dígitos invertidos.
while n != 0:
    r = n % 10
    n = n // 10
    inv = inv * 10
    inv = inv + r

print("Invertido:", inv)
  

Problema 3:

Dizemos que um número inteiro positivo é triangular se ele é o produto de três números inteiros consecutivos. Por exemplo, 120 é triangular, pois 4*5*6 é igual a 120. Dado um número inteiro positivo n, verificar se n é triangular.

Solução 1:

  n = int(input("Digite o valor de n: "))

  i = 1
  while i*(i+1)*(i+2) < n:
      i = i + 1

  if i*(i+1)*(i+2) == n:
      print("É triangular, ",i,"*",i+1,"*",i+2,"=",n,sep="")
  else:
      print("Não é triangular")
  

Solução 2:
Uma segunda versão mais elaborada com códigos de formatação no print.

  n = int(input("Digite o valor de n: "))

  i = 1
  while i*(i+1)*(i+2) < n:
      i = i + 1

  if i*(i+1)*(i+2) == n:
      print("É triangular, %d*%d*%d=%d" %(i,i+1,i+2,n))
  else:
      print("Não é triangular")
  

Problema 4:

Qualquer número natural de quatro algarismos pode ser dividido em duas dezenas formadas pelos seus dois primeiros e dois últimos dígitos.
Exemplos: Escreva um programa que imprime todos os milhares (4 algarismos) cuja raiz quadrada seja a soma das dezenas formadas pela divisão acima.

Exemplo: raiz de 9801 = 99 = 98 + 01.
Portanto 9801 é um dos números a ser impresso.

  i = 1000
  while i <= 9999:
      d1 = i%100
      d2 = i//100
      if (d1+d2)*(d1+d2) == i:
          print("Raiz de",i,"é",d1+d2)
      i = i + 1