Биномиальные коэффициенты - Деление на нулевую ошибку

«Основной» код работает для вычисления каждого отдельного биномиального коэффициента, если только (n = k + 1). Это ошеломляет - он говорит, что есть ошибка деления на ноль, но я не понимаю, почему. ошибка возникает в основной функции ( d = n2 / c ). Есть идеи, почему?

def getInteger( prompt ):
    while True:
        try:
            num = int( input(prompt))
        except ValueError:
            print( "That is not an integer -- please try again")
            continue
        return num   

def factorial(f):
    f = f
    q = (f - 1)
    fac = (f * q)
    while (q) > 1:
        q -= 1
        fac = (fac * q)
    return (fac)


def main():
    n = getInteger("enter a factor:")
    k = getInteger("enter a factor:")
    while n >= k :
        n2 = factorial(n)
        k2 = factorial(k)
        a = n - k
        b = factorial(a)
        c = b * k2
        d = n2 / c
        print("n2 = {} k2 = {} a = {} b = {} c = {} d = {}" .format(n2, k2, a, b, c, d)  )
        return
    else:
        print("n must be larger than k")

if __name__ == '__main__':
    main()    

main()

Обратите внимание, что мне нужно выполнить расчеты самостоятельно, поэтому я не могу использовать библиотеки.


person K-I    schedule 11.03.2017    source источник


Ответы (1)


Ваша факториальная функция неверна для входных данных 0,1. Он возвращает 0 для обоих из них, в то время как он должен возвращать 1 для них обоих.

person Miriam Farber    schedule 11.03.2017