Python: como trocar somente parte de uma string

Veja como trocar apenas parte de uma string e controlar erros do usuário.
Como Pensar como Programador - Parte 4

Veja como trocar apenas parte de uma string e controlar erros do usuário.

Este post é complemento do quarto vídeo da série Como pensar como um programador e resolver problemas. No vídeo — que você pode conferir no final do post — temos uma demanda da empresa Dr. Paçoca: alterar os códigos dos produtos.

Contexto

A Dr. Paçoca produz paçocas em dois formatos: tabletes e cilindros. As em tabletes possuem código começando com TAB e as em cilindro, com CIL. Os dois formatos recebem quatro dígitos depois das iniciais. Dessa forma, os códigos completos ficam: TAB1234 e CIL9876.

A empresa quer mudar o TAB para T + 00 (dois zeros) e CIL para C + 00 (dois zeros). Usando os exemplos do parágrafo anterior, TAB1234 ficaria T001234.

Criamos esse código (se quiser conferir detalhes, dê uma olhada no vídeo no final do post!):

# Projeto 1 - Troca de código
# SET CodOrig
# SET CodNovo = CodOrig.REPLACE(”TAB”, “T00”)
# SET CodNovo = CodNovo.REPLACE(“CIL”, “C00”)
# PRINT(CodNovo)

codOriginal = "TAB1234"
codNovo = codOriginal.replace("TAB", "T00")   # T001234
codNovo = codNovo.replace("CIL", "C00") # Se pegar o original, volta a ser TAB1234! Cuidado
print(codNovo)

Problema

O código funciona direitinho se temos certeza de que o TAB ou o CIL estão no início do código. O que acontece se houve um código TAB2TAB ou mesmo 1234TAB? O programa deve ou não converter a string? Se não converter, deve manter o original ou mostrar um erro para o usuário?

Todas essas perguntas não estão relacionadas diretamente ao código, mas um bom programador deve fazê-las antes de começar a programar.

Vamos tentar criar um programa à prova de códigos originais mal formulados.

Pela descrição da empresa, só temos duas possibilidades de iniciar os produtos: TAB ou CIL. Qualquer outro início será considerado um erro.

Os caracteres (letras, números e símbolos) restantes devem ser apenas quatro números: nem mais, nem menos, nem letras, nem símbolos.

Então o primeiro passo é separar esses dois blocos:

codOriginal = "TAB1234"

inicialCod = codOriginal[0:3]  # pega os 3 primeiros caracteres
finalCod = codOriginaç[3:] # do terceiro até o final 

Depois, vamos testar se o inicialCod é TAB ou CIL. Qualquer outra coisa levará ao erro:

codOriginal = "TAB1234"

inicialCod = codOriginal[0:3]  # pega os 3 primeiros caracteres
finalCod = codOriginal[3:] # do terceiro até o final 

if inicialCod == "TAB" or inicialCod == "CIL":
  # Vamos continuar aqui
  
else:
  print("Erro no código ")

Se você gosta de códigos mais enxutos, pode já verificar se a porção final do código é formada apenas de números:

codOriginal = "TAB1234"

inicialCod = codOriginal[0:3]  # pega os 3 primeiros caracteres
finalCod = codOriginal[3:] # do terceiro até o final 

if (inicialCod == "TAB" or inicialCod == "CIL") and finalCod.isdigit():
  # Vamos continuar aqui

else:
  print("Erro no código ")

A verificação do inicialCod fica entre parênteses porque essa verificação tem que ser feita antes de conferir o isdigit().

# Projeto 1: Variações para o site
# Verificar se os três primeiros são TAB ou CIL

codOriginal = "TAB1T234"

inicialCod = codOriginal[0:3]  # pega os 3 primeiros caracteres
finalCod = codOriginal[3:] # do terceiro até o final 

if (inicialCod == "TAB" or inicialCod == "CIL") and finalCod.isdigit():
  # Mesmo replace
  codNovo = inicialCod.replace("TAB", "T00")   
  codNovo = codNovo.replace("CIL", "C00")    

  # Junta o início com o fim
  codNovo = codNovo + str(finalCod)
  # Só imprime se não der erro
  print(codNovo)
else:
  print("Erro no código ")


O Projeto Inicial

Você confere o projeto original no vídeo abaixo:

Mais sobre ,

Se somos tão dependentes de tecnologia, por que muitas empresas não se protegem? A Visa Net já investe nisso há muitos anos.
Exercícios para quem está começando e para quem já conhece um pouco dessas funções muito úteis de consolidação de dados.
DevOps une desenvolvimento e operações para melhorar os ciclos de gerenciamento e aumentarem a segurança e disponibilidade da infeaestrutura de TI.... E, na prática, o que é?
Antes de saber o que DevOps ou Método Ágil, é muito bom conhecer como se desenvolve um software ou aplicativo.