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

در این مطلب از مجله فرادرس، ابتدا با مسئله به صورت واضح آشنا شدهایم. سپس الگوریتم مربوط به آن و راه حل کلی آن مسئله را بازگو کرده و روشهای مختلفی را برای کدنویسی راه حلهای موجود نمایش میدهیم. بعد از آن که در ابتدا هر روش را توضیح دادیم، کدهای مربوط به آن روش را پیادهسازی میکنیم.
پیدا کردن جمع ارقام یک عدد در پایتون
فرض مسئله این است که عددی به عنوان ورودی داده شده و باید مجموع ارقام آن عدد را محاسبه کرده و برگردانیم. در ابتدای کار لازم است عدد را به ارقام تشکیل دهندهاش تجزیه کنیم. سپس همه ارقام را با یکدیگر جمع میبندیم تا به جواب نهایی برسیم. برای این کار همه ارقام را به صورت تک به تک به متغیر خاصی اضافه میکنیم.
برای شکستن رشته دریافت شده به عنوان عدد میتوانیم از عملگرهای مخصوص برنامه نویسی استفاده کنیم. در صورتی که نسبت به عملگرهای پایتون نیاز به کسب اطلاعات و تجربه بیشتری دارید، پیشنهاد میکنیم که فیلم آموزش رایگان عملگرها در زبان پایتون همراه با مثال را از فرادرس مشاهده کنید. برای راحتتر کردن استفاده از فیلم معرفی شده، لینک مربوط به این فیلم را در ادامه قرار دادهایم.
در فهرست زیر، عملگرهایی رامعرفی کردهایم که برای حل این مسئله بیشترین کمک را میکنند.
- عملگر Modulo یا باقیمانده با نماد % : از این عملگر برای استخراج ارقام از عدد استفاده میشود.
- عملگر تقسیم صحیحی با نماد / : از این عملگر برای کوتاه کردن عدد اصلی استفاده میکنیم. این عملیات بعد از استخراج رقم یکان از عدد اصلی استفاده میشود.
این موارد دو نمونه از عملگرهای مخصوص تقسیم در پایتون هستند. از عملگرهای بالا برای استفاده در عملیات محاسبه جمع ارقام یک عدد در پایتون استفاده میکنیم.

فرایند کلی الگوریتم این عملیات یکسان است و تفاوتها در روش پیادهسازی این فرایند ظاهر میشوند. در فهرست زیر، چند روش مختلف را برای پیادهسازی این عملیات نمایش دادهایم. بیشتر این روشها از الگوریتم سطح بالای یکسانی استفاده میکنند.
- روش اول: استفاده از متد استخراج رشته
- روش دوم: استفاده از روش برنامه نویسی بروت فورس
- روش سوم: روش اول استفاده از رویه بازگشتی
- روش چهارم: روش دوم استفاده از رویه بازگشتی
- روش پنجم: استفاده از جدول کد ASCII
- روش ششم: استفاده از توابع map() و sum()
- روش هفتم: استفاده از تابع بازگشتی پایتون به صورت تعریف یکی خطی
- روش هشتم: روش جالب و ادغامی از روشهای بالا
الگوریتم سطح بالا: به الگوریتم نزدیک به زبان انسان و قابل درک برای انسان میگویند. این الگوریتم از قواعد اختصاصی هیچ زبان برنامه نویسی پیروی نمیکند. معمولا شبه کد را از روی الگوریتم سطح بالا مینویسند.
چگونه با کمک فرادرس زبان پایتون را بیاموزیم؟
معمولا بهترین روش برای آموختن هر مطلبی بهکارگیری حواس دیداری و شنیداری در هنگام آموزش است. برای همین فقط مطالعه کتابهای آموزشی، مخصوصا در مورد برنامهنویسی چندان توصیه نمیشود. به عنوان بهترین گزینههای در دسترس میتوان به استفاده از کلاسهای آنلاین، حضوری و تماشای فیلمهای آموزشی اشاره کرد. در بین این موارد، تماشای فیلمهای آموزشی از مزیتهایی نسبت به رقبای خود برخوردار است. چند مورد از این مزیتها را در پایین فهرست کردهایم.
- عدم وجود محدودیت زمانی برای یادگیری
- هزینه مالی مقرون بهصرفهتر از کلاسهای حضوری و آنلاین
- تضمین کیفیت فیلم دورههای آموزشی مخصوصا در وبسایت فرادرس
- امکان بازبینی چندینباره مطالب تدریس شده توسط استاد
- و غیره
وجود چنین مزیتهای خاصی در فیلمهای آموزشی، باعث پرطرفدار شدن این متد یادگیری شده است.
گروه آموزشی فرادرس فیلمهایی بسیار خوب و با کیفیت عالی در روش آموزشی تولید کردهاند. این فیلمها متناسب با همه سطوح دانش برای دانشجویان فراهم شدهاند. در صورتی که در اوایل مسیر یادگیری پایتون هستید تماشای فیلمهای آموزشی زیر به شما توصیه میشود.

پیشنهاد اول فرادرس، برای شروع یادگیری زبان برنامهنویسی پایتون، تماشای فیلم مربوط به دوره رایگان آموزش پایتون، برنامه نویسی سریع و آسان در ۱۴۰ دقیقه است. این فرصتی بسیار عالی برای شروع به کسب مهارت در کار با زبان پایتون است. اما اگر از قبل با این زبان برنامهنویسی قدرتمند آشنا شدهاید و اکنون به دنبال افزایش مهارتهای خود هستید، بهعنوان مثال میتوانید دو دوره زیر را تماشا کنید.
در صورت تمایل با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی هدایت شده و سایر فیلمهای آموزشی مربوط به پایتون را نیز مشاهده کنید.
روش های مختلف حل مسئله جمع ارقام یک عدد در پایتون
برنامهنویسی تابعی یکی از شیوههای مختلف برنامهنویسی در پایتون است. در این مدل، همانطور که از نامش پیداست، توابع از اهمیت خاصی برخوردار هستند. بیشتر روشهای مطرح شده برای حل مسئله جمع ارقام یک عدد در پایتون را نیز با تکنیک تعریف تابع پیادهسازی کردهایم. در صورت نیاز به آشنایی حرفهای با این رویکرد برنامهنویسی، پیشنهاد میکنیم که فیلم آموزش برنامه نویسی تابعی در پایتون از فرادرس را مشاهده کنید. برای کمک به شما لینک مربوط به فیلم را در ادامه نیز قرار دادهایم.
در این بخش تمام روشهای نامبرده شده در قسمت قبل را به صورت یک به یک معرفی کردهایم. همچنین کدهای هر کدام را همراه با توضیحی درباره عملکرد برنامه به ترتیب از روش اول تا آخر، نمایش میدهیم.
روش اول: استفاده از متد استخراج رشته
در این روش همه کاراکترهای عدد داده شده را که از نوع داده رشته در پایتون هستند استخراج کرده و به عددی مجزا و معادل با مقدار آن کاراکتر از نوع عدد صحیح تبدیل میکنیم. سپس همه ارقام را با یکدیگر جمع میبندیم.
1num = input("Enter Number: ")
2sum = 0
3
4for i in num:
5 sum = sum + int(i)
6
7print(sum)
خروجی حاصل از اجرای کد بالا با عدد فرضی 12345 به صورت زیر است.
Enter Number: 12345 15
روش دوم: استفاده از روش برنامه نویسی بروت فورس
در این روش ارقام عدد اصلی را با طی کردن قدمهای زیر به صورت پشت سرهم تجزیه میکنیم.
- تعریف متغیری با مقدار 0 و نام دلخواه sum
- پیدا کردن باقیمانده کل عدد در مقدار 10 با کمک عملگر ماژولو % . این مقدار از سمت یکان عدد شناسایی و استخراج میشود.
- جمع کردن باقیمانده استخراج شده با متغیر sum
- حذف رقم یکان با کمک عملگر تقسیم صحیح
- تکرار مراحل ۲ تا ۴ تا زمان صفر شدن کل عدد وارد شده
- چاپ جواب نهایی که در متغیر sum ذخیره شده است.

در کدهای زیر میتوانید شکل پیادهسازی شده الگوریتم بالا را ببینید.
1num = 12345
2sum = 0
3
4while num!=0:
5 digit = int(num%10)
6 sum += digit
7 num = num/10
8
9print(sum)
خروجی حاصل از اجرای کد بالا به صورت زیر است.
15
روش سوم: روش اول استفاده از رویه بازگشتی
در این روش هم مانند روش بالا ارقام از سمت یکان عدد، یک به یک جدا میشوند. اما این عملیات را با تکنیک دیگری پیادهسازی میکنیم.
- تابعی با نام دلخواه findSum تعریف کردهایم. به این تابع دو متغیرnum و sumرا به عنوان پارامتر ارسال میکنیم.
- در ابتدای کار متغیر sumبرابر با 0 و مقدار numهم همان عدد اصلی دریافت شده در مسئله است.
- داخل تابع بررسی میکنیم که اگر numبرابر با 0 بود مقدار sumرا برگردانیم.
- در غیر این صورت، با کمک عملگر % یکان numرا از آن استراج کرده و با sumجمع میبندیم.
- سپس با کمک عمگر / رقم یکان عدد numرا حذف کرده و دوباره numو sumرا به تابع تعریف شدهfindSum ارسال میکنیم.
- خروجی تابع findSumبرابر با جواب مسئله است. با کمک تابع print() این خروجی را چاپ میکنیم.
در کادر زیر فرایند اجرایی نوشته شده در بالا را کدنویسی کردهایم.
1num, sum = 12345, 0
2
3
4def findSum(num, sum):
5 if num == 0:
6 return sum
7
8 digit = int(num % 10)
9 sum += digit
10 return findSum(num / 10, sum)
11
12
13print(findSum(num, sum))
خروجی حاصل از اجرای کد بالا به صورت زیر است.
15
برای مسلط شدن به روشهای پیادهسازی شده در این مطلب، لازم است که حداقل آشنایی را با توابع پایتون داشته باشید. به این منظور پیشنهاد میکنیم که مطلب تابع در پایتون به زبان ساده از مجله فرادرس را مطالعه کنید.
روش چهارم: روش دوم استفاده از رویه بازگشتی
در این روش متغیر sumرا تعریف نمیکنیم و سعی کردهایم که روش بازگشتی را با کدهای کمتری پیادهسازی کنیم.
- تابعی به نام دلخواه findSumتعریف کرده و متغیر numرا به عنوان پارامتر به این تابع ارسال میکنیم.
- اگر متغیر numبرابر با 0 بود مقدار 0 را برمیگردانیم.
- در غیر این صورت، حاصل جمع رقم یکان numرا با findSum(num / 10) محاسبه کرده و به عنوان خروجی برمیگردانیم.
- خروجی تابع findSumبرابر با جواب مسئله است. با کمک تابع print() این خروجی را چاپ میکنیم.
در کادر زیر فرایند اجرایی نوشته شده در بالا را کدنویسی کردهایم.
1num = 12345
2
3def findSum(num):
4 if num == 0:
5 return 0
6 return int(num % 10) + findSum(num / 10)
7
8
9print(findSum(num))
خروجی حاصل از اجرای کد بالا به صورت زیر است.
15
روش پنجم: استفاده از جدول کد ASCII
در این روش از مقدار کد ASCII معادل با هر کاراکتر عددی استفاده میکنیم. از آنجا که مقدار کد ASCII به اندازه ۴۸ واحد بیشتر از معادل عددی هر کاراکتر است، باید برای هر رقم، مقدار کد ASCII را منهای ۴۸ کنیم.
در کادر پایین کدهای مربوط به این روش را پیادهسازی کردهایم. توجه کنید که برای بدست آوردن معدل کد ASCII هر کاراکتر از تابع ord() استفاده کردهایم.
1num, sum = 12345, 0
2
3for i in range(len(str(num))):
4 # ord methods helps with ASCII
5 sum += ord(str(num)[i]) - 48
6
7print(sum)
خروجی حاصل از اجرای کد بالا به صورت زیر است.
15
روش ششم: استفاده از توابع map و sum و strip
در این روش مراحل کار را به صورت تابعی اما بدون استفاده از رویکرد بازگشتی پیادهسازی میکنیم. بیشتر تمرکز در این روش بر استفاده از توابع درونی خود پایتون است.
- تابع دلخواهی به نام getSum تعریف میکنیم که متغیری را به عنوان پارامتر میپذیرد. این متغیر همان عددی است که باید مجموع ارقامش را محاسبه کنیم.
- متغیر را با کمک خط کد str(n) به رشته تبدیل میکنیم.
- با استفاده از متد strip() و با کمک دستورات map() و int هر کاراکتر را به صورت مجزا فراخوانی کرده به اجزای جداگانهای از جنس عدد صحیح تبدیل میکنیم.
- سپس با کمک تابع list() لیست list_of_number را ایجاد میکنیم.
- در نهایت هم با کمک تابع sum() مجموع اعداد درون لیست را محاسبه کرده و به بیرون برمیگردانیم.

در کادر زیر تمام عملیات بالا را کدنویسی کردهایم.
1def getSum(n):
2
3 # convert into string
4 num_string = str(n)
5
6 # fetch each individual char using strip method
7 # find comparable int and store it in map
8 # covert it into list
9 list_of_number = list(map(int, num_string.strip()))
10
11 print(list_of_number)
12
13 # sum function returns the sum of all items in list
14 return sum(list_of_number)
15
16n = int(input("Enter the number: "))
17print(getSum(n))
خروجی حاصل از اجرای کد بالا به صورت زیر است.
Enter the number: 12345 15
روش هفتم: استفاده از تکنیک بازگشتی به صورت تعریف یک خطی
در کادر زیر همان عملیات مربوط به روش چهارم را پیادهسازی کردهایم. اما اینبار تمام عملیات هسته اصلی تابع را در یک خط کد نوشتهایم.
1def sumDigits(n):
2 return 0 if n == 0 else int(n % 10) + sumDigits(int(n / 10))
3
4# Driver code
5n = int(input("Enter the number: "))
6print(sumDigits(n))
خروجی حاصل از اجرای کد بالا به صورت زیر است.
Enter the number: 12345 15
روش هشتم: روش جالب برای محاسبه جمع ارقام یک عدد در پایتون
این روش را هم به صورت گسترش یافتهتر در بالا توضیح دادهایم. روش زیر ترکیبی از تکنیکهای مختلف زبان برنامه نویسی پایتون است. نکته مهم این روش درباره تکنیک پیادهسازی و کدنویسی بسیار خلاصه و خلاقانهای است که استفاده کردهایم.
1n = [int(d) for d in input("Enter the number : ")]
2print("the sum of digits is : ", sum(n))
خروجی حاصل از اجرای کد بالا به صورت زیر است.
Enter the number: 12345 15
چگونه طراحی الگوریتم یاد بگیریم؟
اصلیترین موضوعی که در این مطلب در حال یادگیری آن هستید، بررسی انواع الگوریتمهای مختلف برای محاسبه جمع ارقام یک عدد در پایتون است. دنیای کامپیوتر پُر است از الگوریتمهای گوناگونی که برای حل مسائل متنوع طراحی شدهاند. تقریبا هر مسئله الگوریتم مربوط به خود را دارد فقط برنامهنویس توانایی میخواهد که آن الگوریتم را به زبان مورد نظرش پیادهسازی کند.
از طرفی میتوان گفت حرفهایترین برنامهنویسها اشخاصی هستند که در طراحی الگوریتم، مهارت دارند. طراحی و نوشتن الگوریتم در کنار ساختمان داده، جزو رشتههای تخصصی مربوط به علوم کامپیوتر هستند. روشهای زیادی برای آموزش طراحی الگوریتم وجود دارد. به غیر از تمرین بر روی مسائل ساده، یکی از روشهای دیگر استفاده از فیلمهای آموزشی است. باید توجه کنیم که فیلمهای آموزشی نسبت به کلاسهای حضوری و آنلاین از مزیتهای فراوانی برخوردار هستند.

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