رشن | خدمات میزبانی وب

فاکتوریل چیست و چگونه در پایتون استفاده کنیم

هرچند تعریف دقیقی نمی توان از فاکتوریل گفت اما من این گونه آن را می‌نویسم:

نقل قول

فاکتوریل یک عدد برابر است با حاصل ضرب همان عدد در عدد کوچک تر تا زمانی که به یک برسد

با مثال آن را واضح تر می‌کنیم:

فرض کنید می‌خواهیم فاکتوریل عدد ۶ را محاسبه کنیم. محاسبه آن به این شکل می شود در ریاضی:

Code
6! = 6 * 5 * 4 * 3 * 2 * 1

فاکتوریل یک عدد به این صورت در ریاضی نمایش داده می‌شود. یعنی که همان عدد در یک عدد کوچک‌تر از خودش ضرب می‌شود و این‌قدر این کار ادامه پیدا می‌کند تا عدد آخر به یک برسد.

پس با این تعریف، الان فاکتوریل عدد ۶ را به این صورت هم می‌توانیم بنویسیم:

Code
6! = 6 * 5!
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1

حالا اگر بخواهیم فاکتوریل یک عدد را در پایتون حساب کنیم باید چه کنیم. برای این کار دو راه داریم:

۱- استفاده از ماژول math و تابع آماده factorial() که در خود پایتون هست

۲- نوشتن همین تابع


برای این که از تابع آماده خود پایتون استفاده کنیم باید به این صورت عمل کنیم:

Python
import math
print(math.factorial(6))

خروجی:

Code
720

این کار بسیار ساده هست و فقط کافی است که ماژول math و تابع factorial() را صدا بزنیم و ورودی دلخواه بدهیم.

دو نکته را در هنگام استفاده از این تابع باید دقت کنید:

  1. مقدار عددی منفی قبول نمی‌کند
  2. مقدار عددی اعشاری قبول نمی‌کند

فاکتوریل در حقیقت فقط روی اعداد حسابی صفر و اعداد صحیح مثبت محاسبه می‌شود و فاکتوریل گرفتن روی اعداد اعشاری و منفی خطا برمی‌گرداند.

می‌خواهیم سه خروجی زیر را مشاهده کنیم:

Python
import math
print(math.factorial(3.0))
print(math.factorial(0))
print(math.factorial(-3))

با توضیحات بالا انتظار داریم که هر سه خروجی با خطا همراه باشد، هرچند که در این برنامه ساده اگر یک لاین به خطا بخورد برنامه دیگر ادامه پیدا نمی‌کند و متوقف می‌شود.

خروجی را ببینیم:

Code
6
1
Traceback (most recent call last):
File "factorial.py", line 4, in <module>
print(math.factorial(-3))
ValueError: factorial() not defined for negative values

همان‌طور که می‌بینید عدد 3.0 را قبول کرده چون این عدد همان 3 هست و پس آن را حساب کرد. عدد 0 هم فاکتوریلش همواره برابر با 1 می‌شود و پس این خط هم درست بود. اما خط آخر که خود مفسر پایتون هم در خطا نوشته فاکتوریل روی مقادیر منفی محاسبه نمی‌شود.

و یک مثال هم از عدد اعشاری بزنیم:

Python
import math
print(math.factorial(3.1))

خروجی:

Code
Traceback (most recent call last):
File "factorial.py", line 2, in <module>
print(math.factorial(3.1))
ValueError: factorial() only accepts integral values

مفسر پایتون می‌گوید که این تابع فقط عدد integer یا صحیح قبول می‌کند.


اسکریپت فاکتوریل

برای این‌که خود ما یک اسکریپت فاکتوریل بنویسیم به این صورت باید برنامه را بنویسیم:

Python
def factorial(n):
answer = 1
for x in range(1, n+1):
answer = answer * x
return answer

و در نهایتا تابع را به این شکل صدا می‌زنیم با عدد دلخواه:

Python
print(factorial(10))

خروجی:

Code
3628800

نظرات