Вычисление факториала с использованием циклов в Python3 - PullRequest
1 голос
/ 01 ноября 2019

В настоящее время я изучаю разработку программного обеспечения для начинающих, и у меня в классе программирования есть задача вычислить и отобразить факториал с использованием цикла. Мне дали псевдокод, и я должен перевести его в настоящий код и проверить его в REPL, чтобы убедиться, что он возвращает ожидаемые результаты.

У меня почти есть, но я столкнулся с двумя проблемамичто я просто не могу решить.

1) Функция возвращает дополнительную строку «Нет» после вычисления и

2) Ответ отображается в нескольких строках, когда яхочу, чтобы он отображался в одной строке.

Мой текущий код (который возвращает правильный ответ) выглядит следующим образом:

def calcFactorial(number):
    factorial = 1
    print(str(number)+"! =", number)
    for count in range (1, number):
        if number-count > 0:
            factorial = factorial*number-count
            print("x", str(number-count))
    factorial = factorial*number
    print("=", factorial)

Когда я проверяю, например, используя 3, REPLвозвращает следующее:

>>> print(calcFactorial(3))
3! = 3
x 2
x 1
= 12
None

Итак, у меня есть правильный ответ, но с дополнительной строкой «Нет», которую я хотел бы удалить (я думаю, что это как-то связано с функцией печати?), и яне знаю, как правильно отформатировать его. Любая помощь будет высоко ценится.

Ответы [ 5 ]

1 голос
/ 01 ноября 2019

Добавляя к ответу blhsing , вы должны выбрать один из этих встроенных способов печати «возвращенного» значения.

Первый способ:

def calcFactorial(number):
    ... # <- Your function content
    return factorial

Затем вызовите вашу функцию с print(), чтобы получить явно возвращаемое значение, как вы можете видеть в строке return factorial. См. Эту ссылку для получения более подробной информации. :

print(calcFactorial(3))

Второй способ:

Имея то же определение функции с ее оператором return, просто вызовите функцию с ее экземпляромоператор:

calcFactorial(8)

По умолчанию python напечатает возвращаемое значение без print()

Третий способ:

Просто вызовите функцию (без явного * 1028)* оператор, это возвратит "None" (нулевое) значение по умолчанию), используя метод print(). НЕ использовать print() внутри другого print().

1 голос
/ 01 ноября 2019

Относительно вашего второго вопроса:

Blockquote 2) Ответ отображается в нескольких строках, если я хочу, чтобы он отображался в одной строке.

Вы можете исправитьэто с помощью одного оператора печати:

def calcFactorial(number):
    factorial = 1
    string = str(number) + "! = " + str(number)
    for count in range (1, number):
        if number-count > 0:
            factorial = factorial*(number-count)
            string = string + " x " + str(number-count)
    factorial = factorial * number
    print(string + " = " + str(factorial))

Это даст вам:

IN: calcFactorial(3)
OUT: 3! = 3 x 2 x 1 = 6

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

1 голос
/ 01 ноября 2019

ваша функция calcFactorial (3) уже печатает, поэтому вы не должны вызывать ее с помощью

print(calcFactorial(3))

, просто вызывайте ее с помощью

calcFactorial(3)

без функции печати. ​​

вы можете подумать о вызове функции calc_and_print_factorial(), чтобы прояснить, что эта функция уже печатает

0 голосов
/ 01 ноября 2019

Итак, у меня правильный ответ, но с дополнительной строкой «Нет», которую я хотел бы удалить

Вы печатаете возвращаемое значение из своей функции. В этом случае вы не указали возвращаемое значение с помощью оператора return, поэтому функция автоматически возвращает None.

. Чтобы исправить проблему, вы должны вернуть значение из вашей функции. Обратите внимание, что вам не нужно вызывать print() для окончательного ответа, потому что REPL уже сделает это за вас.

Обратите внимание, что REPL автоматически напечатает возвращаемое значение для вас, поэтому вы можете просто набрать calcFactorial(3) вместо print(calcFactorial(3)).

Кроме того, вы не получаете правильный ответ. Вы должны получить 6 вместо 12. Похоже, вы пытаетесь отсчитать от number и умножить каждое число вместе. Вы можете получить тот же результат, считая с 1. Это приведет к гораздо более простому коду и позволит избежать ошибки.

Если вы хотите понять, почему ваш код работает неправильно, внимательно посмотрите на factorial = factorial*number-count и подумайте о порядке операций, которые здесь используются для вычисления результата.

0 голосов
/ 01 ноября 2019

Ваша calcFactorial функция не возвращает явно значение, поэтому она будет возвращать None по умолчанию, поэтому print(calcFactorial(3)) всегда будет печатать None.

Вы должны сделать функцию calcFactorialвернуть factorial как результат в конце:

def calcFactorial(number):
    factorial = 1
    print(str(number)+"! =", number)
    for count in range (1, number):
        if number-count > 0:
            factorial = factorial*number-count
            print("x", str(number-count))
    factorial = factorial*number
    print("=", factorial)
    return factorial
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...