1
I’m almost done with my application. In the final moments of the code I’m locking into a loop that I can’t resolve.
# O programa pede para o usúario inserir uma data no formato dd/mm/aa,
# e efetua uma série de cálculos simples até chegar num número menor que 22
# e somente composto por unidades. Os cálculos são basicamente pegar o maior número,
# da data definida pelo usuário e somar seu algarismos, depois soma-se ao restante dos
# números que compõe a data. Por exemplo:
# data: 23/11/1956 => 23 + 11 + 21 = 55 ==> 5 + 11 + 21 = 37 ==> 5 + 11 + 3 = 19,
# como 19 é uma dezena, fazemos 1 + 9 = 10 e novamente 1 + 0 = 1. Neste caso, os valores
# retornados seriam: 19, 10, 01 e cada número é associado há uma sorte.
#importa os módulos necessários
import datetime
#declara variáveis globais
dataInput = ""
dataLi = []
somaAlg = 0
def validaData(dataInput): #valida a data
while True:
try:
dataInput = str(input("Insira sua data de nascimento no formato 'dd/mm/aaaa': "))
date_formatted = datetime.datetime.strptime(dataInput, '%d/%m/%Y')
break
except ValueError:
print("Error")
dataLi = dataInput.split("/") #transforma a string em uma lista, afim de efetuar os cálculos no futuro
return dataLi
def calcula_arcano(revDataLi) : #função para somar o maior número da data, que nesta altura
# já é uma lista.
somaAlg = 0
adc = 0
maior = max(revDataLi)
while maior != 0 :
adc = maior % 10
somaAlg = somaAlg + adc
maior = maior // 10
return somaAlg
def main():
arcList = []
dataLi = validaData(dataInput)
revDataLi = list(reversed(dataLi)) # coloca a lista em reverso
revDataLi = [int(data) for data in revDataLi]
total = sum(revDataLi) # soma os numeros dá lista afim de checa-lo
# 22 é um número um tanto quanto ábitrário, tem a ver com "range" das sortes.
# este laço tem com objetivo "decompor" a lista até que o total seja 22 ou menos.
while total >=22 :
somaAlg = calcula_arcano(revDataLi)
revDataLi = [somaAlg if data == max(revDataLi) else data for data in revDataLi]
total = sum(revDataLi)
else:
arcList.append(total)
y = 0
aux = total
while total >= 10 and total < 22 : #este laco tem como objetivo reduzir o total a unidades,
aux=str(total)
y = sum(int(i) for i in aux)
total = y
else:
arcList.append(int(aux)) # para começar a compor a lista de retorno(arcList)
arcList.append(total)
print(arcList)
print("O seu arcano pessoal é o ", arcList) #final temporário, o desfecho do aplicativo
# vai ser associar os número encontrados com
# uma "sorte", conselho
main()
Things are starting to go wrong(I think, because I use Atom to write and I still haven’t figured out how to debug efficiently right with Idle), in this loop here: while total >= 10 and total < 22 :
onwards. I have been testing with 3 different dates:
21/02/12
-> Works ->arcList: 8
23/11/1956
-> Works ->arcList: 19, 10, 01
31/12/2999
-> Doesn’t Work ->arcList: 18, 18, 9
- should be ->18, 9
What could this problem be? Taking advantage, if anyone has any hints about the code in general and more efficient ways to test, I would be grateful.
Where do these dates come from?
– Marlysson
It would be interesting to describe what the code should do in general. For example, what is the sense of summing the components of a date (
sum(revDataLi)
)?– Woss
Marylsson, the ones from the test? I tried to choose particular cases, no big deal. @Anderson edited the code by adding comments
– Lucas Maraal