Operadores Lógicos

Python possui 3 operadores chamados lógicos:

Equivalências:


Exemplo:

Maior entre três variáveis a, b e c.
  if a>b and a>c :
      print("a é o maior")
  elif b>c :
      print("b é o maior")
  else:
      print("c é o maior")
  

Problema 1:

Escreva um programa que determina a data cronologicamente maior entre duas datas fornecidas pelo usuário. Cada data deve ser fornecida por três valores inteiros onde o primeiro representa um dia, o segundo um mês e o terceiro um ano.
  # Primeira data.
  d1 = int(input("Dia: "))
  m1 = int(input("Mês: "))
  a1 = int(input("Ano: "))
  # Segunda data.
  d2 = int(input("Dia: "))
  m2 = int(input("Mês: "))
  a2 = int(input("Ano: "))

  if a1>a2 or (a1==a2 and m1>m2) or (a1==a2 and m1==m2 and d1>d2):
       print("Data1 é maior!")
  elif a1==a2 and m1==m2 and d1==d2:
       print("Datas são iguais!")
  else:
       print("Data2 é maior!")
  
Segundo a propriedade distributiva da álgebra booleana temos:
expr1 and (expr2 or expr3) = (expr1 and expr2) or (expr1 and expr3)
Logo, uma outra solução pode ser obtida colocando a condição a1==a2 em evidência:
  # Primeira data.
  d1 = int(input("Dia: "))
  m1 = int(input("Mês: "))
  a1 = int(input("Ano: "))
  # Segunda data.
  d2 = int(input("Dia: "))
  m2 = int(input("Mês: "))
  a2 = int(input("Ano: "))

  if a1>a2 or (a1==a2 and (m1>m2 or (m1==m2 and d1>d2))):
       print("Data1 é maior!")
  elif a1==a2 and m1==m2 and d1==d2:
       print("Datas são iguais!")
  else:
       print("Data2 é maior!")
  

Problema 2:

Dados um número inteiro n>0 e as notas de n alunos, determinar quantos ficaram de recuperação. Um aluno está de recuperação se sua nota estiver entre 30 e 50 (nota máxima é 100).

Uma solução usando operadores lógicos:

  n = int(input("Digite n: "))
  rec = 0
  i = 1
  while i <= n:
      nota = int(input("Digite uma nota: "))
      if nota >= 30 and nota < 50:
          rec = rec + 1
      i = i + 1

  print(rec,"alunos ficaram de recuperação")
  
Uma solução sem usar operadores lógicos:
  n = int(input("Digite n: "))
  rec = 0
  i = 1
  while i <= n:
      nota = int(input("Digite uma nota: "))
      if nota >= 30:
          if nota < 50:
              rec = rec + 1
      i = i + 1

  print(rec,"alunos ficaram de recuperação")
  
O Python ainda permite uma terceira solução, na qual o intervalo numérico é especificado de modo mais similar a nossa linguagem, usando operadores de comparação de forma encadeada:
  n = int(input("Digite n: "))
  rec = 0
  i = 1
  while i <= n:
      nota = int(input("Digite uma nota: "))
      if 30 <= nota < 50:
          rec = rec + 1
      i = i + 1

  print(rec,"alunos ficaram de recuperação")
  
No entanto, essa versão não é recomendada por não possuir um padrão equivalente em outras linguagens, o que pode gerar erros ao transcrever a solução para outras linguagens.

Problema 3:

Dados um número inteiro n, n>0, e uma sequência com n números inteiros, verificar se a sequência está em ordem crescente.
  n = int(input("Digite o tam da seq: "))
  ant = int(input("Digite um num da seq: "))
  cresce = True
  i = 2
  while i <= n and cresce:
      num = int(input("Digite um num da seq: "))
      if num <= ant:
          cresce = False
      ant = num
      i = i + 1

  if cresce:
      print("Sequência crescente")
  else:
      print("Sequência não é crescente")
  

Problema 4:

Dados um número inteiro n, n>0, e uma sequência com n números inteiros, determinar o maior inteiro da sequência. Por exemplo, para a sequência
    6    -2    7   0    -5    8   4 
o seu programa deve escrever o número 8.
  n = int(input("Digite o tam da seq: "))
  maior = int(input("Digite um num da seq: "))
  i = 2
  while i <= n:
      num = int(input("Digite um num da seq: "))
      if num > maior:
          maior = num
      i = i + 1
    
  print("Maior inteiro:",maior)