کد مقلوب (معکوس) عدد در پایتون - چگونه با پایتون برنامه بنویسیم؟ قسمت دوم

‏  10 دقیقه
۲۳ فروردین ۱۳۹۹

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

اگر شما از علاقمندان به برنامه‌نویسی از جمله پایتون هستید، در ادامه با ما همراه باشید.

فهرست محتوای این مقاله

نوشتن برنامه‌ی کاربردی با پایتون:

عنوان سوال کد مقلوب (معکوس) عدد در پایتون:

برنامه‌ای بنویسید که یک عدد صحیح از کاربر بگیرد و مقلوب (معکوس) آن عدد را چاپ کند؟

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

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

برای اطلاعات بیشتر در این مورد، مقاله‌ی ورودی و خروجی در پایتون را مطالعه نمایید.

مقلوب یک عدد چیست؟

اگر ارقام یک عدد، را برعکس کرده و از راست به چپ بنویسیم، عدد به دست آمده را مقلوب آن عدد می‌گویند. برای مثال مقلوب عدد 856 می‌شود 658.

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

الگوریتم مقلوب (معکوس) عدد:

الگوریتم که دستوراتی قابل فهم برای رایانه است، اهمیت بالایی در برنامه‌نویسی دارد.

الگوریتم زیر دستورالعمل‌های پشت‌سرهمی است، که رایانه با انجام آن‌ها، مقلوب یک عدد را به دست می‌آورد:

  1. یک عدد بگیر و در number قرار بده.
  2. یک خروجی به نام reverse_num انتخاب کن و 0 را در آن قرار بده.
  3. باقیمانده‌ی تقسیم number بر 10 را در temp قرار بده.
  4. reverse_num را در 10 ضرب کن و حاصل را با temp جمع کرده و در reverse_num قرار بده.
  5. حاصل تقسیم number بر 10 را در number قرار بده.
  6. اگر number بزرگتر از 0 است، به گام 3 برگرد.
  7. reverse_num را چاپ کن.
  8. به اجرای الگوریتم خاتمه بده.

نوشتن کد مقلوب (معکوس) عدد در پایتون:

حال که الگوریتم برنامه را داریم به راحتی می‌توانیم به سراغ نوشتن کد آن در پایتون برویم. ابتدا با دستور 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)

این از مزایای زبان برنامه‌نویسی پایتون است که با کدهای کوتاه و خلاصه شده، می‌توانیم برنامه‌های خود را بنویسیم.

گسترش دادن برنامه‌ی مقلوب (معکوس) عدد در پایتون

اکنون قصد داریم تا با استفاده از برنامه‌ی تعیین مقلوب یک عدد، برنامه‌ی دیگری بنویسیم. مسئله ما این‌گونه است:

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

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

الگوریتم اول چاپ اعداد سه رقمی برابر با مقلوبشان:

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

  1. یک آرایه‌ی خالی به نام output_numbers تعریف کن.
  2. به ازای مقادیر i، از 100 تا 1000 و افزایش یک واحد پس از هر بار اجرا حلقه‌، گام‌های 3 تا 9 را به طور مکرر اجرا کن.
  3. مقدار i را در number قرار بده.
  4. یک خروجی به نام reverse_num انتخاب کن و 0 را در آن قرار بده.
  5. باقیمانده‌ی تقسیم number بر 10 را در temp قرار بده.
  6. reverse_num را در 10 ضرب کن و حاصل را با temp جمع کرده و در reverse_num قرار بده.
  7. حاصل تقسیم number بر 10 را در number قرار بده.
  8. اگر number بزرگتر از 0 است، به گام 5 برگرد.
  9. اگر reverse_num برابر با i است، مقدار i را به output_numbers اضافه کن.
  10. به ازای مقادیر item داخل output_numbers ، با اجرای مکرر هر بار حلقه، item را چاپ کن.
  11. تعداد عضو output_numbers را چاپ کن، و به اجرای الگوریتم خاتمه بده.

نوشتن کد الگوریتم اول چاپ اعداد سه رقمی برابر با مقلوبشان:

الگوریتم اول گسترش کد مقلوب (معکوس) عدد در پایتون:

نخست یک لیست خالی به نام 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))

الگوریتم دوم چاپ اعداد سه رقمی برابر با مقلوبشان

الگوریتم دوم گسترش کد مقلوب (معکوس) عدد در پایتون:

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

  1. یک جمع‌کننده‌ی تعداد اعداد به نام accumulator انتخاب کن و صفر را در آن قرار بده.
  2. عدد 100 را در یک شمارنده به نام i اضافه کن.
  3. مقدار i را در number قرار بده.
  4. باقیمانده‌ی تقسیم number بر 10 را محاسبه و در same_digit قرار بده.
  5. بخش صحیح تقسیم number بر 10 را در number قرار بده.
  6. بخش صحیح تقسیم number بر 10 را در last_digit قرار بده.
  7. اگر مقدار A و C برابر است، مقدار i را چاپ کن و یک واحد به accumulator اضافه کن.
  8. یک واحد به i اضافه کن.
  9. اگر مقدار i کوچکتر از 1000 است، به گام 3 برو.
  10. مقدار 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))

جمع‌بندی:

یک بار دیگر، توانستیم با شما یک برنامه‌ی پایتونی بنویسیم. در این قسمت ابتدا یک کد مقلوب (معکوس) عدد در پایتون ، را نوشتیم و سپس آن را گسترش دادیم. یک ضرب‌المثل برنامه‌نویسی هست که می‌گوید: "هر برنامه‌ی بزرگ و پیچیده از برنامه‌های کوچکتری تشکیل شده است که کار می‌کند". هر برنامه‌نویس باید این جمله را همیشه در ذهنش مرور کند تا هر وقت با برنامه‌های بزرگ مواجه شد آنها را به برنامه‌های کوچکتر تبدیل کرده و گام به گام آنها را گسترش داده، تا به برنامه‌ی بزرگ خواسته شده برسد.

یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره‌ی متخصص پایتون توسعه وب درآینده می‌تونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزه‌ی هوش مصنوعی هم بشوی.

چه امتیازی به این مقاله می دید؟
نویسنده عبدالرضا مولایی
هیچوقت برای یادگیری دیر نیست؛ همیشه چیزهای جدید برای آموختن وجود دارد.. این دو جمله، همیشه آویزه‌ی گوش منه، چون باعث میشه از یادگیری چیزهای تازه هراسی نداشته باشم.
ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 

نظرات کاربران

porya

دم شما گرم بسیار عالی
فقط توی الگوریتم اولی مرحله یکی مانده به اخر بجای اینکه نوشتید number را چاپ کن بنویسید reverse_num را چاپ کن تا دوستان اشتباه نکنن
بازم ممنون

عبدالرضا مولایی

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

محمدرضا

سلام
میشه بگید که برای این که تشخیص بدهیم یک عدد خودمقلوب است یا نه چه کدی را بنویسیم؟

نازنین کریمی مقدم

سلام. شما میتونید پیاده سازی مختلف برای چک کردن اینکه آینه ای هست یا نه رو از این لینک مشاهده کنید.
برای گرفتن عدد هم میتونید از تابع input استفاده کنید که در انتهای همین لینک توضیح داده شده.

علی

سلام ، مقلوب عدد اعشاری چی میشه؟ لطفا راهنمایی کنید

نازنین کریمی مقدم

درود.
برای معکوس کردن عدد اعشاری چون بحث موقعیت ممیز هم اضافه میشه، بهتر هست از توابع رشته ها استفاده کنید:
1. عدد رو با تابع str به رشته تبدیل کنید.
2. رشته رو معکوس کنید.
3. خروجی رو چاپ کنید.

str_number = str(12.42)
reverse_number = str_number[::-1]
print(reverse_number)

با این الگوریتم عددمون به 24.21 تبدیل میشه.

دنیا

برنامه ای بنویسید که یک عدد سه رقمی از کاربر بگیرد و در خروجی چاپ کند این عدد آینه است یا خیر؟(عدد
آینه ای عددی است که با مقلوبش با خودش برابر است به طور مثال 313 یک عدد آینه ای است)
لطفا این سوال رو حل کنید

نازنین کریمی مقدم

سلام. شما میتونید پیاده سازی مختلف برای چک کردن اینکه آینه ای هست یا نه رو از این لینک مشاهده کنید.
برای گرفتن عدد هم میتونید از تابع input استفاده کنید که در انتهای همین لینک توضیح داده شده.

ارسلان بزاز

سلام، چطور میشه این برنامه را بدون استفاده از حلقه ی تکرار و توابع برای عدد با طول دلخواه نوشت؟

عبدالرضا مولایی

سلام دوست عزیز، در داخل متن “روشی ساده در پایتون” آورده شده که با اون میتونید بدون حلقه‌ی تکرار این برنامه رو بنویسید.

abbas

کدش کار میکنه اما ب هیچ وجه نمیفهمم ک چطور مقلوب رو بر میگردونه وحتی همین روند رو دستی حساب کردم ما بازم ب نتیجه نمیرسم

نازنین کریمی مقدم

سلام. در این مقاله چندین روش بیان شده.
راجب کدومشون سوال دارید؟