ضرب در پایتون – نحوه انجام به زبان ساده
- نحوه استفاده از عملگر «*» برای ضرب اعداد مختلف را میآموزید.
- شیوه ضرب و بهروزرسانی مقدار متغیر با عملگر «*=» را یاد میگیرید.
- کاربرد توابع «map» و لامبدا در ضرب عناصر لیست را خواهید آموخت.
- نحوه ضرب سریع اعضای لیست با «math.prod» و «List Comprehension» را یاد میگیرید.
- روش ضرب برداری آرایهها با «numpy.multiply» و ویژگیهای آن را میآموزید.
- قوانین ضرب رشتهها، اعداد مختلط و اعداد منفی در پایتون را فرا میگیرید.

در واقع چندین تفسیر مختلف از عمل ضرب در دنیای برنامهنویسی وجود دارد و هر تفسیر روشهای مختلفی و منحصر به خودش را برای رسیدن به هدف دارد. در این مطلب علاوه بر بررسی روشهای ضرب در پایتون برای هر کدام از این تفسیرها، مثالی نیز در فضای پایتون کدنویسی خواهیم کرد.
استفاده از عملگر «*»
البته که اولین روش، استفاده از نماد ستاره به معنی عملگر ضرب است. نماد ستاره تقریبا در همه زبانهای برنامهنویسی عملیات ضرب را انجام میدهد. در ادامه کد سادهای از پایتون را نمایش دادهایم که استفاده از این عملگر را نمایش میدهد.
این برنامه برای محاسبه مجموع کل قیمت محصول موز در محیط اجرای کد نوشته شده است.
1.5
خروجی کد بالا مقدار دقیق حاصل ضرب عدد 3.14 در 2.71 را نشان میدهد که برابر با 8.5094 است.
8.5094استفاده عملگر تخصیص «=*»
به کدی که در ادامه در رابطه با قیمت موز آوردهایم توجه کنید.
در اینجا میدانیم که موزها ۵۰ سنت یا 0.50 دلار میارزند و تورم برابر با ۳ درصد است که با ضریب تورم 1.03 نشان داده میشود. وقتی که قیمت موز banana_price ضرب در تورم شود قیمت جدید موز بدست میآید. علت این اتفاق تاثیر عملگر تخصیص *= است. مقدار نهایی قیمت برابر با مقدار زیر است. بنابراین میبینیم که قیمت موز ۳درصد افزایش داشته است.
0.515
عملیات ضرب در پایتون بر روی لیست ها
لیستها یکی از ساختارهای ذخیره داده بنیادین و بسیار قدرتمند در پایتون هستند. بهطور طبیعی باید توانایی اجرای عملیات ریاضی را نیز داشته باشند. ضرب کردن هم یکی از عملیات پایهای و اساسی ریاضیات است. پس لیستها باید توانایی این را داشته باشند که در عملیات ضرب استفاده شوند.
برای اجرای عمل ضرب بر روی لیست چند روش مختلف در پایتون وجود دارد که در این بخش به بررسی آنها خواهیم پرداخت.
ضرب بر روی لیست با استفاده از تابع map
در این بخش، عمل ضرب در پایتون را بر روی لیستی از اعداد با استفاده از تابع map() خواهیم دید. فرض کنید لیستی از اعداد داریم و باید هر عنصر را در مقدار یکسانی ضرب کنیم. برای انجام این کار میتوانیم از تابع map() استفاده کنیم.
به کدی که در زیر نوشتهایم توجه کنید.
در اینجا تابع «لامبدا» (Lambda) داریم که صرفا فقط دادههای ورودی خود را ضرب در عدد 2 میکند. از تابع map() برای بکار گرفتن این تابع – در آرگومان اول آمده است– بر روی هر عنصر لیست که در واقع همان اعداد هستند استفاده میکنیم. این کد، شی map() را برمیگرداند که میتوان آن را با استفاده از سازنده list() به ساختار تعریف شده شی از نوع لیست تبدیل کرد.
بنابراین خروجی زیر را بدست میآوریم.
[2, 4, 6, 8]توجه کنید که بهطور ساده عمل ضرب کردن لیست در عدد ۲ متفاوت از چیزی خواهد بود که دیدیم. اگرچه که از لحاظ نحوی و نوشتاری صحیح است اما جواب متفاوتی را برمیگرداند. بنابراین برنامه زیر سینتکس صحیحی دارد.
خروجی برنامه بالا بهصورت زیر است.
[1, 2, 3, 4, 1, 2, 3, 4]استفاده از عملیات reduce روی لیست
خروجی کد بالا بهصورت زیر است.
24در این مثال، ماژول functools از پایتون را در محیط کار «وارد» (Import) کردهایم. به کمک ماژولfunctools به تابع reduce()دسترسی پیدا میکنیم. تابع reduce() خود تابع دیگری را به عنوان پارمتر ورودی میپذیرد. در این کد تابع product() را به تابع reduce() ارسال کردهایم. این تابع، تابع product() را که به عنوان پارامتر گرفته است بر روی لیستی که به عنوان پارامتر دوم گرفته اعمال میکند. در اینجا لیست numbers را به عنوان پارامتر دوم به تابع reduce() ارسال کردهایم. در هر مرحله جواب صحیح را برای استفاده در مرحله بعد تابع reduce() جدا میکند و این عملیات را بر روی عناصر باقیمانده لیست یک به یک اعمال کند.
برای استفاده از تابع reduce() لازم نیست که حتما تابعی را بهصورت جداگانه تعریف کرده باشیم یا از قبل آماده داشته باشیم. میتوانیم از تابع reduce() در ترکیب با تابع lambda نیز برای کار -در اینجا اجرای عمل ضرب- روی عناصر لیست استفاده کنیم.
به مثال کدنویسی شده پایین نگاه کنید.
خروجی کد بالا به صورت زیر است.
120در کد بالا لیستی از اعداد ایجاد کردهایم. سپس تابع reduce() را از ماژول functools در محیط کدنویسی پایتون وارد کردهایم تا با کمک تابع تعریف شده lambda بر روی اعداد موجود در لیست عمل ضرب را انجام دهیم.
کار تابع lambda به این صورت است که دو آرگومان x و y را میپذیرد و حاصل ضرب این دو عدد را برمیگرداند. در این مثال نتیجه حاصل از ضرب همه اعضای لیست در یکدیگر در متغیر result ذخیره میشود. این نتیجه برابر با 120 است. تابع reduce() ابزار قدرتمندی برای کم کردن تعداد عناصر لیست در مقدار یک متغیر مجزا است و برای استفاده در برنامهنویسی تابعی و لیستهای بزرگ بسیار مناسب است.
ضرب با کمک List Comprehension
به کد پیادهسازی شده پایین از اجرای این عملیات نگاه کنید.
خروجی کد بالا بهصورت زیر است.
[1, 2, 3, 4, 5]در کد بالا اول از همه لیستی برای اعداد تشکیل دادهایم و متغیر result را با مقدار 1، مقداردهی اولیه کردیم. سپس با استفاده از عمل Comprehension بر روی لیست اعداد پیمایش کردیم و لیست جدیدی را با حاصل ضرب هر عدد در مقدار result ایجاد کردیم. در نهایت مقدار جواب با رسیدن پیمایش به انتهای لیست، برابر با لیست جدید در result میشود.
هربار که عمل پیمایش در Comprehension انجام میشود نتیجه به عنصری در لیست جدید تبدیل میشود. چون اینجا مقدار result برابر 1 بود نتیجه دقیقا همسان با لیست مرجع است. اما میتوان تمام عناصر لیست را در هر عدد مشخصی ضرب کرد. مقدار result را تغییر دهید تا تغییر را در عناصر لیست مشاهده کنید.
استفاده از math.prod
خروجی کد بالا باز هم مقدار زیر است.
24ضرب با استفاده از حلقه for
به مثالی که در ادامه پیادهسازی شده توجه کنید.
خروجی کد بالا برابر با مقدار زیر است.
120کد بالا در ابتدا لیستی از اعداد تشکیل میدهد. سپس متغیر result را با مقدار 1 مقداردهی اولیه میکند. بعد از حلقه for برای پیمایش بر روی لیست اعداد استفاده میکند. پیمایش لیست ادامه دارد تا وقتی که مقدار هر پیمایش و همه اعداد موجود در لیست در یکدیگر ضرب شوند. سپس نتیجه نهایی در متغیر resultذخیره شود. در نهایت مقدار resultبرابر با ضرب همه اعداد موجود در لیست در یکدیگر خواهد بود که در این مثال برابر با عدد 120 است. جواب در این مسئله خاص برابر با محاسبه فاکتوریل بزرگترین و آخرین عنصر در لیست است.

استفاده از numpy.multiply
در ادامه مثالی از ضرب دو آرایه NumPy را در یکدیگر میبینید.
خروجی کد بالا بهصورت زیر است.
[ 4 10 18]روش ضرب اعداد مختلط
- استفاده از عملگر * برای ضرب
- استفاده از تابع Complex
در ادامه هر دو روش را بررسی میکنیم.
عملگر ضرب با نماد ستاره یا «*»
عملگر ستاره همینطور که برای اجرای ضرب معمولی بین اعداد ساده بکار میرود، در پایتون میتواند اعداد مختلط را نیز در هم ضرب کند. نکته مهم این است که عملگر * از قوانین استاندار ریاضی برای ضرب کردن اعداد مختلط استفاده میکند. پس نظم عملوندها اهمیتی ندارد. به کد آمده در پایین توجه کنید.
جواب دقیق ضرب اعداد مختلط (2 + 3j) و (3 + 4j) برابر با (-6 + 17j) است که در ادامه میبینید. خروجی کد بالا بهصورت صحیح پاسخ این عملیات را محاسبه کرده است.
(-6 + 17j)استفاده از تابع complex
از تابع complex() برای تبدیل کردن رشتهای که به عنوان پارامتر به این تابع داده شده به عدد مختلط و سپس ضرب دو عدد استفاده میشود. هر عدد مختلط دارای دو بخش حقیق و موهومی است.
به کد آمده در پایین برای نمایش روش استفاده از تابع complex()نگاه کنید.
خروجی کد بالا برابر با (6+8j) است که همان مقدار صحیح ضرب (3+4j) در عدد ۲ میشود.
(6+8j)روش ضرب رشته در اعداد صحیح
در پایین برای نمایش مثال از ضرب رشته در اعداد صحیح کدی پیادهسازی کردهایم.
خروجی کد بالا به صورت زیر است.
USAUSAUSAضرب اعداد منفی در پایتون
برای عمل ضرب در پایتون میتوانیم از اعداد منفی نیز استفاده کنیم. یکی از اساسیترین روشهای ضرب اعداد منفی استفاده از عملگر ضرب * است. به کد آمده در زیر توجه کنید.
خروجی کد بالا بهصورت زیر است.
6در کد بالا مقدار -2 را به متغیر x و مقدار -3 را به متغیر y تخصیص دادهایم. سپس متغیرهای xو yرا در یکدیگر با استفاده از عملگر *ضرب کردیم و جواب را در متغیر result قرار دادیم. در نهایت نیز مقدار متغیر result را که اکنون برابر با 6 است بر روی نمایشگر کاربر چاپ کردیم.

سوالات متداول
در این بخش از مطلب ضرب در پایتون در مجله فرادرس به سوالات پرتکرار درباره این مبحث میپردازیم. این سوالات بیشترین تکرار پرسش را در بین دانشجویان زبان برنامهنویسی در ارتباط با عمل ضرب داشتهاند.
آیا عملگر ضرب می تواند از انواع داده مختلف عددی در پایتون پشتیبانی کند؟
بله، عملگر ضرب در پایتون میتواند انواع داده عددی مختلف شامل اعداد integer و Float را پشتیبانی کند. این عملگر حتی میتواند اعداد با نوع داده مختلف را -مانند ضرب عدد صحیح در عدد اعشار- در هم ضرب کند.
پایتون چگونه ترتیب اجرای عملگرها را با عملگر ضرب مدیریت می کند؟
زبان برنامهنویسی پایتون از قوانین PEMDAS پیروی میکند. به این معنا است که عملگر ضرب، همسان با عملگر تقسیم حق تقدم بر سایر عملگرها دارد. اولویت عملگر ضرب برای اجرا بعد از عبارتهای داخل پرانتز و توان است. البته به شرطی که در مسئله وجود داشته باشند.
آیا می توان از عملگر ضرب برای چندین عملوند مختلف در یک عبارت استفاده کرد؟
بله، عملگر ضرب در پایتون تنها محدود به اجرای عملیات بر روی دو عدد نشده است. از این عملگر میتوان برای ضرب کردن هرچند عدد دلخواه در یک عبارت ریاضی استفاده کرد.
چطور می توانم در پایتون عددی را در خودش ضرب کنم؟
برای اینکه در پایتون بتوانید عددی را در خودش ضرب کنید، هم میتوانید از عملگر ضرب بهصورت تکراری (مانند 4 * 4 * 4) استفاده کنید و هم میتوانید از عملگر ستاره «*» بهصورت دوبار کنار هم یعنی «**» استفاد کنید.
به جز استفاده از عملگر ضرب روش دیگری برای انجام عملیات ضرب در پایتون وجود دارد؟
بله، در کنار استفاده از عملگر ضرب میتوانید تابع سفارشی خود را برای انجام عمل ضرب در پایتون تعریف کنید و یا از توابع مخصوص عملیات ضرب که توسط ماژول math در پایتون ارائه میشوند استفاده کنید.
آیا میتوان اعدادی که توسط ورودی کاربر گرفته شده اند را نیز ضرب کرد؟
چگونه پایتون عمل ضرب را برای رشته ها مدیریت می کند؟
رشتهها را در پایتون فقط میتوان در اعداد integer ضرب کرد. وقتی که رشتهای را در عدد صحیح ضرب میکنید، نتیجه ضرب تکرار رشته مورد نظر به تعداد مقدار عدد صحیح است. برای مثال ضرب رشته « Hello» در عدد صحیح ۳ برابر با رشته «Hello Hello Hello» میشود.
آیا در پایتون محدودیتی در اندازه اعداد برای ضرب وجود دارد؟
در اندازه اعدادی که پایتون میتواند بر روی آنها عملیات ضرب انجام دهد هیچ محدودیت عملیاتی وجود ندارد. پایتون از هر عدد بسیار بزرگی پشتیبانی میکند و عملیات ضرب میتواند اعداد بسیار بزرگ را بهخوبی مدیریت کند.
آیا می توان با عملگر ضرب در پایتون اعداد مختلط را نیز در یک دیگر ضرب کرد؟
بله، میتوانید برای محاسبه روی اعداد مختلط از عملگر ضرب «*» استفاده کنید. این عملگر در پایتون، عملیات ضرب مختلط را همانگونه که انتظار میرود انجام میدهد و میتواند هر دو قسمت حقیقی و موهومی عدد را بهطور مناسبی شناسایی و نتیجه محاسبه کند.
جمع بندی
همانطور که اشاره کردیم عملیات ضرب یکی از عملهای اساسی ریاضی در پایتون است و بنابراین، روشهای گوناگونی برای انجام ضرب در پایتون فراهم شده است. از عملیات بسیار ساده ریاضی توسط عملگرهای پایه روی اعداد صحیح گرفته تا کتابخانههای حرفهای برای محاسبات پیچیده هر کدام روش منحصر بهفرد خود را برای انجام صحیح عمل ضرب دارند.
در این مطلب از مجله فرادرس سعی کردیم که با انواع سناریوهای ضرب در پایتون پیشبیاید آشنا شویم و روش حل هر کدام را بررسی کنیم. با دانش کسب شده درباره ضرب در پایتون حتما خواهیم توانست که بهتر به حل مسائل دنیای واقعی پایتون بپردازیم و برنامههایی با کارایی بالاتر بنویسیم.
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













