Нумерология с Питоном и Джанго - PullRequest
1 голос
/ 01 мая 2010

У меня есть функция, которая дает мне ожидаемый результат в режиме консоли, но если я пытаюсь использовать функцию с Django, страница никогда не загружается и просто имеет цикл вычисления и никогда не заканчивается.

Есть идеи? * извините за мой английский

Консольная функция (РАБОТАЯ БОЛЬШАЯ):

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})

Ответы [ 4 ]

4 голосов
/ 01 мая 2010

Попробуйте:

        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])

Похоже, вы меняли f, но проверяли fecha на цикл.

2 голосов
/ 01 мая 2010

Санджай ответ правильный, и я рекомендую его. Я просто хотел спросить, почему ты просто не сделал:

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())

У вас уже есть рабочая функция в Python ... почему бы просто не импортировать ее и использовать?

2 голосов
/ 01 мая 2010

Нет необходимости переходить ко всей этой работе для суммирования цифр в этом числе, потому что сумма цифр равна num % 9. Если num % 9 равно нулю, то фактическая сумма цифр равна 9.

Изменив свой метод на

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

Вы полностью избежите любой проблемы, которая произошла в вашем оригинальном методе.

0 голосов
/ 01 мая 2010

Вы не говорите, на что похожа остальная часть вашей среды, но вы должны использовать f //= 10, чтобы обеспечить целочисленное деление.

...