使用Python和Django的数字命理学

时间:2010-05-01 02:30:22

标签: django django-models django-forms django-views

我有一个函数,它给我的结果,我期待在控制台模式,但如果我尝试使用Django的功能,页面永远不会加载,只是有一个循环计算,永远不会结束。

有什么想法吗? *抱歉我的英文

控制台功能(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)

Django观点:

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 个答案:

答案 0 :(得分:4)

尝试:

        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是否有循环。

答案 1 :(得分: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

您将完全避免原始方法中发生的任何问题。

答案 2 :(得分:2)

Sanjay的回答是正确的,我推荐它。我只是想问你为什么不这么做:

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中有了一个工作函数......为什么不直接导入它并使用它呢?

答案 3 :(得分:0)

您没有说出您的其他环境是什么样的,但您应该使用f //= 10来确保您执行整数除法。