رشن | خدمات میزبانی وب

حل مسئله دوم اویلر با پایتون

پروژه اویلر یا Project Euler جزو مسائل و پروژه‌هایی در دنیای اینترنت هستند که مسائل را شما به هر زبان برنامه‌نویسی و به هر شکلی می‌توانید حل کنید اما مهم این است که پاسخ نهایی صحیح باشد. مسائل اویلر را در سایت Project Euler می‌توانید مشاهده کنید. من در این مطلب اولین مسئله را برای شما حل می‌کنم.

مطلوب مسئله به زبان انگلیسی

مطلوب مسئله به زبان انگلیسی را ابتدا ببینیم:

نقل قول

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2 the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

مطلوب مسئله به زبان فارسی

مطلوب مسئله به زبان فارسی را حالا بررسی کنیم:

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

توضیح در مورد دنباله فیبوناچی نیز لازم است بدهیم که این دنباله با اعداد ۱ و ۲ شروع می‌شود که حاصل جمع این دو می‌شود عدد ۳، و سپس دو عدد ۲ و ۳ با هم جمع می‌شوند که برابر می‌شود با ۵ و به همین شکل تا بی‌نهایت ادامه پیدا می‌کند.

راه‌حل

راه حل چیست؟ با هم پیش برویم تا مسئله را حل کنیم.

برای این کار ابتدا یک تابع می‌نویسیم که اصلا ببینیم پایتون زوج بودن عدد را که یکی از مطلوب های مسئله هست درست تشخیص می‌دهد یا خیر:

Python
def is_even(n):
if n % 2 == 0:
return True
else:
return False

حالا کافی است که تابع را یک بار صدا بزنیم تا ببینیم درست کار می‌کند.

Python
is_even(4)
is_even(9)

خروجی:

Code
True
Flase

پس تابع الان درست کار می‌کند.

حالا من سه متغیر تعریف می‌کنم تا عدد اول، عدد دوم و جمع دو عدد را در خودش ذخیره کند.

Python
first = 1
second = 2
jam = 0

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

در حلقه while شرط می‌گذاریم تا زمانی که متغیر first از عدد چهار میلیون کوچک‌تر بود این حلقه ادامه پیدا کند. سپس شرط دیگری می‌گذاریم که اگر عدد first زود بود با متغیر jam جمع شود و jam آپدیت شود.

بعد هم متغیر جدیدی به نام new می‌سازیم که دو عدد قبلی را با هم جمع ببندد.

سپس در تکرار بعدی، عدد first را برابر با second قرار می‌دهیم و عدد second را هم تعریف می‌کنیم که عدد جدید ما باشد.

در پایان هم نتیجه نهایی را پرینت می‌کنیم که به عدد 4613732 می‌رسیم.

اما برای عیب‌یابی و کوچک کردن خروجی می‌توانیم از عدد کوچک‌تری در این حلقه استفاده کنیم و بعضی جا ها هم تابع print را صدا بزنیم که خروجی‌ها را ببینیم.

Python
while first < 40:
if is_even(first):
print(f'first number is {first}')
sum = sum + first
print(f'sum number is {sum}')
new = first + second
first = second
second = new

خروجی:

Code
first number is 2
sum number is 2
first number is 8
sum number is 10
first number is 34
sum number is 44
total sum is 44

همان‌طور که می‌بینید عدد آخر ما ۳۴ هست که از ۴۰ کوچک‌تر هست طبیعتا و حلقه دیگر ادامه پیدا نکرد و ۴۴ هم جمع ۱۰ و ۳۴ هست که دو عدد آخر هستند.

نظرات