تشخیص عدد آرمسترانگ در پایتون
عدد آرمسترانگ عددی است که با مجموع رقمهایش برابر باشد، به شرطی که هر رقم به توان تعداد رقمها رسیده باشد. مثلاً ۱۵۳ سه رقم دارد و مکعب رقمهایش، یعنی ۱ و ۱۲۵ و ۲۷، روی هم ۱۵۳ میشود؛ پس ۱۵۳ آرمسترانگ است.
صورت سؤال
برنامهای بنویسید که عدد صحیح مثبت n را از ورودی بخواند. اگر n عدد آرمسترانگ بود «آرمسترانگ است» و در غیر این صورت «آرمسترانگ نیست» را چاپ کند.
توان هر رقم به تعداد رقمهای خود n بستگی دارد. برای عددی چهاررقمی مثل ۹۴۷۴ هر رقم به توان ۴ میرسد.
ورودی نمونه
153
خروجی نمونه
آرمسترانگ است
خودتان امتحان کنید
کد را در ویرایشگر زیر کامل کنید و اجرا کنید. ورودی نمونه در کادر ورودی آماده است و بعد از هر اجرا، خروجی شما با خروجی نمونه مقایسه میشود.
کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.
راهنمایی
اول تعداد رقمها را پیدا کنید؛ 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 را با صفر مقایسه میکنند.
تمرین بعدی
پایتون را قدمبهقدم یاد بگیرید
این تمرین یکی از تمرینهای پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره میگیرد؛ درسهای اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.