تشخیص عدد آرمسترانگ در پایتون

متوسطحلقه

صورت سؤال

برنامه‌ای بنویسید که عدد صحیح مثبت n را از ورودی بخواند. اگر n عدد آرمسترانگ بود «آرمسترانگ است» و در غیر این صورت «آرمسترانگ نیست» را چاپ کند.

توان هر رقم به تعداد رقم‌های خود n بستگی دارد. برای عددی چهاررقمی مثل ۹۴۷۴ هر رقم به توان ۴ می‌رسد.

ورودی نمونه

153

خروجی نمونه

آرمسترانگ است

خودتان امتحان کنید

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

Ctrl + Enter
خروجی

کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.

راهنمایی

اول تعداد رقم‌ها را پیدا کنید؛ len(str(n)) ساده‌ترین راه است. بعد مثل تمرین مجموع ارقام، رقم‌ها را یکی‌یکی جدا کنید، هر کدام را به همان توان برسانید و جمع بزنید.

جواب و توضیح

بهتر است جواب را بعد از امتحان کردن راه خودتان باز کنید.

نمایش جواب
n = int(input())

digits = len(str(n))
total = 0
x = n
while x > 0:
    total += (x % 10) ** digits
    x //= 10

if total == n:
    print("آرمسترانگ است")
else:
    print("آرمسترانگ نیست")

این جواب چطور کار می‌کند؟

len(str(n)) عدد را به متن تبدیل می‌کند و طول آن را می‌گیرد که همان تعداد رقم‌ها است. این مقدار باید پیش از حلقه حساب شود، چون در حلقه عدد کم‌کم کوچک می‌شود.

حلقه روی x کار می‌کند، نه روی خود n، تا عدد اصلی برای مقایسهٔ آخر بماند. در هر دور، x % 10 رقم یکان را می‌دهد، ** آن را به توان می‌رساند و x //= 10 همان رقم را حذف می‌کند.

بعد از حلقه، total مجموع توان‌ها است و کافی است آن را با n مقایسه کنید. ۳۷۰ و ۳۷۱ و ۴۰۷ هم مثل ۱۵۳ آرمسترانگ هستند و می‌توانید برنامه را با آن‌ها امتحان کنید.

راه دوم: کار با رقم‌ها به شکل متن

s = input().strip()

total = sum(int(ch) ** len(s) for ch in s)

if total == int(s):
    print("آرمسترانگ است")
else:
    print("آرمسترانگ نیست")

در این نسخه هر حرف رشته یک رقم است و len(s) تعداد رقم‌ها را می‌دهد. sum همهٔ توان‌ها را در یک سطر جمع می‌زند. کد کوتاه‌تر است و همان نتیجه را می‌دهد.

اشتباه‌های رایج

  • همیشه به توان ۳ می‌رسانند، چون مثال معروف ۱۵۳ سه‌رقمی است، و عددهای چهاررقمی مثل ۹۴۷۴ را اشتباه تشخیص می‌دهند.
  • تعداد رقم‌ها را داخل حلقه و از روی عددی حساب می‌کنند که هر دور کوچک‌تر می‌شود.
  • خود n را در حلقه صفر می‌کنند و در مقایسهٔ آخر، total را با صفر مقایسه می‌کنند.

تمرین بعدی

پایتون را قدم‌به‌قدم یاد بگیرید

این تمرین یکی از تمرین‌های پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره می‌گیرد؛ درس‌های اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.