Pular para o conteúdo principal

Exercícios da aula 04

Solução dos exercícios da aula 04

Exercício 1

Altere o programa anterior de modo que o produto e a quantidade vendida seja solicitada ao usuário. Verifique se o produto digitado existe e só então efetue a baixa no estoque. Também verifique se o estoque é o suficiente para atender ao pedido.

In [2]:
estoque = {"tomate": [1000, 2.30],
           "alface": [500, 0.45],
           "batata": [2001, 1.20], 
           "feijão": [100, 1.5]}

venda = []
total = 0

while True:
    produto = input("Entre com o produto (fim para terminar): ").strip().lower()
    if produto == 'fim': 
        break
    elif produto in estoque:
        quantidade = int(input("Entre com a quantidade de produto desejada: "))
        prod_est = estoque[produto]
        quant_disp = prod_est[0]
        if quantidade > quant_disp:
            print(f"Existe {produto} disponível para a tua demanda.")
        else:
            preço = prod_est[1]
            custo = preço * quantidade
            prod_est[0] -= quantidade
            print(f"{produto:12s}: {quantidade:3d} x {preço:6.2f} = {custo:6.2f}")        
            total += custo
    else:
        print("Produto não disponível")
        
print(f" Custo total: {total:21.2f}\n")
print("Estoque:\n")
for chave, dados in estoque.items():
    print("Descrição: ", chave)
    print("Quantidade: ", dados[0])
    print(f"Preço: {dados[1]:6.2f}\n")
Entre com o produto (fim para terminar): picanha
Produto não disponível
Entre com o produto (fim para terminar): tomate
Entre com a quantidade de produto desejada: 2000
Existe tomate disponível para a tua demanda.
Entre com o produto (fim para terminar): tomate
Entre com a quantidade de produto desejada: 700
tomate      : 700 x   2.30 = 1610.00
Entre com o produto (fim para terminar): feijão
Entre com a quantidade de produto desejada: 100
feijão      : 100 x   1.50 = 150.00
Entre com o produto (fim para terminar): tomate
Entre com a quantidade de produto desejada: 300
tomate      : 300 x   2.30 = 690.00
Entre com o produto (fim para terminar): fim
 Custo total:               2450.00

Estoque:

Descrição:  tomate
Quantidade:  0
Preço:   2.30

Descrição:  alface
Quantidade:  500
Preço:   0.45

Descrição:  batata
Quantidade:  2001
Preço:   1.20

Descrição:  feijão
Quantidade:  0
Preço:   1.50

Exercício 2

Escreva um programa que que gere um dicionário a partir de uma string onde a chave seja um caracter e o valor o número de vezes que este caracter aparece no dicionário

o rolo -> {'o': 3, ' ': 1, 'l': 1}

In [3]:
s = "uma ratazana enorme"
caracteres = {}

for c in s:
    if c in caracteres:
        caracteres[c] += 1
    else:
        caracteres[c] = 1
caracteres        
    
Out[3]:
{'u': 1,
 'm': 2,
 'a': 5,
 ' ': 2,
 'r': 2,
 't': 1,
 'z': 1,
 'n': 2,
 'e': 2,
 'o': 1}

Exercício 3

Explore os métodos disponíveis aos dicionários. Brinque com eles

Aí é com vocês mesmo. Não tem solução

Exercício 3

Explore os métodos disponíveis aos dicionários. Brinque com eles

Aí é com vocês mesmo. Não tem solução

Exercício 5

Escreva um programa que compare duas listas. Utilizando operações com conjuntos, imprima:

  • Os valores comuns às duas listas
  • Os valores que só existem na primeira
  • Os valores que existem apenas na segunda
  • Uma lista com os elementos não repetidos das duas listas
  • A primeira lista sem os elementos repetidos na segunda
In [4]:
L1 = list(range(10))
L2 = [4,7,8, 15]
In [5]:
# Valores comuns às dias listas:
S1 = set(L1)
S2 = set(L2)

S1 & S2
Out[5]:
{4, 7, 8}
In [6]:
# Valores que só existem na primeira lista
S1 - S2
Out[6]:
{0, 1, 2, 3, 5, 6, 9}
In [7]:
# Valores que existem apenas na segunda lista:
S2 - S1
Out[7]:
{15}
In [8]:
# Uma lista com os elementos não repetidos das duas listas
(S1 | S2) - (S1 & S2)
Out[8]:
{0, 1, 2, 3, 5, 6, 9, 15}
In [9]:
# A primeira lista sem os elementos repetidos na segunda
S1 - (S1 & S2)
Out[9]:
{0, 1, 2, 3, 5, 6, 9}

Exercício 6

Teste a diferença entre os métodos .find e .rfind com .index e .rindex

In [10]:
"uma string com uma string qualquer".find("string")
Out[10]:
4
In [11]:
"uma string com uma string qualquer".rfind("string")
Out[11]:
19
In [12]:
"uma string com uma string qualquer".index("string")
Out[12]:
4
In [13]:
"uma string com uma string qualquer".rindex("string")
Out[13]:
19
In [14]:
"uma string com uma string qualquer".find("IPT")
Out[14]:
-1
In [15]:
"uma string com uma string qualquer".rfind("IPT")
Out[15]:
-1
In [16]:
"uma string com uma string qualquer".index("IPT")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [16], in <cell line: 1>()
----> 1 "uma string com uma string qualquer".index("IPT")

ValueError: substring not found
In [17]:
"uma string com uma string qualquer".rindex("IPT")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [17], in <cell line: 1>()
----> 1 "uma string com uma string qualquer".rindex("IPT")

ValueError: substring not found

Os métodos find e index retornam o índice da posição de uma substring começando pela esquerda. Já os métodos rfind e rindex realizam a busca pela direita (right em inglês).

A diferença entre find e index (e as versões com r no começo) é que se a substring não ocorre, find e rfind retornam -1. Já index e rindex resultam em um erro.

Exercício 7

Escreva um programa que leia duas strings. Verifique se a segunda ocorre dentro da primeira e imprima sua posição de início

In [19]:
s1 = "Esta mensagem é comprida. Vamos ver o que acontece"
s2 = "Vamos"

idx = s1.find(s2)

if idx < 0:
    print(f"'{s2}' não ocorre na string '{s1}'")
else:
    print(f"'{s2}' ocorre no índice {idx} da string '{s1}'")
'Vamos' ocorre no índice 26 da string 'Esta mensagem é comprida. Vamos ver o que acontece'

Exercício 8

Escreva um programa que leia duas strings e gere uma terceira string com todos os caracteres que aparecem nas duas strings. A ordem não interessa.

In [20]:
# Solução usando strings apenas:

s1 = "na rua tem ratazana"
s2 = "a ratazana é enorme"

s3 = ''
for c in s1:
    if c not in s3:
        s3 += c
for c in s2:
    if c not in s3:
        s3 += c
s3
Out[20]:
'na rutemzéo'
In [21]:
# Solução usando conjuntos
"".join(set(s1) | set(s2))
Out[21]:
'aurm ézento'

Exercício 9

Escreva um programa que leia uma string e imprima quantas vezes cada caracter aparece nessa string

In [22]:
s = "A ratazana é enorme"
C = set(s)

for c in C:
    n = s.count(c)
    print(f"O caracter '{c}' ocorre {n} vezes")
O caracter 'a' ocorre 4 vezes
O caracter 'n' ocorre 2 vezes
O caracter 'r' ocorre 2 vezes
O caracter 't' ocorre 1 vezes
O caracter 'm' ocorre 1 vezes
O caracter ' ' ocorre 3 vezes
O caracter 'A' ocorre 1 vezes
O caracter 'z' ocorre 1 vezes
O caracter 'e' ocorre 2 vezes
O caracter 'é' ocorre 1 vezes
O caracter 'o' ocorre 1 vezes

Exercício 10

Modifique o jogo da forca de forma que a palavra secreta seja escrita caso o jogador perca

In [23]:
palavra = input("Digite a plavra secreta: ").strip().lower()
for x in range(100): 
    print()

digitadas = []
acertos = []
erros = 0

while True:
    senha = ""
    for letra in palavra:
        senha += letra if letra in acertos else "."
    print(senha)
    if senha == palavra:
        print("Você acertou!")
        break
    tentativa = input("\nDigite uma letra: ").strip().lower()
    if tentativa in digitadas:
        print("Você já tentou esta letra!")
        continue
    else:
        digitadas += tentativa
        if tentativa in palavra:
            acertos += tentativa
        else:
            erros += 1
            print("Você errou!")
    print("||==:==\n||  :  ")
    print("||  O  " if erros >= 1 else "||")
    linha2 = ""
    if erros == 2:
        linha2 = "  |  "
    elif erros == 3:
        linha2 = " \|  " 
    elif erros >= 4:
        linha2 = " \|/ "
    print(f"||{linha2}")
    linha3 = ""
    if erros == 5:
        linha3 += " /  "
    elif erros >= 6:
        linha3 += " / \ "
    print(f"||{linha3}")
    print("||\n==========")
    if erros == 6:
        print("Enforcado!")
        print(f"A palavra secreta era '{palavra}'")
        break
Digite a plavra secreta: ratazana




































































































........

Digite uma letra: a
||==:==
||  :  
||
||
||
||
==========
.a.a.a.a

Digite uma letra: u
Você errou!
||==:==
||  :  
||  O  
||
||
||
==========
.a.a.a.a

Digite uma letra: q
Você errou!
||==:==
||  :  
||  O  
||  |  
||
||
==========
.a.a.a.a

Digite uma letra: l
Você errou!
||==:==
||  :  
||  O  
|| \|  
||
||
==========
.a.a.a.a

Digite uma letra: m
Você errou!
||==:==
||  :  
||  O  
|| \|/ 
||
||
==========
.a.a.a.a

Digite uma letra: z
||==:==
||  :  
||  O  
|| \|/ 
||
||
==========
.a.aza.a

Digite uma letra: y
Você errou!
||==:==
||  :  
||  O  
|| \|/ 
|| /  
||
==========
.a.aza.a

Digite uma letra: z
Você já tentou esta letra!
.a.aza.a

Digite uma letra: f
Você errou!
||==:==
||  :  
||  O  
|| \|/ 
|| / \ 
||
==========
Enforcado!
A palavra secreta era 'ratazana'

Exercício 11

Modifique o jogo da forca de forma a utilizar uma lista de palavras. No início pergunte um número e calcule o índice da palavra a utilizar pela fórmula:

índice = (número * 776) % len(lista_de_palavras)
In [25]:
lista_de_palavras = ['rato', 'bola', 'cachorro', 'gato', 'fogo', 'lixo', 'rosa', 'telefone', 'comida', 'carne', 
                    'bala', 'figura', 'fauna', 'escola', 'faculdade', 'museu']
In [26]:
número = int(input("Entre com um número inteiro: "))
índice = (número * 776) % len(lista_de_palavras)

palavra = lista_de_palavras[índice]

digitadas = []
acertos = []
erros = 0

while True:
    senha = ""
    for letra in palavra:
        senha += letra if letra in acertos else "."
    print(senha)
    if senha == palavra:
        print("Você acertou!")
        break
    tentativa = input("\nDigite uma letra: ").strip().lower()
    if tentativa in digitadas:
        print("Você já tentou esta letra!")
        continue
    else:
        digitadas += tentativa
        if tentativa in palavra:
            acertos += tentativa
        else:
            erros += 1
            print("Você errou!")
    print("||==:==\n||  :  ")
    print("||  O  " if erros >= 1 else "||")
    linha2 = ""
    if erros == 2:
        linha2 = "  |  "
    elif erros == 3:
        linha2 = " \|  " 
    elif erros >= 4:
        linha2 = " \|/ "
    print(f"||{linha2}")
    linha3 = ""
    if erros == 5:
        linha3 += " /  "
    elif erros >= 6:
        linha3 += " / \ "
    print(f"||{linha3}")
    print("||\n==========")
    if erros == 6:
        print("Enforcado!")
        break
Entre com um número inteiro: 5
......

Digite uma letra: a
||==:==
||  :  
||
||
||
||
==========
.....a

Digite uma letra: e
Você errou!
||==:==
||  :  
||  O  
||
||
||
==========
.....a

Digite uma letra: m
||==:==
||  :  
||  O  
||
||
||
==========
..m..a

Digite uma letra: c
||==:==
||  :  
||  O  
||
||
||
==========
c.m..a

Digite uma letra: o
||==:==
||  :  
||  O  
||
||
||
==========
com..a

Digite uma letra: i
||==:==
||  :  
||  O  
||
||
||
==========
comi.a

Digite uma letra: d
||==:==
||  :  
||  O  
||
||
||
==========
comida
Você acertou!

Qual a idéia aqui? Isso é um gerador de números pseudo-aleatórios. Parecem aleatórios mas não são. Se bem escolhidos e pode ter um bom comportamento!

In [ ]:
 

Comentários

Comments powered by Disqus