در مجموعه مقالات “چگونه با پایتون برنامه بنویسیم“، هر بار یک برنامهی پایتونی مینویسیم که با الگوریتم و جزییات کامل شرح داده میشود. در این قسمت کد مقلوب (معکوس) عدد در پایتون را با شما خواهیم نوشت. هدف ما در این سری آموزش برنامه نویسی پایتون این است که برنامه نویسان تاره کار پایتون، با یک مثال کاربردی آشنا شوند و درک بهتری از روش برنامه نوشتن در پایتون، پیدا کنند. اگر از علاقمندان به برنامهنویسی با زبان پایتون هستید، در ادامه با ما همراه باشید.
عنوان سوال کد مقلوب (معکوس) عدد در پایتون: برنامهای بنویسید که یک عدد صحیح از کاربر بگیرد و مقلوب (معکوس) آن عدد را چاپ کند؟
همانطور که در قسمت قبل گفتیم، هر سوالی را باید در ابتدا به بخشهای کوچکتر تقسیم کنیم تا به جواب برسیم. در این اینجا در قسمت اول سوال گفته شده است که یک عدد صحیح از کاربر، بگیرید که در پایتون میتوانیم با وارد کردن دستورات ورودی، این بخش سوال را به انجام برسانیم.
در بخش بعدی سوال، از ما خواسته شده است که مقلوب یک عدد را چاپ کنیم. برای چاپ کردن میتوانیم از دستورات خروجی در پایتون استفاده کنیم، فقط میماند مقلوب یک عدد، که باید ابتدا بدانیم چه هست و در ادامه به دنبال الگوریتمی برای حل آن بگردیم.
اگر ارقام یک عدد، را برعکس کرده و از راست به چپ بنویسیم، عدد به دست آمده را مقلوب آن عدد میگویند. برای مثال مقلوب عدد 856 میشود 658.
در دنیای واقعی، به دست آوردن مقلوب یک عدد کار سادهای است، اما انجام دادن این امر برای رایانه باید به ترتیب مراحلی منظمی همانند الگوریتم زیر باشد.
الگوریتم که دستوراتی قابل فهم برای رایانه است، اهمیت بالایی در برنامهنویسی دارد.
الگوریتم زیر دستورالعملهای پشتسرهمی است، که رایانه با انجام آنها، مقلوب یک عدد را به دست میآورد:
حال که الگوریتم برنامه را داریم به راحتی میتوانیم به سراغ نوشتن کد آن در پایتون برویم. ابتدا با دستور ()input یک عدد صحیح از کاربر میگیریم. به این صورت:
number = int(input('please enter your number: '))
سپس متغیری که قرار است، مقلوب یک عدد را در آن قرار دهیم با نام reverse_num تعریف و عدد 0 را به آن اختصاص میدهیم. به این صورت:
reverse_num = 0
برای اجرای گام 3 تا 6 الگوریتم، دستورات را در یک حلقهی تکرار while مینویسیم. حلقه تا وقتی که number بزرگتر از 0 است، ادامه دارد. به این صورت:
while number > 0:
pass
در حلقه، ابتدا باقیماندهی تقسیم number بر 10 را در متغیر temp میریزیم. به این صورت:
temp = number % 10
سپس reverse_num را در 10 ضرب کرده و حاصل را با temp جمع میکنیم و عدد بهدست آمده را در خودش میریزیم. اینگونه:
reverse_num = (reverse_num * 10) + temp
در پایان خارج قسمت صحیح، تقسیم number بر 10 را در خود number قرار میدهیم.
number = number // 10
بعد از خارج شدن در حلقه، با دستور print() متغیر reverse_num که مقلوب عدد ورودی است، را چاپ میکنیم.
print(reverse_num)
به این ترتیب، ما کد برنامهای را نوشتیم که مقلوب یک عدد را به دست میآورد. کد یکجای برنامه را در زیر میبینید:
number = int(input('please enter your number: '))
reverse_num = 0
while number > 0:
temp = number % 10
reverse_num = reverse_num * 10 + temp
number = number // 10
print(reverse_num)
روشی وجود دارد که ما میتوانیم بدون به کار بردن الگوریتم، کد مقلوب (معکوس) عدد در پایتون، را بنویسیم. به این صورت:
number = input('please enter your number: ')
reverse_num = int(number[::-1])
print(reverse_num)
اتفاقی که در این کد، صورت میپذیرد، این است که ما ورودیمان را به عدد صحیح تبدیل نمیکنیم. به دقت نگاه کنید:
number = input('please enter your number: ')
حال که ورودی ما یک رشته است، با استفاده از متدهای برش (Slices) در پایتون، آن را برعکس میکنیم. سپس حاصل را تبدیل به عدد صحیح کرده و در متغیری به نام reverse_num قرار میدهیم. به این صورت:
reverse_num = int(number[::-1])
در پایان نیز reverse_num را چاپ میکنیم:
print(reverse_num)
این از مزایای زبان برنامهنویسی پایتون است که با کدهای کوتاه و خلاصه شده، میتوانیم برنامههای خود را بنویسیم.
اکنون قصد داریم تا با استفاده از برنامهی تعیین مقلوب یک عدد، برنامهی دیگری بنویسیم. مسئله ما اینگونه است:
برنامهای بنویسید که اعداد سه رقمی را که با مقلوبشان برابرند مشخص و چاپ کند و تعداد این نوع اعداد را نیز در پایان تعیین و چاپ کند.
با توجه به شناختی که از الگوریتم پیدا کردیم و از اهمیت آن آگاه شدیم، قصد داریم این برنامه را با استفاده از دو الگوریتم متفاوت بنویسم.
در این روش ما از الگوریتمی که برای تعیین مقلوب یک عدد نوشتیم، و نیز لیستها استفاده میکنیم.
الگوریتم اول گسترش کد مقلوب (معکوس) عدد در پایتون:
نخست یک لیست خالی به نام output_numbers تعریف میکنیم. سپس حلقهی تکرار for را مینویسیم که از 100 تا 1000 را پیمایش میکند. به این صورت:
output_numbers = []
for i in range(100, 1000):
pass
در حلقه، ابتدا مقدار i را در number قرار داده و سپس کدی که در برنامهی اول نوشتیم را به آن اضافه میکنیم. به این صورت:
number = i
reverse_num = 0
while number > 0:
temp = number % 10
reverse_num = reverse_num * 10 + temp
number = number // 10
اکنون با یک if، اگر reverse_num مساوی i باشد، مقدار i را به لیستمان اضافه میکنیم. به این صورت:
if reverse_num == i:
output_numbers.append(i)
با پایان حلقهی اول، با یک حلقهی تکرار for دیگر، تمامی مقادیر داخل لیست را چاپ میکنیم. اینگونه:
for item in output_numbers:
print(item)
در انتها نیز، طول لیست را که نشاندهنده، تعداد اعدادی است که خود و مقلوبشان، یکسان هستند را در متغیری به نام accumulator میریزیم و سپس آن را چاپ میکنیم.
accumulator = len(output_numbers)
print('accumulator: {}'.format(accumulator))
ما موفق شدیم با یک لیست و برنامهای که ابتدا نوشتیم یک برنامه طولانیتر بنویسیم. کد یکجای برنامه را میتوانید در زیر ببینید.
output_numbers = []
for i in range(100, 1000):
number = i
reverse_num = 0
while number > 0:
temp = number % 10
reverse_num = (reverse_num * 10) + temp
number = number // 10
if reverse_num == i:
output_numbers.append(i)
for item in output_numbers:
print(item)
accumulator = len(output_numbers)
print('accumulator: {}'.format(accumulator))
الگوریتم دوم گسترش کد مقلوب (معکوس) عدد در پایتون:
در این الگوریتم که بهینهتر است، بدون استفاده از لیست و ذخیرهی اطلاعاتی، به جواب خواهیم رسید.
طبق الگوریم، یک متغیر به نام accumulator تعریف میکنیم و مقدار صفر را به آن اختصاص میدهیم. سپس با استفاده از یک حلقهی تکرار for ، از عدد 100 تا 1000 را پیمایش میکنیم. به این صورت:
accumulator = 0
for i in range(100, 1000):
pass
در حلقه، ابتدا مقدار i را در number قرار میدهیم. این کار را به این دلیل انجام میدهیم که مقدار اولیهی i حفظ شود و عملیات روی number انجام گیرد.
number = i
بعد از آن برای جدا کردن رقم یکان عدد، باقیماندهی تقسیم number بر 10 را در متغیری به نام same_digit قرار میدهیم. برای حذف همین رقم از number، حاصل صحیح خارجقسمت تقسیم number بر 10 را داخل خودش قرار میدهیم. به این صورت:
same_digit = number % 10
number = number // 10
اکنون برای حذف رقم دهگان و به دست آوردن رقم صدگان، خارجقسمت صحیح تقسیم number بر 10 را در متغیری به نام last_digit میریزیم. به این صورت:
last_digit = number // 10
الان ما هم رقم یکان و هم رقم صدگان عدد را داریم. با یک if، اگر دو رقم با هم مساوی باشند، مقدار i را چاپ و یکی به accumulator اضافه میکنیم. به این صورت:
if same_digit == last_digit:
print(i)
accumulator += 1
بعد از خروج از حلقه، در پایان تعداد اعدادی که خود و مقلوبشان، یکسان است را چاپ میکنیم.
print(accumulator)
خب ما توانستیم با این الگوریتم بهینهشده، برنامهی تعیین مقلوب یک عدد را کدنویسی و اجرا کنیم. کد یکجا برنامه را میتوانید در زیر ببینید.
accumulator = 0
for i in range(100, 1000):
number = i
same_digit = number % 10
number = number // 10
last_digit = number // 10
if same_digit == last_digit:
print(i)
accumulator += 1
print('accumulator: {}'.format(accumulator))
در این قسمت از آموزشهای پایتون، ابتدا یک کد مقلوب (معکوس) عدد در پایتون نوشتیم و سپس آن را گسترش دادیم. یک ضربالمثل برنامهنویسی هست که میگوید: “هر برنامهی بزرگ و پیچیده از برنامههای کوچکتری تشکیل شده است که کار میکند”. هر برنامهنویس باید این جمله را همیشه در ذهنش مرور کند تا هر وقت با برنامههای بزرگ مواجه شد آنها را به برنامههای کوچکتر تبدیل کرده و گام به گام آنها را گسترش داده، تا به برنامهی بزرگ خواسته شده برسد. ما نیز برای حل این مسئله، آن را به بخشهای کوچک تقسیم کردیم و سرانجام توانستیم با قرار دادن بخشهای مختلف در کنار یکدیگر، کد مقلوب (معکوس) عدد در پایتون را به دو روش مختلف بنویسیم.
روش شما برای نوشتن کد مقلوب (معکوس) عدد در پایتون چیست و کدام روش را ترجیح میدهید؟ خوشحال میشویم سئوالات و تجربیات خود را در بخش نظرات با ما در میان بگذارید.
اگر به برنامه نویسی علاقهمند هستید، دورههای متخصص سون لرن میتوانند به شما کمک کنند تا در مدت زمان کوتاهی به یک برنامه نویس خبره تبدیل شوید.
یادگیری زبان پایتون بسیار ساده است. و با شرکت در دورهی آموزش پایتون توسعه وب درآینده میتونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزهی هوش مصنوعی هم بشوی.
a = str(input('Enter your input: '))
while (a != 'Ghalat kardam'):
print('Az Tamase Shoma Mochakerim')
a = str(input('Enter your input: '))
print('Finish')
str_number = str(12.42)
reverse_number = str_number[::-1]
print(reverse_number)