Я хочу создать факториальную функцию в python, чтобы она возвращала N - PullRequest
0 голосов
/ 05 мая 2020

Согласно моему коду, который равен

def factorial(n):
    if n == 0:
        return 1
    else:
        N = 1
    for i in range(1, n+1):
        if i==1*2*3*...*N:
            return(N)

, он не выдал ошибку n, когда я тестировал с нулевым значением, которое он дал, но с другим числом, т.е. 7, он дал эту ошибку

     TypeError                                 Traceback (most recent call last)
        <ipython-input-167-5e0569aed165> in <module>
        ----> 1 factorial(7)

        <ipython-input-166-cef7895a4a43> in factorial(n)
              5         N = 1
              6     for i in range(1, n+1):
        ----> 7         if i==1*2*3*...*N:
              8             return(N)

TypeError: unsupported operand type(s) for *: 'int' and 'ellipsis'

, а строка 7 - проблема

Ответы [ 2 ]

0 голосов
/ 06 мая 2020
def factorial(n):
    if n == 0:
        return 1
    else:
        N = 1
    for i in range(1, n+1):
        N *= i
    return(N)

так что вы можете попробовать это

0 голосов
/ 05 мая 2020

Может быть, что-то вроде этого подойдет?

#!/usr/local/cpython-3.8/bin/python3

import itertools

def factorials_forever():
    n = 1
    for factor in itertools.count(2):
        yield n
        n *= factor

def find_which_n(n):
    for factorialno, factorial in enumerate(factorials_forever(), start=1):
        if factorial > n:
            raise ValueError('input not a valid factorial')
        if factorial == n:
            return factorialno

def main():
#    for fact in zip(range(10), factorials_forever()):
#        print(fact)

    nth = find_which_n(3628800)
    print(nth)

main()

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...