1

저는 콘솔 모드에서 기대하는 결과를 제공하는 함수를 가지고 있습니다. 그러나 장고와 함께 함수를 사용하려고하면 페이지가로드되지 않고 루프가 계산되고 끝나지 않습니다.파이썬과 장고를 가진 수비학

아이디어가 있으십니까? * 내 영어

콘솔 기능 (WORK GREAT)와 미안 :

def sum_digitos(n): 
    sum = 0; 
    while n != 0: 
     sum += n % 10 
     n /= 10 

     if sum > 9: 
      x = str(sum) 
      y =list(x) 
      sum = int(y[0]) + int(y[1]) 

    return sum 

print sum_digitos(2461978) 

장고보기 :

def Calcular(request): 
     if request.method == 'POST': 
      form = NumerologiaForm(request.POST) 
      if form.is_valid(): 
       sum = 0; 

       ano = str(request.POST['fecha_year']) 
       mes = str(request.POST['fecha_month']) 
       dia = str(request.POST['fecha_day']) 

       data = dia + mes + ano 
       fecha = int(data) 

       while fecha != 0: 
        f = fecha 
        sum += f % 10 
        f /= 10 

        if sum > 9: 
         x = str(sum) 
         y =list(x) 
         sum = int(y[0]) + int(y[1]) 

       resultado = get_object_or_404(Numero,numero = sum) 
      return HttpResponseRedirect(resultado.get_absolute_url()) 
     else: 
      form = NumerologiaForm() 
     return render_to_response('numerologiaForm.html',{'form':form}) 

답변

2

산 제이의 대답이 올바른 것이며, 나는 그것을 권하고 싶다. 방금 왜하지 않았는지 물어보고 싶었습니다 :

from numerology import sum_digitos 

def Calcular(request): 
    # In your code, you return HttpResponseRedirect using a nonexistent 
    # "resultado" variable if the form is not valid. This will raise an 
    # exception. I think you meant to indent "return Http..." one step more. 

    if request.method == 'POST': 
     form = NumerologiaForm(request.POST) 
    else: 
     form = NumerologiaForm() 

    # "or..." part of next line not needed if form.is_valid() returns 
    # False for a blank form. 
    if not form.is_valid() or form == NumerologiaForm(): 
     return render_to_response('numerologiaForm.html', {'form': form}) 

    ano = str(request.POST['fecha_year']) 
    mes = str(request.POST['fecha_month']) 
    dia = str(request.POST['fecha_day']) 
    resultado = get_object_or_404(Numero, 
     numero=sum_digitos(int(dia + mes + ano))) 

    return HttpResponseRedirect(resultado.get_absolute_url()) 

당신은 이미 파이썬에서 작동하는 기능이 있습니다 ... 왜 가져오고 사용하지 않는가?

+0

마이크, 예, sum_digitos 함수를 가져 오는 중입니다. :) :) 감사합니다. – Asinox

4

시도 :

그것은 당신이 f을 변경 한 것
 f = fecha 
     while f!= 0: 
      sum += f % 10 
      f /= 10 

      if sum > 9: 
       x = str(sum) 
       y =list(x) 
       sum = int(y[0]) + int(y[1]) 

, 루프에 대해서는 fecha을 확인하십시오.

+0

따라서 'fecha'가 결코 '0'이 아니기 때문에 무한 루프가 발생합니다. –

0

환경의 나머지 부분은 말하지 않지만 f //= 10을 사용해야 정수 단위를 수행 할 수 있습니다.

2

the sum of the digits is num % 9이 (가) 해당 숫자의 숫자를 합산하는 데 필요한 모든 작업을 수행 할 필요가 없습니다. num % 9가 제로의 경우, 다음 숫자의 실제 합계 9

당신은 완전히 원래의 방법 내부에 무슨 일이 일어나고 어떤 문제를 방지 할 수

def sum_digitos(n): 
    sum_ = n % 9 
    return sum_ if sum_ != 0 else 9 

에 방법을 변경합니다.

+0

그러나 숫자가 9 이상이되면 작업이 중단됩니다. – Adam

+0

@ Adam : 아니, 정말로 그렇지 않습니다. –

+0

내 사과 ... 내 머리 속에는 질문이 한 자리 수의 합계로 생각되었다. (나는 전체 수비학 부분을 생략했다). – Adam