Capítulo 12

12-01

12-02

12-03

12-04

12-05

12-06

12-07

12-08

12-09

12-10

Outros capítulos

Exercício 12-04:

Utilizando a função verifica_padrão, escreva uma função que detecte um valor em reais no formato: R999,99ドル em que 9 representa qualquer dígito. O primeiro número pode ter um ou mais dígitos, mas a segunda parte (centavos) deve ter no máximo dois dígitos.

banner com link para a página sobre o livro de Introdução à Programação com Python na Amazon.com.br

Resposta:

##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capitulo 12/exercicio-12-04.py
##############################################################################
# Funções número, sequência e verifica padrão da listagem 12.5
from functools import partial
def número(entrada, qmin, qmax):
 num = 0
 for caractere in entrada:
 if caractere.isnumeric():
 num += 1
 else:
 break
 if qmin <= num <= qmax:
 return num, 0, num - 1
 else:
 return -1, -1, -1
def sequência(entrada, padrão):
 posição, posição_max = 0, len(padrão)
 for caractere in entrada:
 if caractere == padrão[posição]:
 posição += 1 # Caracteres iguais, testa o próximo caractere
 else:
 break # Saiu da sequência
 if posição == posição_max: # Achou toda a sequência
 return 1, 0, posição - 1
 return -1, -1, -1
def verifica_padrão(entrada, padrões):
 posição = 0
 for padrão in padrões:
 achou, _, fim = padrão(entrada[posição:])
 if achou > 0:
 posição += fim + 1
 else:
 return -1, -1, -1
 return 1, 0, posição - 1
# Bônus, como reconhecer um padrão opcional.
# Não faz parte do enunciado, mas é interessante.
def opcional(entrada, padrões):
 achou, inicio, fim = verifica_padrão(entrada, padrões)
 if achou > 0:
 return achou, inicio, fim
 else:
 return 1, -1, -1
três_números = partial(número, qmin=1, qmax=3)
centavos = partial(número, qmin=1, qmax=2)
cifrão = partial(sequência, padrão="R$")
vírgula = partial(sequência, padrão=",")
# Apenas os valores citados no enunciado
padrão = [cifrão, três_números, vírgula, centavos]
# Usando a função opcional para aceitar valores sem centavos (bônus)
# padrão = [cifrão, três_números, partial(opcional, padrões=[vírgula, centavos])]
# Aqui uma pequena lista de entradas para facilitar a visualização
entradas = [
 "R123,45ドル", # Padrão encontrado
 "R123,450ドル", # Padrão não encontrado
 "123,45ドル", # Padrão não encontrado
 "R12,34ドル", # Padrão encontrado
 "R123,45ドル R12,34ドル R1,23ドル R1,0ドル", # Padrão encontrado quatro vezes
 "R123ドル R12ドル R1ドル R1,0ドル", # Padrão encontrado quatro vezes (se bônus - opcional ativado), uma vez caso contrário
]
for entrada in entradas:
 print("Entrada:", entrada)
 achado = False
 posição = 0
 while posição < len(entrada):
 achou, início, fim = verifica_padrão(entrada[posição:], padrão)
 if achou > 0:
 print(f"Reais nas posições: {posição+início} a {posição+fim} ", end="")
 print("Reais:", entrada[posição + início : posição + fim + 1])
 achado = True
 posição += fim + 1
 else:
 posição += 1
 if not achado:
 print("Nenhum valor em reais encontrado na entrada")
 print()
Clique aqui para baixar o arquivo
banner com link para a página sobre o livro de Introdução à Programação com Python na Amazon.com.br

AltStyle によって変換されたページ (->オリジナル) /