Как вычислить факториал в Python?

факториал в Python

Считать факториал в Python легко, если вам помогает питоновская программа, щелкающая математические операции, как орешки. Однако, прежде, чем Python порадует нас правильными рассчетами, придется нам порадовать Питона новой порцией отменного кода под названием «Факториал!». Но, сначала краткий математический ликбез:

Что такое факториал числа?

Факториалом числа N называется произведение всех чисел от единицы до N. О том, что речь идет о факториале, «говорит» восклицательный знак после числа N.

Например, факториал 5 считается так: 5! = 1*2*3*4*5
А факториал 12 равен: 12! = 1*2*3*4*5*6*7*8*9*10*11*12.

Кстати, факториал нуля равен единице, как и факториал самой единицы: 0! = 1     1! = 1
Это нужно запомнить, и обязательно закодить в своей программе!

Пишем код на Python для вычисления факториала

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

Рассмотрим несколько вариантов написания кода:

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

2. Вариант — это функция для вычисления факториала, которой в качестве аргумента будем передавать число n. Этот вариант является «причесанным» первым вариантом.

3. Вариант — это облагороженный 2-й вариант. Помимо того, что вычисление факториала будет производиться при вызове функции, так еще и программа любезно «попросит» пользователя ввести число, факториал которого нужно рассчитать.

Итак, приступим к реализации задуманных вариантов!

ВАРИАНТ №1: Пишем цикл for для вычисления факториала в Python!

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

# число, факториал которого нужно вычислить
num = 5
# начальное значение факториала
factorial = 1

# Если num является натуральным, то
if(num%1==0 and num>=0):
    # Вычисляем факториал числа num
    for i in range(1, num+1):
        factorial = i*factorial
    # Выводим результат на экран
    print(f'{num}! = {factorial}')
# Если num - отрицательное или нецелое число, выводим сообщение об ошибке
else:
    print('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

При значении num=5, результат работы кода выглядит следующим образом:

  <strong>5! = 120</strong>

А при нецелом значении 3.2:

  <strong>Невозможно вычислить факториал нецелого и/или  отрицательного числа!</strong>

Разберем код варианта №1 подробно:

1. Объявляем переменную num и передаем ей число, факториал которого требуется найти:

# число, факториал которого нужно вычислить
num = 5

2. Определяем переменную factorial, в которой будет храниться значение вычисленного факториала. В качестве начального значения устанавливаем «1»

# число, факториал которого нужно вычислить
num = 5
# начальное значение факториала
factorial = 1

3. Проверяем, верно ли задано значение переменной num. Если пользователь ввел нецелое число, тогда остаток от деления этого нецелого числа на единицу будет больше нуля.

Операция «%» в Python позволяет получить остаток от деления первого числа на второе. Например, 5%1 =0, а 5.5%1 = 0.5

Таким образом, чтобы проверить, является ли num, целым, нужно сравнить результат операции num%1 с нулем. Кроме этого, нужно убедиться, что число num не является отрицательным, для этого проверим выполнение неравенства num >= 0:

Добавим проверку перечисленных выше условий:

# число, факториал которого нужно вычислить
num = 5
# начальное значение факториала
factorial = 1

if (num%1==0 and num>=0):
    # здесь будем считать факториал

#Если же num не удовлетворяет перечисленным условиям, выведем сообщение об ошибке: 
else:
    print('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

4. Вычислим значение факториала числа num. Для целого числа i, принимающего целые значения от 1(включительно) до n+1(не включительно), будем вычислять текущее значение факториала на i и присваивать факториалу новое полученное значение. То есть, при расчете 4! будут происходить действия:

при i=1 factorial = 1*1=1
при i=2 factorial = 2*1 = 2
при i =3 factorial = 3*2 = 6
при i =4 factorial = 4*6 = 24
# число, факториал которого нужно вычислить
num = 5
# начальное значение факториала
factorial = 1

if (num%1==0 and num>=0):
    for i in range(1, num+1):
        factorial = i*factorial

#Если же num не удовлетворяет перечисленным условиям, выведем сообщение об ошибке: 
else:
    print('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

5. Вывод результата на экран осуществим в виде строки:

print(f'{num}! = {factorial}')

Такая конструкция (с буквой f перед кавычками) позволяет вывести значение переменной, заключенной в фигурные скобки. В итоге, код приобретет вид:

# число, факториал которого нужно вычислить
num = 5
# начальное значение факториала
factorial = 1

# Если num является натуральным, то
if(num%1==0 and num>=0):
    # Вычисляем факториал числа num
    for i in range(1, num+1):
        factorial = i*factorial
    # Выводим результат на экран
    print(f'{num}! = {factorial}')
# Если num - отрицательное или нецелое число, выводим сообщение об ошибке
else:
    print('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: «Кодим на Python! Вместе «питонить» веселее! 😉

ВАРИАНТ №2: Создаем функцию для вычисления факториала!

1. Для начала объявим функцию find_factorial(num), которая в качестве аргумента будет принимать число, факториал которого требуется вычислить:

def find_factorial(num):

2. Определяем переменную для хранения текущего значения факториала, присваиваем ей значение «1»:

def find_factorial(num):
    # определяем начальное значение факториала
    factorial=1

3. Затем, весь написанный в «Варианте №1» код, начиная с проверки на корректность переменной num, помещаем в функцию find_factorial(num). При этом нужно заменить «print» на «return», так как функция ничего не будет выводить на экран, а будет возвращать полученное значение факториала или сообщение об ошибке:

def find_factorial(num):
    # определяем начальное значение факториала
    factorial=1
    # Если num является натуральным, то
    if(num%1==0 and num >= 0):
        # Вычисляем факториал числа num
        for i in range(1, num+1):
            factorial = i*factorial        
        return (f'{num}! = {factorial}')
    else:
        return ('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

Если какой-то момент в коде для Вас не понятен, перечитайте внимательно приведенный выше детальный разбор кода в «Варианте 1»

4. Осталось только вызвать нашу новую функцию и проверить, корректно ли она работает. Для этого определим число, факториал которого будем считать. Затем вызовем функцию find_factorial() для вычисления факториала числа num. Полученный от функции ответ сохраним в переменной factorial и выведем эту переменную на экран:

def find_factorial(num):
    # определяем начальное значение факториала
    factorial=1
    # Если num является натуральным, то
    if(num%1==0 and num >= 0):
        # Вычисляем факториал числа num
        for i in range(1, num+1):
            factorial = i*factorial        
        return (f'{num}! = {factorial}')
    else:
        return ('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

# Определим число, факториал которого будем считать
num = 6
# Вызовем функцию find_factorial() для вычисления факториала  
factorial = find_factorial(num)
# Выведем полученный от функции ответ на экран
print(factorial)

Наша функция отлично работает и может стать полезным ингредиентом в самописной библиотеке для математических вычислений! Однако, мы можем украсить наш код небольшой изюминкой, чем и займемся при рассмотрении «Варианта №3».

ВАРИАНТ №3: Облагородим код, вычисляющий факториал в Python, строкой пользовательского ввода.

Давайте добавим скрипту интерактивности — вежливо попросим пользователя ввести число, факториал которого нужно вычислить. Затем, после ввода числа и нажатия пользователем клавиши «Enter», обратимся к функции find_factorial() и выведем результат на экран. Для этого требуется лишь заменить строку, в которой мы задавали значение переменной num, следующей строкой:

num = eval(input("Факториал какого числа считаем? "))

Функция input() в Python3 позволяет получить введенную пользователем информацию.

Функция eval() позвляет динамически обновить данные.

В итоге, обновленный работающий код будет выглядеть так:

def find_factorial(num):
    # определяем начальное значение факториала
    factorial=1
    # Если num является натуральным, то
    if(num%1==0 and num >= 0):
        # Вычисляем факториал числа num
        for i in range(1, num+1):
            factorial = i*factorial        
        return (f'{num}! = {factorial}')
    else:
        return ('Невозможно вычислить факториал нецелого и/или отрицательного числа!')

# Ввод числа, факториал которого будем считать
num = eval(input("Факториал какого числа считаем? "))
# Вызовем функцию find_factorial() для вычисления факториала  
factorial = find_factorial(num)
# Выведем полученный от функции ответ на экран
print(factorial)

Мы рассмотрели 3 варианта, от самого простого, до самого «облагороженного», которые можно использовать для решения задачи по вычислению факториала в Python. Несмотря на то, что эта задача является довольно простой, она отлично подходит для тренировки навыков программирования в Python!

Добавить комментарий