برنامه اعداد فیثاغورسی در پایتون - چگونه با پایتون برنامه بنویسیم؟ قسمت سوم

برنامه اعداد فیثاغورسی در پایتون:

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

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

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


برای آشنایی بیشتر با اعداد فیثاغورسی، ابتدا با یک برنامه‌ی ساده شروع می‌کنیم:

برنامه‌ای بنویسید که سه عدد صحیح از کاربر بگیرد، و اگر امکان ساخت یک مثلث قائم‌الزاویه با اضلاع داده شده، وجود داشته باشد، در خروجی “Yes” و در غیر این صورت “No” را چاپ کنید.

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

برای حل این سوال، در ادامه به رابطه‌ی اضلاع و وتر مثلث قائم‌الزاویه و مفهوم اعداد فیثاغورسی می‌پردازیم.

اعداد فیثاغورسی چیست؟


قضیه فیثاغورس می‌گوید که در مثلث راست‌گوشه (قائم‌الزاویه) همیشه مجموع مربع دو ضلع، برابر با مربع وتر استیعنی اگر a و b اضلاع دو ضلع مثلث راست‌گوشه و c وتر آن باشد، این رابطه برقرار است:

a2 + b2 = c2

بر همین اساس، اگر ما سه عدد داشته باشیم که رابطه‌ی بالا برای آن سه عدد برقرار باشد (یعنی مربع یکی از آنها برابر مجموع مربع دو عدد دیگر باشد) به این اعداد، سه‌تایی فیثاغورسی یا اعداد فیثاغورسی می‌گویند.

الگوریتم برنامه اعداد فیثاغورسی در پایتون:

  1. سه عدد a و b و c را از کاربر بگیر.
  2. اگر a2 = b2 + c2 یا b2 = a2 + c2 یا  c2 = a2 + b2  باشد، پیام “Yes” را چاپ کن و به گام 4 برو.
  3. پیام “No” را چاپ کن.
  4. به اجرای الگوریتم پایان بده.

نوشتن کد برنامه اعداد فیثاغورسی در پایتون:


ابتدا با استفاده از دستور 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 جداگانه بررسی کنیم. برای مثال:

if a*a == b*b + c*c: 
    print("Yes")
elif b*b == c*c + a*a :
    print("Yes")
elif c*c == a*a + b*b:
    print("Yes")
else:
    print("No")

اما این روش کد ما را شلوغ و ناخوانا می‌کند، لذا روش اول را انتخاب می‌کنیم. کد یکجای برنامه را در زیر ببینید:

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 به دست می‌آید. اکنون از همین فرمول استفاده کرده و برنامه‌ی خواسته شده را می‌نویسیم.

الگوریتم اول برنامه اعداد فیثاغورسی در پایتون


  1. مقدار 0 را در c قرار بده.
  2. مقدار 2 را در m قرار بده.
  3. مقدار 100 را در limits قرار بده.
  4. در ازای مقادیر n از 1 تا m و افزایش یک واحد پس از اجرای حلقه، گام‌های 5 تا 9 را تکرار و اجرا کن.
  5. حاصل تفریق m به توان 2 از n به توان 2 را در a قرار بده.
  6. حاصل 2 * m * n را در b قرار بده.
  7. حاصل جمع m به توان 2 با n به توان 2 را در c قرار بده.
  8. اگر c بزرگتر از limits است، از حلقه خارج شو.
  9. مقادیر a و b و c را چاپ کن.
  10. یک واحد به m اضافه کن و در m قرار بده.
  11. اگر c کوچکتر از limits است، به گام 4 برگرد.
  12. به اجرای الگوریتم خاتمه بده.

نوشتن کد برنامه اعداد فیثاغورسی در پایتون:


ابتدا سه متغیر 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

الگویتم دوم برنامه اعداد فیثاغورسی در پایتون


در الگوریتم اول تعداد زیادی از اعداد فیثاغورسی، محاسبه و چاپ نمی‌شوند. در ادامه الگوریتمی را بررسی می‌کنیم که تعداد بیشتری از سه‌تایی‌های فیثاغورسی را چاپ می‌کند.

  1. مقدار 100 را در limits قرار بده.
  2. در ازای مقادیر a از 1 تا limits و افزایش یک واحد پس از اجرا حلقه، گام‌های 3 تا 8 را تکرار و اجرا کن.
  3. یکی به a اضافه کن و در b قرار بده.
  4. یکی به b اضافه کن و در c قرار بده.
  5. تا وقتی c به توان 2 کوچکتر از حاصل جمع a به توان 2 با b به توان 2 است، یک واحد به c اضافه کن و در c قرار بده.
  6. اگر حاصل جمع a به توان 2 با b به توان 2 برابر با c به توان 2 است و c کوچکتر مساوی limits است، مقادیر a و b و c را چاپ کن.
  7. یکی به b اضافه کن و در b قرار بده.
  8. اگر c کوچکتر مساوی limits است، به گام 3 برگرد.
  9. به اجرای الگوریتم خاتمه بده.

نوشتن کد برنامه اعداد فیثاغورسی در پایتون:


نخست متغیر 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

جمع بندی:

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

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

در قسمت بعدی، یک ماشین حساب ساده در پایتون را با شما خواهیم نوشت.

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

 
ارسال دیدگاه
ما همه سوالات و دیدگاه ها رو می خونیم و پاسخ میدیم
اولین بودن همیشه جذابه، همین الان اولین دیدگاه رو ثبت کن: