در این قسمت از مجموعه مقالات چگونه با پایتون برنامه بنویسیم، برنامه اعداد فیثاغورسی در پایتون را مینویسیم. ما با مثالی ساده شروع میکنیم و در ادامه آن را گسترش میدهیم. یک برنامه نویسی که در ابتدای کار است باید با روشهای مختلف حل مسئله آشنا شود، تا در مراحل بالاتر، به مشکل بر نخورد.
اگر شما از علاقمندان برنامه نویسی به خصوص پایتون هستید، پیشنهاد میکنیم این مقاله را تا انتها دنبال کنید.
نوشتن برنامه ی کاربردی با پایتون
برای آشنایی بیشتر با اعداد فیثاغورسی، ابتدا با یک برنامه ی ساده شروع میکنیم:
برنامه ای بنویسید که سه عدد صحیح از کاربر بگیرد، و اگر امکان ساخت یک مثلث قائم الزاویه با اضلاع داده شده، وجود داشته باشد، در خروجی "Yes" و در غیر این صورت "No" را چاپ کنید.
طبق روال اغلب برنامهها ، باید از کاربر ورودی بگیریم.برای حل این سوال، در ادامه به رابطه ی اضلاع و وتر مثلث قائم الزاویه و مفهوم اعداد فیثاغورسی میپردازیم.
اعداد فیثاغورسی چیست؟
قضیه فیثاغورس میگوید که در مثلث راست گوشه (قائم الزاویه) همیشه مجموع مربع دو ضلع، برابر با مربع وتر است. یعنی اگر a و b اضلاع دو ضلع مثلث راست گوشه و c وتر آن باشد، این رابطه برقرار است:
a2 + b2 = c2
بر همین اساس، اگر ما سه عدد داشته باشیم که رابطه ی بالا برای آن سه عدد برقرار باشد (یعنی مربع یکی از آنها برابر مجموع مربع دو عدد دیگر باشد) به این اعداد، سه تایی فیثاغورسی یا اعداد فیثاغورسی میگویند.
الگوریتم برنامه اعداد فیثاغورسی در پایتون:
سه عدد a و b و c را از کاربر بگیر.
اگر a2 = b2 + c2 یا b2 = a2 + c2 یا c2 = a2 + b2 باشد، پیام “Yes” را چاپ کن و به گام 4 برو.
پیام “No” را چاپ کن.
به اجرای الگوریتم پایان بده.
نوشتن کد برنامه اعداد فیثاغورسی در پایتون:
ابتدا با استفاده از دستور input ، سه ورودی عدد صحیح از کاربر دریافت میکنیم. به این صورت:
a = int(input("please Enter Number1: "))
b = int(input("please Enter Number2: "))
c = int(input("please Enter Number3: "))
سپس با استفاده از یک if، بررسی میکنیم که آیا مربع هر کدام از اعداد با مجموع مربع دو عدد دیگر برابر است یا نه. اگر شرط برقرار بود، پیام “Yes” و در غیر این صورت پیام “No” را چاپ میکنیم. به این صورت:
if a*a == b*b + c*c or b*b == c*c + a*a or c*c == a*a + b*b:
print("Yes")
else:
print("No")
ما میتوانیم هر یک از شروط را با دستور elif جداگانه بررسی کنیم. برای مثال:
اما این روش کد ما را شلوغ و ناخوانا میکند، لذا روش اول را انتخاب میکنیم. کد یکجای برنامه را در زیر ببینید:
a = int(input("please Enter Number1: "))
b = int(input("please Enter Number2: "))
c = int(input("please Enter Number3: "))
if a*a == b*b + c*c or b*b == c*c + a*a or c*c == a*a + b*b:
print("Yes")
else:
print("No")
گسترش دادن برنامه اعداد فیثاغورسی در پایتون:
برنامه ای بنویسید که اعداد فیثاغورسی کمتر از 100 را چاپ کند.
به دو فرمول زیر دقت کنید:
a2 + b2 = c2
(m2 - n2)2 + (2mn)2 = (m2 + n2)2
در فرمول دوم، عبارات داخل پرانتز معادل هر یک از حروف a و b و c در فرمول اول هستند، پس فقط با داشتن دو عدد خواهیم توانست بی نهایت اعداد فیثاغورسی بسازیم. برای مثال اگر m=3 و n=2 قرار دهیم، سه تایی 5 و 12 و 13 به دست میآید. اکنون از همین فرمول استفاده کرده و برنامه ی خواسته شده را مینویسیم.
الگوریتم اول برنامه اعداد فیثاغورسی در پایتون
مقدار 0 را در c قرار بده.
مقدار 2 را در m قرار بده.
مقدار 100 را در limits قرار بده.
در ازای مقادیر n از 1 تا m و افزایش یک واحد پس از اجرای حلقه، گامهای 5 تا 9 را تکرار و اجرا کن.
حاصل تفریق m به توان 2 از n به توان 2 را در a قرار بده.
حاصل 2 * m * n را در b قرار بده.
حاصل جمع m به توان 2 با n به توان 2 را در c قرار بده.
اگر c بزرگتر از limits است، از حلقه خارج شو.
مقادیر a و b و c را چاپ کن.
یک واحد به m اضافه کن و در m قرار بده.
اگر c کوچکتر از limits است، به گام 4 برگرد.
به اجرای الگوریتم خاتمه بده.
نوشتن کد برنامه اعداد فیثاغورسی در پایتون:
ابتدا سه متغیر c و m و limits را تعریف کرده و مقداردهی میکنیم. به این صورت:
c, m , limits = 0, 2, 100
سپس یک حلقه ی تکرار while مینویسیم که تا هنگامی که c کوچکتر از limits است، اجرا میشود. در داخل حلقه نیز حلقه ی for مینویسیم که از 1 تا m تکرار میشود. در انتها، یک واحد به m اضافه میکنیم. به این صورت:
while c < limits:
for n in range(1, m):
pass
m = m + 1
در حلقه ی for بالا، مقادیر a و b و c را از رابطه هایی که در فرمول بود، به دست میآوریم. به این صورت:
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
در ادامه با یک شرط بررسی میکنیم که اگر c بزرگتر از limits باشد، با استفاده از دستور break از حلقه خارج شویم. به این صورت:
if c > limits:
break
در انتهای حلقه ی داخلی for ، مقادیر a و b و c را چاپ میکنیم.
print(a, b, c)
با استفاده از فرمولی که داشتیم، ما توانستیم برنامه ای بنویسیم که اعداد فیثاغورسی کمتر از 100 را چاپ کند. کد یکجای برنامه را در زیر میبینید:
c, m , limits = 0, 2, 100
# Limiting c would limit
# all a, b and c
while c < limits :
# Now loop on n from 1 to m-1
for n in range(1, m) :
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
# if c is greater than
# limit then break it
if c > limits :
break
print(a, b, c)
m = m+1
الگویتم دوم برنامه اعداد فیثاغورسی در پایتون
در الگوریتم اول تعداد زیادی از اعداد فیثاغورسی، محاسبه و چاپ نمیشوند. در ادامه الگوریتمی را بررسی میکنیم که تعداد بیشتری از سه تاییهای فیثاغورسی را چاپ میکند.
مقدار 100 را در limits قرار بده.
در ازای مقادیر a از 1 تا limits و افزایش یک واحد پس از اجرا حلقه، گامهای 3 تا 8 را تکرار و اجرا کن.
یکی به a اضافه کن و در b قرار بده.
یکی به b اضافه کن و در c قرار بده.
تا وقتی c به توان 2 کوچکتر از حاصل جمع a به توان 2 با b به توان 2 است، یک واحد به c اضافه کن و در c قرار بده.
اگر حاصل جمع a به توان 2 با b به توان 2 برابر با c به توان 2 است و c کوچکتر مساوی limits است، مقادیر a و b و c را چاپ کن.
یکی به b اضافه کن و در b قرار بده.
اگر c کوچکتر مساوی limits است، به گام 3 برگرد.
به اجرای الگوریتم خاتمه بده.
نوشتن کد برنامه اعداد فیثاغورسی در پایتون:
نخست متغیر limits را تعریف کرده و مقدار 100 را به آن اختصاص میدهیم. این متغیر محدوده ی اعدادی که باید به دست بیاوریم را مشخص میکند.
limits = 100
سپس با یک حلقه ی تکرار for ، که از یک تا limits را پیمایش میکند، کار را ادامه میدهیم. در حلقه ابتدا دو متغیر b و c را تعریف کرده و به صورت زیر مقداردهی میکنیم.
for a in range(1, limits):
b = a+1
c = b+1
در ادامه ی حلقه ی for، یک حلقه ی تکرار while مینویسیم که تا وقتی c کوچکتر مساوی limits است، تکرار و اجرا شود. در حلقه ی while نیز یک حلقه ی while دیگر نوشته، که تا هنگامی که c*c کوچکتر از a*a + b*b است، یک واحد به c اضافه کند. به این صورت:
while c<=limits:
while c*c < a*a + b*b :
c = c+1
pass
به جای pass، در کد بالا با استفاده از یک if بررسی کرده اگر c کوچکتر مساوی limits و مربع c مساوی مجموع مربع a و b باشد، مقادیر a و b و c را چاپ میکنیم. در انتها نیز b را با یک جمع کرده و در خود b می ریزیم. به این صورت:
if c*c == a*a + b*b and c<=limits:
print(a, b, c)
b = b+1
اکنون کار کدنویسی این برنامه به پایان میرسد. این کد به نسبت بهینه شده است و از سرعت اجرای خوبی برخوردار است. کد یکجای این الگوریتم را در زیر ببینید:
limits = 100
for a in range(1, limits):
b = a+1
c = b+1
while c<=limits:
while c*c < a*a + b*b :
c = c+1
if c*c == a*a + b*b and c<=limits:
print(a, b, c)
b = b+1
جمع بندی
اغلب مسایل از راههای متفاوت و بسیاری حل میشوند، اما این به برنامه نویس بر میگردد که کدام راه حل را انتخاب کند. برنامه نویس میتواند بعد از هر کدی که مینویسد، با جستجو در اینترنت، با روشهای دیگر نوشتن همان کد آشنا شود. این گونه خلاقیت و قدرت تفکر او پرورش مییابد و به این طریق در مسایل دیگر، از قدرت تفکر و تجربه ی بالاتری برخوردار خواهد بود.
ما در این مقاله، سعی کردیم شما را با برنامه اعداد فیثاغورسی در پایتون آشنا کنیم. به طور قطع راه حلهای دیگری نیز وجود دارد، که برخی بهینه شده و برخی دیگر نیستند.
در قسمت بعدی، یک ماشین حساب ساده در پایتون را با شما خواهیم نوشت.
اگر به یادگیری بیشتر در زمینه ی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره ی آموزش پایتون توسعه وب در آینده میتونی اپلیکیشن موبایل و دستکتاپ بسازی و وارد حوزه ی هوش مصنوعی هم بشوی.
لطفا کد تشخیص مثلث قائم الزاویه رو در جواب همین دیدگاه بدید
Nazanin KarimiMoghaddam۲۹ آبان ۱۴۰۰، ۰۷:۱۰
درود
1. مقدار هریک از سه ضلع رو در یک متغیر جدا بریزید.
2. هرکدوم از این متغیرها رو به توان 2 برسونید.
3. متغیر بزرگتر را پیدا کنید.
4. اگر متغیر بزرگتر == جمع دو متغیر دیگر بود مثلث قائم الزاویه هست. در غیر اینصورت نیست.
شروع رایگان یادگیری برنامه نویسی
کلیک کنید 👇
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: