Você está na página 1de 3

"""

Calculadora String
Crie uma calculadora simples que receba uma String e retorne um inteiro
Assinatura (pseudo código):
int Add(números de string)
Requisitos
1. O método pode receber até dois números, separados por vírgulas, e retornará sua
soma como resultado. Assim,
ok! as entradas podem ser: “”, “1”, “1,2”.
ok! Para uma string vazia, retornará 0.
Notas:
•comece com o caso mais simples (string vazia) e estenda-o com os casos mais
avançados
(“1” e “1,2”) passo a passo
•mantenha as três regras em mente e sempre escreva código suficiente
•não se esqueça de refatorar seu código após cada teste de aprovação
ok! 2. Permitir que o método add lide com um número desconhecido de argumentos
ok! 3. Permita que o método add trate novas linhas como separadores, em vez de
vírgulas
•“1,2\n3” deve retornar “6”
•"2,\n3" é inválido, mas não há necessidade de esclarecê-lo com o programa
ok! 4. Adicione validação para não permitir um separador no final
•Por exemplo “1,2,” deve retornar um erro (ou lançar uma exceção)
5. Permitir que o método add lide com delimitadores diferentes
•Para alterar o delimitador, o início da entrada conterá uma linha separada
parecida com esta:
•//[delimitador]\n[números]
filtered = fnmatch.filter(lst, 'th*s')
•“//;\n1;3” deve retornar “4”
•“//|\n1|2|3” deve retornar “6”
•“//sep\n2sep5” deve retornar “7”
•“//|\n1|2,3” é inválido e deve retornar um erro (ou lançar uma exceção) com a
mensagem “‘|’
esperado mas ‘,’ encontrado na posição 3.”
PARE AQUI se você é um iniciante em programação. Continue se conseguiu terminar as
etapas
(1-5.) em 30 minutos.
ok! 6. Chamar add com números negativos retornará a mensagem "Número(s)
negativo(s) não permitidos: <negativeNumbers>"
•“1,-2” é inválido e deve retornar a mensagem “Número(s) negativo(s) não
permitidos: -2”
•"2,-4,-9" é inválido e deve retornar a mensagem "Número(s) negativo(s) não
permitidos: -4, -9”
7. Chamar add com vários erros retornará todas as mensagens de erro separadas por
novas
linhas.
•"//|\n1|2,-3" é inválido e retorna a mensagem "Número(s) negativo(s) não
permitidos: -3\n'|'
esperado, mas ',' encontrado na posição 3.”
ok! 8. Números maiores que 1000 devem ser ignorados, então somando 2 + 1001 = 2

"""

## Não foi possível implementar no tempo da aula as requisições 5 e 7. Pesquisei


pelo metodo re.sub() para implementar a requisição 5, mas não deu tempo de refinar
isso aqui...
import re

def Calculadora (nums):


retorna = 0
if nums == '':
retorna = 0
elif nums[-1] == ',':
retorna = "Sepadador sem valor."
else:
#new_nums = nums.replace('\n',',') #funcionou
new_nums = re.sub("//|\n",",",nums) #testando
for i in new_nums.split(","):
if len(new_nums.split(",")) == 1:
retorna = "É necessário informar dois números."
break
if float(i):
if float(i) < 0:
retorna = "números negativos não permitidos."
break
if float(i) >=1000:
pass
else:
retorna = retorna + int(i)
elif type(i) != int:
retorna = "É necessário informar dois números."
return retorna

def test_retorna_falso_se_existe_Calculadora():
assert True

def test_Requisito1__retornar_zero_se_string_vazia():
assert Calculadora("") ==0

def test_Requisito1__retornar_erro_se_nao_informa_algum_numero():
assert Calculadora("das") == "É necessário informar dois números."

def test_Requisito1__retornar_erro_se_informa_1():
assert Calculadora("1") =="É necessário informar dois números."

def test_Requisito1__retornar_erro_se_nao_informa_2_numeros():
assert Calculadora("431") =="É necessário informar dois números."

def
test_Requisito2__retorna_erro_se_falhar_lidar_com_número_desconhecido_de_argumentos
():
assert Calculadora("11,15,12,434") == 472

def test_Requisito3__retorna_erro_se_falhar_lidar_NovaLinha_como_nao_separador():
assert Calculadora("11,15\n12\n434") == 472

def test_Requisito4__retorna_erro_se_tiver_separador_no_final():
assert Calculadora("11,1512434,") == "Sepadador sem valor."

def test_Requisito5__troca_erro_se_tiver_separador_barraBarra():
assert Calculadora("11//15\n2,1") == 29

def test_Requisito6__retorna_erro_se_tiver_numero_negativo():
assert Calculadora("11,151,12,-434") == "números negativos não permitidos."

def test_Requisito7__numeros_maiores_que_1000_sao_ignorados():
assert Calculadora("1100,2,3,1020") == 5

Você também pode gostar