Capítulo 3: Operadores e Expressões#

Já vimos como armazenar informações em variáveis e trabalhar com diferentes tipos de dados. Mas de que adianta ter dados se não podemos fazer nada com eles? É aqui que entram os operadores - ferramentas que nos permitem realizar cálculos, comparações e tomar decisões em nossos programas.
Imagine operadores como os símbolos matemáticos que você usa desde a escola: +, -, *, /. Em Python, temos não apenas estes operadores aritméticos, mas também operadores para comparar valores (>, <, ==), combinar condições (and, or) e muito mais.
Neste capítulo, vamos explorar os principais tipos de operadores em Python:
Operadores Aritméticos: para realizar cálculos matemáticos
Operadores Relacionais: para comparar valores
Operadores Lógicos: para combinar condições
Operadores de Atribuição: para armazenar e atualizar valores
Operações com Bits: para manipulação a nível binário
Dominar esses operadores é essencial para escrever programas que resolvam problemas reais, desde uma simples calculadora até sistemas complexos de tomada de decisão.
Operadores Aritméticos#
Os operadores aritméticos são os primeiros que aprendemos em qualquer linguagem de programação, pois trabalham de forma muito similar à matemática que já conhecemos. Eles nos permitem realizar operações matemáticas com números, sejam inteiros ou decimais.
Tabela de Operadores Aritméticos#
Python oferece sete operadores aritméticos básicos. Vamos conhecer cada um deles:
Operador |
Símbolo |
Descrição |
Exemplo |
Resultado |
|---|---|---|---|---|
Adição |
|
Soma dois valores |
|
|
Subtração |
|
Subtrai o segundo valor do primeiro |
|
|
Multiplicação |
|
Multiplica dois valores |
|
|
Divisão |
|
Divide o primeiro valor pelo segundo (resultado sempre decimal) |
|
|
Divisão Inteira |
|
Divide e retorna apenas a parte inteira |
|
|
Módulo |
|
Retorna o resto da divisão |
|
|
Exponenciação |
|
Eleva o primeiro valor à potência do segundo |
|
|
Entendendo Cada Operador#
Vamos explorar alguns desses operadores com mais detalhes:
Divisão (/) vs Divisão Inteira (//)
A diferença entre / e // é importante:
O operador
/sempre retorna um número decimal (float), mesmo quando a divisão é exataO operador
//retorna apenas a parte inteira, descartando a parte decimal
print(10 / 2)
print(10 // 2)
print(10 / 3)
print(10 // 3)
Saída:
5.0
5
3.3333333333333335
3
Operador Módulo (%)
O operador módulo é muito útil para diversas situações:
Verificar se um número é par ou ímpar
Determinar se um número é múltiplo de outro
Obter o último dígito de um número
Fazer operações cíclicas (como relógios)
# Verificar se um número é par
numero = 8
if numero % 2 == 0:
print(f"{numero} é par")
else:
print(f"{numero} é ímpar")
# Obter o último dígito de um número
valor = 12345
ultimo_digito = valor % 10
print(f"Último dígito: {ultimo_digito}")
Saída:
8 é par
Último dígito: 5
Operador de Exponenciação (**)
O operador ** substitui funções como pow() e torna o código mais legível:
# Calcular área de um círculo: A = π * r²
raio = 5
PI = 3.14159
area = PI * raio ** 2
print(f"Área do círculo: {area:.2f}")
Saída:
Área do círculo: 78.54
Exemplos Práticos#
Vamos ver exemplos que utilizam vários operadores em situações do dia a dia:
Exemplo 1: Calculadora de compras com desconto
preco_original = 150.00
quantidade = 3
desconto_percentual = 10
# Cálculos
subtotal = preco_original * quantidade
desconto = subtotal * (desconto_percentual / 100)
total = subtotal - desconto
print(f"Subtotal: R$ {subtotal:.2f}")
print(f"Desconto ({desconto_percentual}%): R$ {desconto:.2f}")
print(f"Total a pagar: R$ {total:.2f}")
Saída:
Subtotal: R$ 450.00
Desconto (10%): R$ 45.00
Total a pagar: R$ 405.00
Exemplo 2: Conversão de tempo
# Converter segundos totais em horas, minutos e segundos
tempo_total_segundos = 3725
horas = tempo_total_segundos // 3600 # Quantas horas completas
resto_apos_horas = tempo_total_segundos % 3600 # Segundos restantes
minutos = resto_apos_horas // 60 # Quantos minutos completos
segundos = resto_apos_horas % 60 # Segundos restantes
print(f"{tempo_total_segundos} segundos equivalem a:")
print(f"{horas} hora(s), {minutos} minuto(s) e {segundos} segundo(s)")
Saída:
3725 segundos equivalem a:
1 hora(s), 2 minuto(s) e 5 segundo(s)
Precedência dos Operadores Aritméticos#
Assim como na matemática, Python segue uma ordem específica ao avaliar expressões. Essa ordem é chamada de precedência de operadores:
Prioridade |
Operadores |
Observação |
|---|---|---|
1ª (mais alta) |
|
Exponenciação |
2ª |
|
Multiplicação, divisões e módulo |
3ª (mais baixa) |
|
Adição e subtração |
Regras importantes:
Operadores com a mesma precedência são avaliados da esquerda para a direita
Use parênteses
()para alterar a ordem de avaliaçãoQuando em dúvida, use parênteses para deixar o código mais claro
Exemplos de precedência:
# Sem parênteses: multiplicação antes da adição
resultado1 = 2 + 3 * 4
print(resultado1)
# Com parênteses: forçamos a adição primeiro
resultado2 = (2 + 3) * 4
print(resultado2)
# Exemplo complexo
resultado3 = 2 ** 3 + 4 * 5 - 10 / 2
print(resultado3)
Saída:
14
20
23.0
Operadores Unários#
Operadores unários são aqueles que atuam sobre um único valor (ao contrário dos operadores binários, que atuam sobre dois valores). Em operações aritméticas, o operador unário mais comum é o de negação (-), que inverte o sinal de um número:
numero_positivo = 10
numero_negativo = -numero_positivo
print(numero_negativo)
# O operador unário tem alta precedência
resultado = -5 + 2 * 3
print(resultado)
Saída:
-10
1
Exemplo prático:
# Cálculo de temperatura com variação
temperatura_inicial = 25
variacao = -3 # Temperatura diminuiu 3 graus
temperatura_final = temperatura_inicial + variacao
print(f"Temperatura inicial: {temperatura_inicial}°C")
print(f"Variação: {variacao}°C")
print(f"Temperatura final: {temperatura_final}°C")
Saída:
Temperatura inicial: 25°C
Variação: -3°C
Temperatura final: 22°C
Nota: Existem outros operadores unários em Python, como o operador de inversão de bits (
~), que veremos mais adiante na seção de operações com bits.
Operadores Relacionais#
Agora que sabemos realizar cálculos com operadores aritméticos, precisamos aprender a comparar valores. É aqui que entram os operadores relacionais, também conhecidos como operadores de comparação.
Estes operadores são fundamentais para criar programas que tomam decisões. Por exemplo: verificar se um aluno foi aprovado, se um produto está em estoque, se uma senha está correta, ou se um usuário tem idade suficiente para acessar determinado conteúdo.
O resultado de uma comparação é sempre um valor booleano: True (verdadeiro) ou False (falso).
Tabela de Operadores Relacionais#
Operador |
Símbolo |
Descrição |
Exemplo |
Resultado |
|---|---|---|---|---|
Igualdade |
|
Verifica se dois valores são iguais |
|
|
Diferença |
|
Verifica se dois valores são diferentes |
|
|
Menor que |
|
Verifica se o primeiro é menor que o segundo |
|
|
Maior que |
|
Verifica se o primeiro é maior que o segundo |
|
|
Menor ou igual |
|
Verifica se o primeiro é menor ou igual ao segundo |
|
|
Maior ou igual |
|
Verifica se o primeiro é maior ou igual ao segundo |
|
|
Atenção - Igualdade vs Atribuição
Não confunda o operador de igualdade == (dois sinais de igual) com o operador de atribuição = (um sinal de igual). O primeiro compara valores, o segundo atribui valores!
Exemplos Básicos#
Vamos ver como usar esses operadores na prática:
# Comparando números
nota = 7.5
media = 6.0
print(f"Nota igual à média? {nota == media}")
print(f"Nota diferente da média? {nota != media}")
print(f"Nota maior que a média? {nota > media}")
print(f"Nota maior ou igual a 7? {nota >= 7}")
print(f"Nota menor que 5? {nota < 5}")
Saída:
Nota igual à média? False
Nota diferente da média? True
Nota maior que a média? True
Nota maior ou igual a 7? True
Nota menor que 5? False
Comparação de Strings#
As comparações não funcionam apenas com números. Podemos comparar strings também! A comparação segue a ordem lexicográfica (ordem alfabética), baseada nos valores Unicode dos caracteres.
nome1 = "Ana"
nome2 = "Bruno"
nome3 = "Ana"
print(f"'{nome1}' é igual a '{nome3}'? {nome1 == nome3}")
print(f"'{nome1}' é diferente de '{nome2}'? {nome1 != nome2}")
print(f"'{nome1}' vem antes de '{nome2}'? {nome1 < nome2}")
Saída:
'Ana' é igual a 'Ana'? True
'Ana' é diferente de 'Bruno'? True
'Ana' vem antes de 'Bruno'? True
Pontos importantes sobre comparação de strings:
A comparação é case-sensitive:
"Python" != "python"Letras maiúsculas vêm antes de minúsculas na ordem Unicode
Para ignorar maiúsculas/minúsculas, converta as strings:
texto.lower()outexto.upper()
# Comparação case-sensitive
print("Python" == "python")
# Comparação ignorando maiúsculas/minúsculas
texto1 = "Python"
texto2 = "python"
print(texto1.lower() == texto2.lower())
Saída:
False
True
Exemplos Práticos#
Exemplo 1: Sistema de aprovação de alunos
nota_final = float(input("Digite a nota final do aluno: "))
media_minima = 7.0
if nota_final >= media_minima:
print(f"Aluno APROVADO com nota {nota_final}")
else:
print(f"Aluno REPROVADO com nota {nota_final}")
Exemplo de execução:
Digite a nota final do aluno: 8.5
Aluno APROVADO com nota 8.5
Exemplo 2: Validação de idade
idade = int(input("Digite sua idade: "))
idade_minima = 18
if idade >= idade_minima:
print("Acesso permitido.")
else:
anos_faltando = idade_minima - idade
print(f"Acesso negado. Você precisa ter pelo menos {idade_minima} anos.")
print(f"Faltam {anos_faltando} ano(s).")
Exemplo de execução:
Digite sua idade: 16
Acesso negado. Você precisa ter pelo menos 18 anos.
Faltam 2 ano(s).
Exemplo 3: Validação de login
usuario_correto = "admin"
senha_correta = "1234"
usuario = input("Usuário: ")
senha = input("Senha: ")
if usuario == usuario_correto and senha == senha_correta:
print("Login realizado com sucesso!")
else:
print("Usuário ou senha incorretos.")
Exemplo de execução:
Usuário: admin
Senha: 1234
Login realizado com sucesso!
Combinando Comparações#
Os operadores relacionais são frequentemente usados com estruturas condicionais (if, elif, else) e podem ser combinados com operadores lógicos (and, or, not), que veremos na próxima seção.
Os operadores relacionais são a base para criar programas inteligentes que tomam decisões. Eles trabalham em conjunto com as estruturas condicionais para controlar o fluxo do programa baseado em diferentes situações.
Operadores Lógicos#
Vimos que os operadores relacionais nos permitem fazer comparações simples. Mas e quando precisamos verificar múltiplas condições ao mesmo tempo? Por exemplo: “o usuário tem mais de 18 anos E possui carteira de habilitação?” ou “o pagamento foi feito por cartão OU por PIX?”.
Para essas situações, usamos os operadores lógicos. Eles nos permitem combinar várias condições booleanas em uma única expressão, criando lógicas mais complexas e poderosas.
Tabela de Operadores Lógicos#
Operador |
Símbolo |
Descrição |
Exemplo |
Resultado |
Precedência |
|---|---|---|---|---|---|
E lógico |
|
Retorna |
|
|
Média |
Ou lógico |
|
Retorna |
|
|
Baixa |
Negação |
|
Inverte o valor booleano |
|
|
Alta |
Entendendo Cada Operador#
Operador and (E lógico)
O operador and exige que todas as condições sejam verdadeiras:
idade = 20
tem_carteira = True
pode_dirigir = (idade >= 18) and tem_carteira
print(pode_dirigir)
Saída:
True
Tabela Verdade do and:
Condição A |
Condição B |
A and B |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Operador or (OU lógico)
O operador or precisa que pelo menos uma condição seja verdadeira:
tem_cartao = False
tem_dinheiro = True
pode_pagar = tem_cartao or tem_dinheiro
print(pode_pagar)
Saída:
True
Tabela Verdade do or:
Condição A |
Condição B |
A or B |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Operador not (Negação)
O operador not inverte o valor booleano:
esta_chovendo = False
sair_para_correr = not esta_chovendo
print(sair_para_correr)
Saída:
True
Tabela Verdade do not:
Condição |
not Condição |
|---|---|
|
|
|
|
Precedência dos Operadores Lógicos#
Quando combinamos múltiplos operadores lógicos, eles são avaliados nesta ordem:
not(mais alta precedência)and(média precedência)or(mais baixa precedência)
# Exemplo sem parênteses
resultado1 = True or True and False
print(resultado1)
# Exemplo com parênteses (mudamos a ordem)
resultado2 = (True or True) and False
print(resultado2)
Saída:
True
False
Dica - Clareza no Código
Mesmo quando não é obrigatório, use parênteses para tornar suas expressões mais claras e legíveis!
Exemplos Práticos#
Exemplo 1: Verificando se um número está em um intervalo
nota = float(input("Digite a nota (0-10): "))
# Verificar se a nota está entre 0 e 10
nota_valida = (nota >= 0) and (nota <= 10)
if nota_valida:
print(f"Nota {nota} é válida!")
else:
print(f"Nota {nota} é inválida! Digite um valor entre 0 e 10.")
Exemplo de execução:
Digite a nota (0-10): 8.5
Nota 8.5 é válida!
Exemplo 2: Verificando múltiplas formas de pagamento
forma_pagamento = input("Forma de pagamento (cartao/dinheiro/pix): ").lower()
# Aceita qualquer uma das três formas
pagamento_aceito = (forma_pagamento == "cartao") or \
(forma_pagamento == "dinheiro") or \
(forma_pagamento == "pix")
if pagamento_aceito:
print("Pagamento aceito!")
else:
print("Forma de pagamento não aceita.")
Exemplo de execução:
Forma de pagamento (cartao/dinheiro/pix): pix
Pagamento aceito!
Exemplo 3: Sistema de acesso com múltiplas validações
idade = int(input("Digite sua idade: "))
tem_autorizacao = input("Tem autorização dos pais? (sim/nao): ").lower() == "sim"
# Pode entrar se: tem 18+ OU (tem menos de 18 MAS tem autorização)
pode_entrar = (idade >= 18) or (idade < 18 and tem_autorizacao)
if pode_entrar:
print("Acesso permitido!")
else:
print("Acesso negado. Menores de 18 precisam de autorização.")
Exemplo de execução:
Digite sua idade: 16
Tem autorização dos pais? (sim/nao): sim
Acesso permitido!
Exemplo 4: Validação de senha forte
senha = input("Digite sua senha: ")
# Critérios para senha forte
tem_minimo_caracteres = len(senha) >= 8
tem_numero = any(char.isdigit() for char in senha)
tem_letra = any(char.isalpha() for char in senha)
# Senha é forte se atende TODOS os critérios
senha_forte = tem_minimo_caracteres and tem_numero and tem_letra
if senha_forte:
print("Senha forte! Cadastro realizado com sucesso.")
else:
print("Senha fraca! Use pelo menos 8 caracteres, incluindo letras e números.")
Exemplo de execução:
Digite sua senha: python123
Senha forte! Cadastro realizado com sucesso.
Exemplo 5: Usando not para inverter condições
idade = int(input("Digite sua idade: "))
# Verifica se NÃO é maior de idade
if not (idade >= 18):
print("Você é menor de idade.")
else:
print("Você é maior de idade.")
Exemplo de execução:
Digite sua idade: 16
Você é menor de idade.
Simplificando Expressões Lógicas#
Às vezes, podemos simplificar nossas expressões lógicas. Por exemplo:
# Forma mais verbosa
if (x > 0) == True:
print("Positivo")
# Forma simplificada (melhor)
if x > 0:
print("Positivo")
# Outro exemplo
# Forma mais verbosa
if not (idade < 18):
print("Adulto")
# Forma simplificada (melhor)
if idade >= 18:
print("Adulto")
Combinando Tudo#
Os operadores lógicos são extremamente poderosos quando combinados com operadores relacionais:
# Sistema de desconto em loja
valor_compra = float(input("Valor da compra: R$ "))
eh_cliente_vip = input("É cliente VIP? (sim/nao): ").lower() == "sim"
primeira_compra = input("É a primeira compra? (sim/nao): ").lower() == "sim"
# Desconto de 20% para VIP OU primeira compra com valor acima de R$ 100
tem_desconto = eh_cliente_vip or (primeira_compra and valor_compra > 100)
if tem_desconto:
valor_final = valor_compra * 0.8 # 20% de desconto
print(f"Você ganhou 20% de desconto!")
print(f"Valor final: R$ {valor_final:.2f}")
else:
print(f"Valor final: R$ {valor_compra:.2f}")
Os operadores lógicos são essenciais para criar programas que tomam decisões complexas baseadas em múltiplas condições. Dominar esses operadores permite escrever código mais sofisticado e resolver problemas do mundo real!
Operador Ternário (Expressão Condicional)#
Quando você precisa escolher entre dois valores dependendo de uma condição, Python oferece o operador ternário, também chamado de expressão condicional. Ele permite escrever em uma única linha o que normalmente faríamos com if/else em várias linhas.
Sintaxe#
valor_se_verdadeiro if condição else valor_se_falso
A leitura é direta: “use valor_se_verdadeiro se a condição for verdadeira, senão use valor_se_falso”.
Exemplo Básico#
Suponha que queremos classificar um número como “par” ou “ímpar”:
numero = 10
classificacao = "par" if numero % 2 == 0 else "ímpar"
print(f"{numero} é {classificacao}")
Saída:
10 é par
A versão equivalente com if/else em bloco seria mais longa:
numero = 10
if numero % 2 == 0:
classificacao = "par"
else:
classificacao = "ímpar"
print(f"{numero} é {classificacao}")
As duas formas produzem o mesmo resultado — a ternária apenas condensa a lógica em uma única expressão que produz um valor.
Por Que se Chama “Ternário”?#
A maioria dos operadores que vimos até aqui são binários (atuam sobre dois valores: 2 + 3, x and y). Vimos também operadores unários (atuam sobre um único valor: -x, not x). O operador ternário atua sobre três operandos: o valor retornado quando a condição é verdadeira, a condição em si, e o valor retornado quando a condição é falsa.
Mais Exemplos#
Exemplo 1: Definir um desconto baseado em valor mínimo
valor_compra = 250
desconto = 0.10 if valor_compra > 200 else 0.05
print(f"Desconto: {desconto * 100:.0f}%")
Saída:
Desconto: 10%
Exemplo 2: Mensagem de aprovação/reprovação
nota = 7.5
resultado = "Aprovado" if nota >= 6 else "Reprovado"
print(resultado)
Saída:
Aprovado
Exemplo 3: Valor absoluto sem usar abs()
x = -8
modulo = x if x >= 0 else -x
print(modulo)
Saída:
8
Aninhamento (com cuidado)#
É possível encadear ternários, mas a legibilidade cai rápido. Quando precisar de mais de duas opções, prefira if/elif/else em bloco (que veremos no próximo capítulo):
nota = 8.5
conceito = "A" if nota >= 9 else "B" if nota >= 7 else "C" if nota >= 5 else "D"
print(conceito)
Saída:
B
Dica - Quando usar o ternário
Use quando a escolha entre dois valores cabe confortavelmente em uma linha e deixa o código mais direto.
Evite quando a condição ou os valores são longos — o
if/elseem bloco fica mais legível.Lembre que o ternário é uma expressão (produz um valor que pode ser atribuído ou passado a uma função), enquanto
if/elseem bloco é uma instrução (executa código). Essa diferença será importante no próximo capítulo, quando combinarmos ternários com compreensões de listas.
Operadores de Associação#
Até agora, aprendemos a fazer cálculos, comparações e combinar condições. Mas muitas vezes precisamos verificar se um elemento pertence ou não pertence a uma coleção de dados. Por exemplo: verificar se uma letra está em uma palavra, se um nome está em uma lista de aprovados, ou se um produto está disponível no estoque.
Para essas situações, Python oferece os operadores de associação: in e not in.
Tabela de Operadores de Associação#
Operador |
Símbolo |
Descrição |
Exemplo |
Resultado |
|---|---|---|---|---|
Pertence |
|
Verifica se um valor está presente na sequência |
|
|
Não pertence |
|
Verifica se um valor não está presente na sequência |
|
|
Demonstração visual dos operadores in e not in
Tipos de Sequências Suportadas#
Os operadores de associação funcionam com diversos tipos de coleções:
Strings: verificar se uma letra ou palavra está contida
Listas: verificar se um elemento existe na lista
Tuplas: verificar membros em tuplas
Sets: verificar pertencimento (muito eficiente)
Dicionários: verificar se uma chave existe (não valores!)
Exemplos Básicos#
Verificando em strings:
frase = "Python é incrível"
print('P' in frase)
print('Java' in frase)
print('python' in frase)
print('Python' in frase)
# Ignorando maiúsculas/minúsculas
print('python' in frase.lower())
Saída:
True
False
False
True
True
Verificando em listas:
frutas = ['maçã', 'banana', 'laranja', 'uva']
print('banana' in frutas)
print('melancia' in frutas)
print('melancia' not in frutas)
Saída:
True
False
True
Verificando em dicionários:
estoque = {'arroz': 50, 'feijão': 30, 'macarrão': 40}
# Verifica nas CHAVES (não nos valores)
print('arroz' in estoque)
print('açúcar' in estoque)
print(50 in estoque)
Saída:
True
False
False
Exemplos Práticos#
Exemplo 1: Validação de vogais
letra = input("Digite uma letra: ").lower()
vogais = 'aeiou'
if letra in vogais:
print(f"'{letra}' é uma vogal.")
else:
print(f"'{letra}' é uma consoante.")
Exemplo de execução:
Digite uma letra: A
'a' é uma vogal.
Exemplo 2: Menu de opções
opcoes_validas = ['1', '2', '3', '4', 'sair']
opcao = input("Escolha uma opção (1-4 ou 'sair'): ")
if opcao in opcoes_validas:
print(f"Você escolheu: {opcao}")
else:
print("Opção inválida! Tente novamente.")
Exemplo de execução:
Escolha uma opção (1-4 ou 'sair'): 2
Você escolheu: 2
Exemplo 3: Lista de permissões (blacklist/whitelist)
usuarios_bloqueados = ['spam_user', 'bot123', 'fake_account']
usuario = input("Digite seu nome de usuário: ").lower()
if usuario in usuarios_bloqueados:
print("Acesso negado! Usuário bloqueado.")
else:
print("Bem-vindo!")
Exemplo de execução:
Digite seu nome de usuário: bot123
Acesso negado! Usuário bloqueado.
Exemplo 4: Verificando múltiplas palavras-chave
texto = input("Digite uma frase: ").lower()
palavras_proibidas = ['spam', 'golpe', 'fraude']
# Verificar se alguma palavra proibida está no texto
contem_spam = any(palavra in texto for palavra in palavras_proibidas)
if contem_spam:
print("Mensagem bloqueada! Contém termos proibidos.")
else:
print("Mensagem enviada com sucesso!")
Exemplo de execução:
Digite uma frase: Oferta especial sem golpe
Mensagem bloqueada! Contém termos proibidos.
Exemplo 5: Sistema de controle de acesso
# Níveis de acesso por departamento
departamentos_admin = ['TI', 'RH', 'Diretoria']
departamento = input("Digite seu departamento: ")
if departamento in departamentos_admin:
print(f"Acesso ADMINISTRADOR concedido para {departamento}")
else:
print(f"Acesso USUÁRIO concedido para {departamento}")
Exemplo de execução:
Digite seu departamento: TI
Acesso ADMINISTRADOR concedido para TI
Diferença Entre in em Strings e Listas#
É importante entender como in funciona diferentemente em strings e listas:
# Em strings: verifica substring
print('ana' in 'banana')
# Em listas: verifica elemento completo
print('ana' in ['ba', 'na', 'na'])
print('na' in ['ba', 'na', 'na'])
Saída:
True
False
True
Combinando com Outros Operadores#
Os operadores de associação funcionam bem combinados com operadores lógicos:
# Sistema de classificação de filmes
idade = int(input("Digite sua idade: "))
filme = input("Digite o nome do filme: ")
filmes_adultos = ['Filme A', 'Filme B', 'Filme C']
# Pode assistir se: NÃO é filme adulto OU tem 18+
pode_assistir = (filme not in filmes_adultos) or (idade >= 18)
if pode_assistir:
print(f"Você pode assistir '{filme}'")
else:
print(f"Você não pode assistir '{filme}' - classificação 18+")
Exemplo de execução:
Digite sua idade: 16
Digite o nome do filme: Filme Infantil
Você pode assistir 'Filme Infantil'
Observações Importantes#
Case-Sensitive:
A verificação diferencia maiúsculas de minúsculas:
print('Python' in 'python')
print('Python'.lower() in 'python')
Saída:
False
True
Em Dicionários:
O operador in verifica apenas as chaves, não os valores:
dados = {'nome': 'João', 'idade': 25}
print('nome' in dados)
print('João' in dados)
print('João' in dados.values())
Saída:
True
False
True
Strings e Substrings:
Em strings, in encontra substrings, não apenas caracteres individuais:
print('thon' in 'Python')
Saída:
True
Os operadores de associação são extremamente úteis para validações, filtros e verificações de pertencimento, tornando o código mais limpo e legível!
Operadores de Atribuição#
Já vimos o operador de atribuição simples (=) ao declarar variáveis. Mas Python oferece operadores de atribuição combinados que tornam nosso código mais conciso e eficiente. Esses operadores realizam uma operação e atribuem o resultado à variável em uma única etapa.
Tabela de Operadores de Atribuição#
Operador |
Descrição |
Exemplo |
Equivalente a |
Resultado |
|---|---|---|---|---|
|
Atribuição simples |
|
- |
|
|
Soma e atribui |
|
|
|
|
Subtrai e atribui |
|
|
|
|
Multiplica e atribui |
|
|
|
|
Divide e atribui |
|
|
|
|
Divisão inteira e atribui |
|
|
|
|
Módulo e atribui |
|
|
|
|
Exponenciação e atribui |
|
|
|
Por Que Usar Operadores de Atribuição Combinados?#
Os operadores combinados tornam o código:
Mais curto: menos digitação
Mais legível: intenção mais clara
Mais eficiente: em alguns casos, pode ser otimizado pelo interpretador
# Forma tradicional
contador = 0
contador = contador + 1
print(contador)
# Forma com operador combinado (melhor)
contador = 0
contador += 1
print(contador)
Saída:
1
1
Exemplos Básicos#
Incremento e Decremento:
# Incremento
pontos = 10
pontos += 5
print(f"Pontos: {pontos}")
# Decremento
vidas = 3
vidas -= 1
print(f"Vidas restantes: {vidas}")
Saída:
Pontos: 15
Vidas restantes: 2
Operações Matemáticas:
# Multiplicação
preco = 50.0
preco *= 2
print(f"Preço: R$ {preco}")
# Divisão
valor = 100
valor /= 4
print(f"Valor: {valor}")
# Exponenciação
base = 2
base **= 3
print(f"Resultado: {base}")
Saída:
Preço: R$ 100.0
Valor: 25.0
Resultado: 8
Exemplos Práticos#
Exemplo 1: Sistema de pontuação em jogo
pontos = 0
print(f"Pontos iniciais: {pontos}")
# Jogador acerta resposta fácil
pontos += 10
print(f"Acertou questão fácil! Pontos: {pontos}")
# Jogador acerta resposta difícil
pontos += 50
print(f"Acertou questão difícil! Pontos: {pontos}")
# Jogador usa dica (perde metade dos pontos)
pontos //= 2
print(f"Usou dica! Pontos: {pontos}")
Saída:
Pontos iniciais: 0
Acertou questão fácil! Pontos: 10
Acertou questão difícil! Pontos: 60
Usou dica! Pontos: 30
Exemplo 2: Cálculo de juros compostos
capital_inicial = float(input("Capital inicial: R$ "))
taxa_juros = float(input("Taxa de juros (% ao mês): "))
meses = int(input("Número de meses: "))
capital = capital_inicial
for mes in range(1, meses + 1):
capital *= (1 + taxa_juros / 100)
print(f"Mês {mes}: R$ {capital:.2f}")
print(f"\nCapital final: R$ {capital:.2f}")
print(f"Lucro: R$ {capital - capital_inicial:.2f}")
Exemplo de execução:
Capital inicial: R$ 1000
Taxa de juros (% ao mês): 5
Número de meses: 3
Mês 1: R$ 1050.00
Mês 2: R$ 1102.50
Mês 3: R$ 1157.63
Capital final: R$ 1157.63
Lucro: R$ 157.63
Exemplo 3: Contador de caracteres
texto = input("Digite um texto: ")
vogais = 0
consoantes = 0
espacos = 0
for caractere in texto.lower():
if caractere in 'aeiou':
vogais += 1
elif caractere.isalpha():
consoantes += 1
elif caractere == ' ':
espacos += 1
print(f"Vogais: {vogais}")
print(f"Consoantes: {consoantes}")
print(f"Espaços: {espacos}")
Exemplo de execução:
Digite um texto: Python é incrível
Vogais: 6
Consoantes: 9
Espaços: 2
Exemplo 4: Calculadora de desconto progressivo
preco_original = float(input("Preço do produto: R$ "))
quantidade = int(input("Quantidade: "))
# Desconto progressivo por quantidade
desconto_percentual = 0
if quantidade >= 10:
desconto_percentual += 10
if quantidade >= 20:
desconto_percentual += 5
if quantidade >= 50:
desconto_percentual += 10
preco_total = preco_original * quantidade
preco_total *= (1 - desconto_percentual / 100)
print(f"\nPreço original: R$ {preco_original * quantidade:.2f}")
print(f"Desconto: {desconto_percentual}%")
print(f"Preço final: R$ {preco_total:.2f}")
Exemplo de execução:
Preço do produto: R$ 50
Quantidade: 25
Preço original: R$ 1250.00
Desconto: 15%
Preço final: R$ 1062.50
Operadores de Atribuição com Strings#
Os operadores += e *= também funcionam com strings:
# Concatenação com +=
mensagem = "Olá"
mensagem += ", mundo!"
print(mensagem)
# Repetição com *=
separador = "-"
separador *= 30
print(separador)
# Construindo texto gradualmente
relatorio = "Relatório:\n"
relatorio += "- Item 1\n"
relatorio += "- Item 2\n"
relatorio += "- Item 3\n"
print(relatorio)
Saída:
Olá, mundo!
------------------------------
Relatório:
- Item 1
- Item 2
- Item 3
Operadores de Atribuição com Listas#
Com listas, os operadores combinados podem adicionar elementos ou concatenar listas:
# Adicionar elementos com +=
numeros = [1, 2, 3]
numeros += [4, 5]
print(numeros)
# Repetir lista com *=
sequencia = [0]
sequencia *= 5
print(sequencia)
Saída:
[1, 2, 3, 4, 5]
[0, 0, 0, 0, 0]
Observações Importantes#
Precedência:
Os operadores de atribuição têm baixa precedência e são avaliados da direita para a esquerda:
x = y = 10
print(f"x = {x}, y = {y}")
Saída:
x = 10, y = 10
Python não tem ++ ou --:
Importante - Operadores de Incremento
Diferente de linguagens como C ou Java, Python não possui operadores de incremento/decremento unários (++ e --). Use += e -= no lugar!
# Errado em Python
# contador++ # Erro!
# contador-- # Erro!
# Correto em Python
contador = 0
contador += 1
print(contador)
contador -= 1
print(contador)
Saída:
1
0
Modificação in-place:
Operadores combinados modificam a variável original:
lista_a = [1, 2, 3]
lista_b = lista_a
lista_a += [4, 5]
print(lista_a)
print(lista_b)
Saída:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Quando Usar Operadores de Atribuição Combinados#
Use operadores combinados quando:
Você está atualizando uma variável baseada em seu valor anterior
O código ficará mais claro e conciso
Você está fazendo operações repetitivas (loops, contadores, acumuladores)
# Bom uso: acumulador em loop
soma = 0
for numero in [1, 2, 3, 4, 5]:
soma += numero
print(f"Soma: {soma}")
# Bom uso: contador
tentativas = 3
while tentativas > 0:
senha = input(f"Digite a senha ({tentativas} tentativas): ")
if senha == "1234":
print("Acesso permitido!")
break
tentativas -= 1
else:
print("Acesso bloqueado!")
Exemplo de saída (com senha correta):
Digite a senha (3 tentativas): 1234
Acesso permitido!
Os operadores de atribuição combinados são ferramentas poderosas que tornam o código mais elegante e expressivo, especialmente em loops e operações repetitivas!
Operações com Bits#
Até agora, trabalhamos com operadores que manipulam números de forma “natural” - somando, subtraindo, comparando. Mas existe um nível ainda mais fundamental: as operações com bits. Essas operações trabalham diretamente com a representação binária dos números (0s e 1s).
Embora pareçam avançadas, as operações com bits são importantes em áreas como:
Criptografia: embaralhar e proteger dados
Compressão de dados: reduzir o tamanho de arquivos
Comunicação com hardware: controlar dispositivos eletrônicos
Otimização de desempenho: operações muito rápidas em sistemas de baixo nível
Manipulação de imagens: processamento de pixels
Representação Binária#
Antes de entender os operadores, vamos relembrar como números são representados em binário:
# Convertendo decimal para binário
numero = 5
binario = bin(numero)
print(f"{numero} em binário: {binario}")
# Convertendo binário para decimal
binario_string = "1101"
decimal = int(binario_string, 2)
print(f"{binario_string} em decimal: {decimal}")
Saída:
5 em binário: 0b101
1101 em decimal: 13
Nota: O prefixo
0bindica que o número está em formato binário.
Outros operadores: Python também oferece o operador de inversão de bits (
~), mas este é raramente usado em programação básica e não será abordado neste capítulo.
Operadores de Deslocamento de Bits#
Os operadores de deslocamento movem os bits de um número para a esquerda ou direita. Essas operações são equivalentes a multiplicar ou dividir por potências de 2.
Deslocamento à Esquerda (<<)#
Move os bits para a esquerda, preenchendo com zeros à direita. Cada posição deslocada multiplica o número por 2.
numero = 5
# Deslocar 1 posição à esquerda
resultado1 = numero << 1
print(f"{numero} << 1 = {resultado1}")
# Deslocar 2 posições à esquerda
resultado2 = numero << 2
print(f"{numero} << 2 = {resultado2}")
# Deslocar 3 posições à esquerda
resultado3 = numero << 3
print(f"{numero} << 3 = {resultado3}")
Saída:
5 << 1 = 10
5 << 2 = 20
5 << 3 = 40
Fórmula: n << k equivale a n * (2 ** k)
Deslocamento à Direita (>>)#
Move os bits para a direita, descartando os bits que “saem”. Cada posição deslocada divide o número por 2 (divisão inteira).
numero = 20
# Deslocar 1 posição à direita
resultado1 = numero >> 1
print(f"{numero} >> 1 = {resultado1}")
# Deslocar 2 posições à direita
resultado2 = numero >> 2
print(f"{numero} >> 2 = {resultado2}")
# Deslocar 3 posições à direita
resultado3 = numero >> 3
print(f"{numero} >> 3 = {resultado3}")
Saída:
20 >> 1 = 10
20 >> 2 = 5
20 >> 3 = 2
Fórmula: n >> k equivale a n // (2 ** k)
Visualizando Deslocamentos#
Vamos ver visualmente o que acontece com os bits:
numero = 12
print(f"Número original: {numero:4d} -> {bin(numero)}")
print(f"Deslocado << 1: {numero << 1:4d} -> {bin(numero << 1)}")
print(f"Deslocado << 2: {numero << 2:4d} -> {bin(numero << 2)}")
print()
print(f"Número original: {numero:4d} -> {bin(numero)}")
print(f"Deslocado >> 1: {numero >> 1:4d} -> {bin(numero >> 1)}")
print(f"Deslocado >> 2: {numero >> 2:4d} -> {bin(numero >> 2)}")
Saída:
Número original: 12 -> 0b1100
Deslocado << 1: 24 -> 0b11000
Deslocado << 2: 48 -> 0b110000
Número original: 12 -> 0b1100
Deslocado >> 1: 6 -> 0b110
Deslocado >> 2: 3 -> 0b11
Números com Sinal vs Sem Sinal#
Em Python, os inteiros têm precisão arbitrária e são sempre com sinal (podem ser positivos ou negativos). No entanto, é importante entender a diferença conceitual:
Números sem sinal (unsigned): Representam apenas valores não negativos. Todos os bits são usados para o valor.
Números com sinal (signed): O bit mais à esquerda indica o sinal (0 = positivo, 1 = negativo). Python usa esta representação.
# Deslocamento com números negativos
numero_negativo = -8
print(f"Número: {numero_negativo}")
print(f"Binário: {bin(numero_negativo)}")
print(f"Deslocado >> 1: {numero_negativo >> 1}")
print(f"Deslocado << 1: {numero_negativo << 1}")
Saída:
Número: -8
Binário: -0b1000
Deslocado >> 1: -4
Deslocado << 1: -16
Exemplos Práticos#
Exemplo 1: Multiplicação e divisão rápida por potências de 2
# Multiplicar por 2, 4, 8...
valor = 7
print(f"{valor} * 2 = {valor << 1}")
print(f"{valor} * 4 = {valor << 2}")
print(f"{valor} * 8 = {valor << 3}")
print()
# Dividir por 2, 4, 8...
valor = 100
print(f"{valor} / 2 = {valor >> 1}")
print(f"{valor} / 4 = {valor >> 2}")
print(f"{valor} / 8 = {valor >> 3}")
Saída:
7 * 2 = 14
7 * 4 = 28
7 * 8 = 56
100 / 2 = 50
100 / 4 = 25
100 / 8 = 12
Exemplo 2: Verificar se um número é potência de 2
def eh_potencia_de_2(n):
"""
Um número é potência de 2 se tiver apenas um bit 1.
Exemplo: 8 = 1000, 16 = 10000
Truque: n & (n-1) == 0 para potências de 2
"""
return n > 0 and (n & (n - 1)) == 0
# Testando
numeros = [1, 2, 4, 5, 8, 15, 16, 32, 33]
for num in numeros:
resultado = "é" if eh_potencia_de_2(num) else "não é"
print(f"{num} {resultado} potência de 2")
Saída:
1 é potência de 2
2 é potência de 2
4 é potência de 2
5 não é potência de 2
8 é potência de 2
15 não é potência de 2
16 é potência de 2
32 é potência de 2
33 não é potência de 2
Exemplo 3: Converter entre binário e decimal
# Função para exibir conversões
def exibir_conversao(decimal):
binario = bin(decimal)[2:]
print(f"Decimal: {decimal:3d} | Binário: {binario:>8s}")
print("Conversões Decimal -> Binário:")
for i in [5, 10, 15, 28, 42, 100]:
exibir_conversao(i)
print("\nConversões Binário -> Decimal:")
binarios = ["1010", "1111", "10000", "11001"]
for b in binarios:
decimal = int(b, 2)
print(f"Binário: {b:>8s} | Decimal: {decimal}")
Saída:
Conversões Decimal -> Binário:
Decimal: 5 | Binário: 101
Decimal: 10 | Binário: 1010
Decimal: 15 | Binário: 1111
Decimal: 28 | Binário: 11100
Decimal: 42 | Binário: 101010
Decimal: 100 | Binário: 1100100
Conversões Binário -> Decimal:
Binário: 1010 | Decimal: 10
Binário: 1111 | Decimal: 15
Binário: 10000 | Decimal: 16
Binário: 11001 | Decimal: 25
Outros Operadores Bitwise#
Embora não tenhamos detalhado neste capítulo introdutório, Python oferece outros operadores para manipulação de bits:
&(AND): Retorna 1 apenas se ambos os bits forem 1|(OR): Retorna 1 se pelo menos um bit for 1^(XOR): Retorna 1 se os bits forem diferentes~(NOT): Inverte todos os bits
Esses operadores são extremamente úteis em programação de baixo nível e veremos mais sobre eles em capítulos avançados.
Quando Usar Operações com Bits?#
Na maioria dos casos, você usará operadores aritméticos normais. Use operações com bits quando:
Precisar de performance extrema em cálculos específicos
Trabalhar com protocolos de comunicação de baixo nível
Manipular flags e máscaras de bits
Implementar algoritmos de criptografia ou compressão
Trabalhar com processamento de imagens
Para iniciantes, é mais importante entender o conceito do que dominar todos os detalhes. Conforme avançar em programação, essas operações se tornarão mais relevantes!
Precedência dos Operadores (Resumo)#
Ao longo deste capítulo, vimos diversos tipos de operadores. Quando combinamos vários deles em uma única expressão, Python precisa decidir qual operação executar primeiro. Essa ordem é determinada pela precedência de operadores.
Entender a precedência é crucial para:
Escrever expressões corretas
Ler e entender código de outras pessoas
Evitar bugs sutis em cálculos complexos
Tabela Completa de Precedência#
A tabela abaixo apresenta os operadores em ordem de precedência, da mais alta (executada primeiro) para a mais baixa (executada por último):
Prioridade |
Operador(es) |
Tipo |
Exemplo |
Descrição |
|---|---|---|---|---|
1ª (Mais alta) |
|
Parênteses |
|
Agrupa expressões e força avaliação |
2ª |
|
Exponenciação |
|
Potenciação |
3ª |
|
Unários |
|
Negação, inversão de bits, sinal positivo |
4ª |
|
Multiplicativos |
|
Multiplicação, divisão, divisão inteira, módulo |
5ª |
|
Aditivos |
|
Adição e subtração |
6ª |
|
Deslocamento de bits |
|
Deslocamento à esquerda/direita |
7ª |
|
AND bitwise |
|
E bit a bit |
8ª |
|
XOR bitwise |
|
OU exclusivo bit a bit |
9ª |
|
OR bitwise |
|
OU bit a bit |
10ª |
|
Relacionais |
|
Comparações |
11ª |
|
Associação |
|
Pertencimento |
12ª |
|
Negação lógica |
|
Inversão lógica |
13ª |
|
E lógico |
|
E lógico |
14ª |
|
OU lógico |
|
OU lógico |
15ª (Mais baixa) |
|
Atribuição |
|
Atribuição de valores |
Regras Importantes#
Parênteses são seus amigos
Regra de Ouro - Precedência de Operadores
Quando houver dúvida sobre a ordem de avaliação, use parênteses! Eles tornam o código mais legível e garantem a ordem desejada.
# Sem parênteses - pode confundir
resultado = 10 + 5 * 2 - 3
print(resultado)
# Com parênteses - intenção clara
resultado = 10 + (5 * 2) - 3
print(resultado)
# Mudando a ordem
resultado = (10 + 5) * (2 - 3)
print(resultado)
Saída:
17
17
-15
Mesma precedência: esquerda para direita
Quando operadores têm a mesma precedência, são avaliados da esquerda para a direita:
resultado = 10 - 5 - 2
print(resultado)
resultado = 100 / 10 / 2
print(resultado)
Saída:
3
5.0
Exceção: A exponenciação (**) é avaliada da direita para a esquerda:
resultado = 2 ** 3 ** 2
print(resultado)
Saída:
512
Atribuição tem precedência mais baixa
Operadores de atribuição são sempre avaliados por último:
x = 5 + 3 * 2
print(x)
Saída:
11
Exemplos Práticos Passo a Passo#
Exemplo 1: Expressão com múltiplos operadores
resultado = 2 + 3 * 4 ** 2 - 10 / 2
print(resultado)
Ordem de avaliação:
4 ** 2= 16 (exponenciação - mais alta)3 * 16= 48 (multiplicação)10 / 2= 5.0 (divisão)2 + 48= 50 (adição - esquerda para direita)50 - 5.0= 45.0 (subtração)
Saída:
45.0
Exemplo 2: Combinando operadores lógicos e relacionais
idade = 25
tem_carteira = True
resultado = idade >= 18 and tem_carteira or not tem_carteira
print(resultado)
Ordem de avaliação:
idade >= 18= True (relacional)not tem_carteira= False (negação lógica)True and True= True (and - esquerda para direita)True or False= True (or)
Saída:
True
Exemplo 3: Operações com bits e aritméticas
resultado = 5 + 3 << 2
print(resultado)
Ordem de avaliação:
5 + 3= 8 (adição tem precedência maior que deslocamento)8 << 2= 32 (deslocamento à esquerda)
Saída:
32
Mas se quisermos deslocar 3 primeiro:
resultado = 5 + (3 << 2)
print(resultado)
Saída:
17
Exemplo Completo: Expressão Complexa#
Vamos avaliar uma expressão que combina vários tipos de operadores:
a = 10
b = 5
c = 2
resultado = a + b * c ** 2 >= 30 and not b < c or a // b == 2
print(resultado)
Passo a passo:
c ** 2= 4 (exponenciação - mais alta)b * 4= 20 ea // b= 2 (multiplicação e divisão inteira)a + 20= 30 (adição)30 >= 30= True,b < c= False,2 == 2= True (relacionais)not False= True (negação lógica)True and True= True (and)True or True= True (or)
Saída:
True
Dicas para Escrever Código Claro#
Use parênteses generosamente
# Menos claro
x = 10
y = 5
z = 0
if x > 5 and y < 10 or z == 0:
print("Condição verdadeira")
# Mais claro
if (x > 5 and y < 10) or (z == 0):
print("Condição verdadeira")
Saída:
Condição verdadeira
Condição verdadeira
Use variáveis intermediárias
# Menos claro
a = 10
b = 5
c = 3
d = 20
e = 100
f = 50
g = 60
h = True
if a + b * c > d and e / f < g or h:
print("Resultado: Verdadeiro")
# Mais claro
soma_ponderada = a + b * c
razao = e / f
if (soma_ponderada > d and razao < g) or h:
print("Resultado: Verdadeiro")
Saída:
Resultado: Verdadeiro
Resultado: Verdadeiro
Regra de Ouro - Precedência de Operadores
A precedência de operadores é uma ferramenta poderosa, mas não abuse dela! Código claro é melhor que código “inteligente”. Quando em dúvida:
Use parênteses
Quebre expressões complexas
Adicione comentários explicativos
Com a prática, você naturalmente internalizará essas precedências e escreverá código mais eficiente e legível!
Exercícios#
“Antes de começar os exercícios, é importante notar que para testes com múltiplas entradas em uma mesma linha, é útil utilizar o método .split(). Este método divide a string recebida pelo input() em substrings, utilizando espaços em branco como delimitadores. Ele retorna uma lista contendo as substrings resultantes.
Por exemplo, para uma entrada: 1 1 6 6 4 4
entrada = input().split()
print(entrada)
Ao executar o código acima com a entrada 1 1 6 6 4 4, a saída será:
['1', '1', '6', '6', '4', '4']
Dada a expressão matemática: \(a = 4 * (2 + 3) - 7\). Crie uma variável chamada
ae atribua a ela o resultado dessa expressão. Em seguida, crie uma variável chamadabe atribua a ela o valor deamultiplicado por 2. Por fim, imprima os valores deaeb.
# Teste 1
Entrada: Sem entrada
Saída:
O valor de 'a' é: 13
O valor de 'b' é: 26
Escreva um programa que solicita ao usuário um número inteiro positivo entre 100 e 1000. Em seguida, o programa deve calcular o resto da divisão desse número por 5, armazenar o resultado em uma variável chamada resto e imprimir este valor.
Certifique-se de que o programa lide adequadamente com entradas inválidas. Caso o usuário insira um número negativo ou fora do intervalo especificado, exiba a seguinte mensagem de erro: “Por favor, insira um número inteiro positivo entre 100 e 1000.”
# Teste 1
Entrada: 172
Saída: O resto da divisão de 172 por 5 é 2.
# Teste 2
Entrada: -10
Saída: Por favor, insira um número inteiro positivo entre 100 e 1000.
# Teste 3
Entrada: 2000
Saída: Por favor, insira um número inteiro positivo entre 100 e 1000.
# Teste 4
Entrada: 500
Saída: O resto da divisão de 500 por 5 é 0.
Escreva um programa que converta uma temperatura de Celsius para Fahrenheit. Utilize a fórmula: \(F = \frac{9}{5} * C + 32\).
Solicite ao usuário que digite a temperatura em Celsius.
Em seguida, converta a temperatura digitada para Fahrenheit utilizando a fórmula fornecida.
Por fim, exiba na tela o resultado da conversão para o usuário, formatado com 2 casas decimais.
# Teste 1
Entrada: 20.5
Saída: A temperatura em Fahrenheit é: 68.90
# Teste 2
Entrada: 0.75
Saída: A temperatura em Fahrenheit é: 33.35
Escreva um programa que recebe na entrada um número inteiro entre 10 e 20. O programa deverá converter esse número para sua representação binária, removendo o prefixo
'0b'da conversão. Em seguida, cada bit dessa representação binária será salvo em uma lista, onde cada posição da lista conterá um dos bits. Por fim, o programa deverá imprimir o resultado.
# Teste 1
Entrada: 10
Saída: ['1', '0', '1', '0']
# Teste 2
Entrada: 16
Saída: ['1', '0', '0', '0', '0']
# Teste 3
Entrada: 34
Saída: O número inserido não está dentro do intervalo permitido.
Utilizando tuplas, você deve receber as coordenadas de um retângulo no plano cartesiano, onde
(x_min, y_min)representa o canto inferior esquerdo e(x_max, y_max)representa o canto superior direito. Além disso, você tem um ponto representado por um par de coordenadas(x, y).
Sua tarefa é escrever um programa que determine se o ponto está dentro, tocando na borda ou fora do retângulo. O programa deve imprimir uma mensagem na saída padrão indicando o resultado da verificação.
Veja o exemplo didático do desenho ASCII para o Teste 1:
O
+representa os cantos do retângulo.O
.representa o ponto.As coordenadas do retângulo são
(x_min, y_min) = (1,1)e(x_max, y_max) = (6,6).As coordenadas do ponto são
(x, y) = (4,4).
7 |
6 | +--------------+ (6,6)
5 | | |
4 | | .(4,4) |
3 | | |
2 | | |
1 | +--------------+
0 | (1,1)
-+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7
# Teste 1
Entrada: 1 1 6 6 4 4
Saída: O ponto está dentro do retângulo.
# Teste 2
Entrada: 1 1 6 6 6 6
Saída: O ponto está tocando a borda do retângulo.
# Teste 3
Entrada: 1 1 6 6 0 1
Saída: O ponto está fora do retângulo.
# Teste 4
Entrada: 1 1 6 6 1 7
Saída: O ponto está fora do retângulo.
# Teste 5
Entrada: 1 1 6 6 6 1
Saída: O ponto está tocando a borda do retângulo.
# Teste 6
Entrada: 1 1 6 6 4 6
Saída: O ponto está tocando a borda do retângulo.
Desenvolva um sistema de autenticação que utilize um dicionário chamado
usuarios_senhaspara armazenar os nomes e as senhas de dois usuários. O programa deve solicitar que o usuário insira seu nome de usuário e senha. Em seguida, o sistema deve verificar se as credenciais inseridas correspondem às armazenadas no dicionário. Se as credenciais estiverem corretas, o programa deve exibir uma mensagem de “Login bem-sucedido! Bem-vindo, usuário.”. Caso contrário, deve informar ao usuário “Acesso negado. Credenciais inválidas.”.
Obs: Serão armazenados apenas três usuários.
# Teste 1
Entrada: usuario1 senha123 usuario2 abc456 usuario3 123456 usuario1 senha123
Saída: >> Login bem-sucedido! Bem-vindo, usuario1.
# Teste 2
Entrada: usuario1 senha143 usuario2 abc452 usuario3 654321 usuario2 123abc
Saída: >> Acesso negado. Credenciais inválidas.
Você é um biólogo trabalhando em um parque natural e está encarregado de monitorar três espécies de aves migratórias. Cada espécie tem um conjunto de ilhas preferidas para nidificação durante a temporada de migração. As preferências das espécies são as seguintes:
Espécie 1: Prefere as ilhas com IDs de 1 a 10.
Espécie 2: Prefere as ilhas com IDs de 6 a 17.
Algumas ilhas são compartilhadas entre as espécies, o que pode levar à competição por recursos. Seu trabalho é identificar quais ilhas são compartilhadas para implementar medidas de conservação. Dessa forma, dada uma entrada do usuário correspondente ao ID de uma das ilhas, verifique se essa ilha específica é uma área de competição ou se é exclusiva de uma das espécies.
# Teste 1
Entrada: 2
Saída: Ilha 2 é exclusiva da Espécie 1.
Portanto, não é compartilhada com outras espécies.
# Teste 2
Entrada: 6
Saída: Ilha 6 é compartilhada entre espécie(s):1 2.
# Teste 3
Entrada: 10
Saída: Ilha 10 é compartilhada entre espécie(s):1 2.
# Teste 4
Entrada: 17
Saída:
Ilha 17 é exclusiva da Espécie 2.
Portanto, não é compartilhada com outras espécies.
Auxiliando o Hacker Neo a Desvendar a Verdade Sobre a Realidade.
História da Matrix: Neo, um hacker talentoso, vive uma vida dupla. No mundo que ele conhece, ele é um programador comum. Mas, e se existisse uma realidade escondida, uma verdade que ele nunca imaginou?
Após ser contatado por Morpheus, Neo se depara com uma escolha crítica: tomar a pílula vermelha e desvendar a verdade, ou tomar a pílula azul e continuar vivendo sua vida como sempre.
Fases do Programa:
Fase 1: A Escolha ● ●
Neo deve escolher entre a pílula vermelha e a pílula azul. A escolha é feita através de um input do usuário:
Se o usuário digitar “vermelha”, Neo avança para a fase 2.
Se o usuário digitar “azul”, Neo continua vivendo sua vida normal e o programa termina.
Fase 2: Desvendando a Realidade
Neo precisa questionar a realidade em que vive. Ele deve responder a três perguntas:
A realidade que você conhece é real? (Sim ou Não)
Existe uma realidade escondida? (Sim ou Não)
Você quer desvendar a verdade? (Sim ou Não)
Fase 3: Explorando a Verdade
Se Neo responder “Sim” a todas as perguntas da fase 2, ele terá acesso a informações sobre a verdade, e o programa termina com uma mensagem de sucesso.
Se Neo responder “Não” a qualquer uma das perguntas da fase 2, ele continua vivendo sua vida normal, e o programa termina com uma mensagem de que a escolha é dele.
Exemplos de Teste:
# Teste 1
Entrada: Vermelha Sim Não Sim
Saída: A escolha é sua, Neo continua vivendo sua vida normal.
# Teste 2
Entrada: Azul
Saída: Neo continua vivendo sua vida normal.
# Teste 3
Entrada: Vermelha Não Sim Sim
Saída: A escolha é sua, Neo continua vivendo sua vida normal.
# Teste 4
Entrada: Vermelha Sim Sim Sim
Saída: Neo terá acesso a informações sobre a verdade.
Você é um fotógrafo profissional. Durante um trabalho, você se depara com um lago cristalino cercado por imensas montanhas. Seu objetivo é capturar uma foto aérea épica do lago, utilizando um drone. Para garantir a melhor perspectiva, você precisa determinar a altura ideal de voo do drone. Para isso, será necessário saber a distância horizontal entre você e a margem do lago, bem como a altura vertical que deseja alcançar com o drone.
A hipotenusa, que representa a distância diagonal percorrida pelo drone, pode ser calculada utilizando o Teorema de Pitágoras:
\( Hipotenusa = \sqrt(CatetoAdjacente^2 + CatetoOposto^2) \)
Seu programa receberá como entrada, em metros, o comprimento do cateto adjacente e do cateto oposto, e calculará a hipotenusa correspondente.
Exemplos de Teste:
# Teste 1
Entrada: 50 30
Saída: 58.00 metros
# Teste 2
Entrada: 40 20
Saída: 44.72 metros
# Teste 3
Entrada: 70 50
Saída: 86.02 metros
Um artesão está trabalhando em duas peças: um cone de metal e um paralepípedo de madeira. Para ajudá-lo em seu projeto, você precisa desenvolver um programa que receba as informações de dimensões em cm desses objetos e calcule seus volumes e massas.
Receber na entrada as seguintes informações para o cone: Altura e Raio.
Em seguida, receber as informações para o paralepípedo: Altura, Largura e Comprimento.
Considerando as fórmulas matemáticas adequadas para calcular o volume de cada objeto:
Volume do Cone: \(V_{\text{cone}} = \frac{1}{3} \pi r^2 h\)
Volume do Paralepípedo: \( V_{\text{paralel}} = l \times w \times h \)
Calcule a massa de cada objeto, considerando que a densidade do metal é de 8 g/cm³ e a densidade da madeira é de 0,5 g/cm³. Qual dos dois objetos, cone ou paralepípedo, é mais pesado? Considere que eles possuem o mesmo peso se a diferença entre as massas for menor do que 5g.
Exemplos de Teste:
# Teste 1
Entrada: 10 5 19 8 6
Saída: O cone é mais pesado com 2094.4g.
# Teste 2
Entrada: 4 2 10 8 8
Saída: O paralelepípedo é mais pesado com 320.0g.
# Teste 3
Entrada: 10 2.44 10 10 10
Saída: O paralepípedo e o cone possuem o mesmo peso.
# Teste 4
Entrada: 20 4.886 20 20 20
Saída: O paralepípedo e o cone possuem o mesmo peso.