برنامه نویسی 217 بازدید

اعداد در همه وجوه زندگی روزمره ما رسوخ کرده و نقش دارند. برای نمونه به طور روزمره با شماره‌های تلفن، تاریخ‌های تولد، سن افراد و دیگر شناسه‌های متنوع از قبیل شماره کارت ملی یا کد پستی سروکار داریم. در این مقاله با روش کار با 5 عملیات پیشرفته مدیریت اعداد در پایتون آشنا خواهیم شد.

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

عملگرهای کم‌کاربرد

همچنان که همه می‌دانیم، جمع، تفریق، ضرب و تقسیم، بنیادی‌ترین عملگرهای ریاضیاتی هستند. با این حال، عملگرهای دیگری نیز وجود دارند که گرچه کاربرد کمتری دارند، اما بسیار کارآمد هستند.

  • عملگر پیمانه (%) باقیمانده را پس از تقسیم یک عدد بر عدد دیگر بازگشت می‌دهد.
  • عملگر نمایی (**) نتیجه را پس از به توان رساندن عدد به نمای عدد دیگر بازگشت می‌دهد.
  • عملگر تقسیم صحیح (//) جزء صحیح باقیمانده تقسیم دو عدد بر همدیگر را بازگشت می‌دهد.

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

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

  • برای یافتن این که یک عدد صحیح فرد یا زوج است، می‌توانید باقیمانده تقسیم آن بر 2 را بررسی کنید و نتیجه را با 0 یا 1 بررسی کنید. بدین ترتیب در صورتی که x% 2 == 1 مقدار صحیح بازگشت دهد، عدد فرد است.
  • در مورد عملیات تقسیم صحیح، یک کاربرد در زمان پردازش ‌داده‌ها برای یافتن تعداد نقاط داده‌ای نمونه‌گیری شده از داده‌های سری زمانی وجود دارد. بدین ترتیب x // 4 موجب کاهش حجم نمونه به یک‌چهارم می‌شود.

عملگرهای انتساب

همه می‌دانیم که عملگر برابری = برای انتساب مقادیر به متغیرها مورد استفاده قرار می‌گیرد و از این رو به نام عملگر انتساب (Assignment) شناخته می‌شود. همانند بسیاری از زبان‌های دیگر برنامه‌نویسی در پایتون نیز عملگرهای حسابی می‌توانند همراه با عملگر انتساب برای ایجاد میانبر دست‌کاری مقادیر یک متغیر موجود استفاده شوند. برای نمونه x += 5 معادل x = x+5 است و x *= 3 نیز معادل x = x*3 است. این عملگرها به طور معمول کاملاً سرراست هستند. قطعه کد زیر برخی مثال‌های کاملاً ساده ارائه کرده است:

مثال فوق برخی نمونه‌های استفاده از عملگرهای انتساب به همراه عملگرهای کم‌کاربرد دیگر که در بخش قبل معرفی کردیم را نمایش می‌دهد. توجه داشته باشید که برخی عملگرهای انتساب می‌توانند با داده‌های دنباله‌ای نیز کار کنند. این عملگرها در پاره‌ای موارد کاملاً مفید هستند:

دقت اعداد اعشاری

فرض کنید مشغول حل یک معادله جمع کاملاً ساده هستیم. دو متغیر با مقادیر 2.2 و 1.1 تعریف می‌کنیم. اینک مجموع این دو عدد چیست؟ آیا مجموع آن‌ها برابر با 3.3 است؟ احتمالاً شما با اعتماد به نفس بالایی این پاسخ را تأیید می‌کنید، اما اگر از پایتون برای حل این معادله استفاده کنیم نتیجه زیر حاصل می‌شود:

شاید از دیدن نتیجه فوق شگفت‌زده شوید. اگر به صحت اجرای کد فوق شک دارید، آن را روی سیستم خود امتحان کنید.

در واقع شما نباید با دیدن چنین نتایجی شگفت‌زده شوید، زیرا این‌ها اعداد اعشاری هستند که با دقت کافی در حافظه ذخیره نشده‌اند. بررسی دقیق مفاهیم و سازوکارهای بنیادی این مسئله خارج از حیطه این مقاله است، اما اگر علاقه‌مند باشید می‌توانید این صفحه استک‌اورفلو (+)‌ را مطالعه کنید.

خوشبختانه پایتون یک ماژول خاص به نام decimal دارد که از اجرای یک چنین عملیاتی با دقت مطلوب پشتیبانی می‌کند. این عملیات دقیق می‌تواند به طور خاص در مواردی که دقت ریاضی حائز اهمیت بالایی است مانند فیزیک و محاسبات مالی مورد استفاده قرار گیرد. در ادامه با بررسی چند مثال ساده با طرز کار آن بیشتر آشنا می‌شویم:

چنان که در قطعه کد فوق می‌بینید، اعداد اعشاری را با استفاده از کلاس Decimal ایجاد کرده‌ایم. نکته مهم‌تر این است که از رشته‌ها برای وهله‌سازی اشیای Decimal بهره گرفته‌ایم. اگر مقدار c_Decimal را بررسی کنید، متوجه خواهید شد که مقدار صحیح یعنی 3.3 را نمایش می‌دهد. با این حال اگر آن را مستقیماً با 3.3 مقایسه کنید، می‌بینید که با هم برابر نیستند.

این نابرابری قابل انتظار است، زیرا یک مقدار واقعی اعشاری در واقع دقیقاً آن طور که به نظر می‌رسد نیست. به علاوه اعداد معمولی اعشاری به کلاس float تعلق دارند، در حالی که c_Decimal به کلاس Decimal تعلق دارد. باید توجه داشته باشید که ما می‌توانیم آن را با وهله دیگری از Decimal که با استفاده از همان عدد اعشاری ایجاد شده است، مقایسه کنیم.

همچنین کد فوق به ما نشان می‌دهد که می‌توانیم از عملیات جمع به همراه دو وهله از Decimal استفاده کنیم. در واقع عملیات رایج دیگر مانند تفریق و تقسیم نیز می‌توانند مورد استفاده قرار گیرند.

5 عملیات پیشرفته مدیریت اعداد در پایتون

کسرها

ما در اغلب موارد از اعداد اعشاری برای نمایش یک مقدار با دقت کافی بهره می‌گیریم. برای نمونه اگر 1 را بر 9 تقسیم کنیم، عدد 0.1111111111111111 به دست می‌آید که یک دقت 16 رقمی به دست می‌دهد. با این که این سطح از دقت که به کمک کلاس Decimal به دست آمده است، از دیدگاه ریاضیاتی برای مقاصد مختلف کفایت می‌کند، اما در هر حال دقیق نیست.

خوشبختانه پایتون یک پکیج خاص به نام Fraction دارد که با استفاده از آن می‌توان این عملیات مرتبط با اعداد کسری را اجرا کرد. در مجموع، کاربرد آن مشابه کلاس Decimal است. در ادامه مثال‌هایی از کاربردهای این پکیج را می‌بینید:

چنان که در قطعه کد فوق دیده می‌شود، برای ایجاد یک تابع باید شیء Fraction را وهله‌سازی کرده و صورت و مخرج کسر را تعیین کنید. این کلاس از عملیات حسابی که قبلاً اشاره کردیم مانند جمع و ضرب پشتیبانی می‌کند. علاوه بر این کاربردهای ابتدایی می‌توان همانند قطعه کد زیر عملیات‌های دیگری که غالباً مورد نیاز هستند را نیز اجرا کرد:

در کد فوق چند نکته وجود دارد که باید مورد اشاره قرار دهیم:

  • ساده‌سازی به وسیله تعیین پارامتر ‎_normalize در طی وهله‌سازی کنترل می‌شود. به این ترتیب کسر به صورت پیش‌فرض تا کمترین مقدار ممکن مخرج ساده‌سازی می‌شود.
  • برای تبدیل یک عدد اعشاری به یک کسر، اگر از تابع ()as_integer_ratio روی مقدار اعشاری استفاده کنیم، یک چندتایی بازگشت می‌یابد. در این حالت از ستاره برای باز کردن چندتایی استفاده می‌کنیم که عناصر چندتایی برای ایجاد یک کسر جدید مورد استفاده قرار می‌گیرند.

فرمت اعداد برای رشته‌ها

در زمان کار روی کدهای پایتون در موارد زیادی لازم می‌شود که یک عدد را به صورت یک رشته (String) نمایش دهیم. در اغلب موارد ما می‌خواهیم این کار را طوری انجام دهیم که خوانایی اعداد آسان‌تر باشد. برای نمونه اگر یک عدد بسیار بزرگ که شامل چند رقم است را نمایش می‌دهیم، ممکن است بخواهیم از جداکننده استفاده کنیم تا عدد مانند مثال زیر بهتر نمایش یابد.

فرض کنید می‌خواهیم اعداد اعشاری را با دقت دو رقم اعشار نمایش دهیم، به طوری که معدل نمرات یک دانش‌آموز به دست آید. مثال ساده زیر را در نظر بگیرید:

  1. در مثال آخر از متد ()format استفاده شده است؛ در حالی که در مثال زیر از f-strings بهره گرفته‌ایم تا نشان دهیم که روش‌های مختلفی برای فرمت‌بندی رشته‌ها وجود دارد.
  2. روش دیگر برای فرمت‌بندی اعداد اعشاری این است که از متد ()round استفاده کنیم که یک عدد اعشاری جدید با دقت مطلوب ایجاد می‌کند. توجه داشته باشید که ()round از فرمت‌بندی رشته متفاوت است و یک عدد اعشاری جدید ایجاد نمی‌شود.
در یک پروژه محاسبات علمی، اعداد ممکن است بسیار بزرگ یا بسیار کوچک باشند. در این موارد معمولاً از تکنیک نمادگذاری علمی مانند مثال زیر استفاده می‌شود:
همچنین معمول است که اعداد به صورت درصد مانند نرخ بهره و دیگر مقادیر کوچک مانند نرخ تخفیف برای یک رویداد فروش تبلیغاتی نمایش می‌یابند. برخی مثال‌های ساده در ادامه نمایش یافته‌اند. توجه کنید که ما می‌توانیم دقت را با تعیین مقدار پیش از علامت درصد مشخص سازیم:

سخن پایانی

در این مقاله پنج تکنیک پیشرفته مدیریت در پایتون را مشاهده کردیم. در ادامه این موارد را جمع‌بندی کرده‌ایم.

  • علاوه بر عملگرهای ابتدایی (+, -, *, /) می‌توانیم از عملگر پیمانه (%) برای محاسبه همنهشتی، از ** برای محاسبه توان و از // برای محاسبه تقسیم صحیح استفاده کنیم.
  • این عملگرهای حسابی می‌توانند به همراه عملگرهای انتساب نیز استفاده شوند تا در نوشتن کد صرفه‌جویی شود.
  • اگر نیاز به محاسبات دقیق باشد، می‌توانید از کلاس Decimal استفاده کنید که بخشی از ماژول decimal در کتابخانه استاندارد است.
  • کلاس Fraction در ماژول fractions به طور خاص برای کار با کسرها اختصاص یافته است.
  • متد ()format برای رشته‌ها و f-strings دو ابزار کارآمد برای قالب‌بندی اعداد به روش مطلوب مانند درصد و نمادگذاری علمی هستند.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

میثم لطفی (+)

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *