// Add scroll event listener window.addEventListener('scroll', function() { // Check scroll position if (window.scrollY >= 40) { // Perform your desired action here (function (s, e, n, d, er) { s['Sender'] = er; s[er] = s[er] || function () { (s[er].q = s[er].q || []).push(arguments) }, s[er].l = 1 * new Date(); var a = e.createElement(n), m = e.getElementsByTagName(n)[0]; a.async = 1; a.src = d; m.parentNode.insertBefore(a, m) })(window, document, 'script', 'https://cdn.sender.net/accounts_resources/universal.js', 'sender'); sender('986212f6399684') // You can replace the console.log statement with your own code } });

آموزش جامع الگوهای پایتون با حلقه های تو در تو (nested loop patterns)

ساخت الگو با حلقه های تو در تو

یکیاز مهم ترین بخش ها در یادگیری زبان برنامه نویسی پایتون در مراحل مقدماتی، آشنایی با شزط ها، حلقه ها و در نهایت حلقه های تو در تو است. یکی از رایج ترین مباحث در تمرینات این بخش، ساخت الگوها و اشکال مختلف با علائم مختلفی چون  «*» و «$» و «#»  است.

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

 

اساس ساخت اشکال در زبان پایتون

۱) اساس این الگوها افزایش یا کاهش هرم می باشد، مابقی اشکال از قبیل hill pattern، Diamond و… از ترکیب این اشکال به دست می آیند.

۲) اجرای کد از بالا به پایین و از چپ به راست است و خلاف جهت آن برنامه عمل نمی کند.  

نکته: هیچ گونه پرش در ساخت اشکال وجود ندارد و فضاهای خالی نیز بر اساس آنچه در الگوریتم وجود دارد، چاپ می شوند.

 

ساخت الگوهای پایتون با حلقه های تو در تو

برای نوشتن کد الگوهای پایتون، پاسخ به این سوال اهمیت بالایی دارد.

سایز الگو چه قدر است. منظور من از سایز این است که الگوی ما از چند ردیف ساخته شده است. تعداد ردیف ها در این دست الگوها همان عددی است که از کاربر تحت عنوان input  میگیریم.

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

n = int(input( “enter a positive number:”))

def pattern (n)

 

استفاده از حلقه های تو در تو برای ساخت مربع

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

اگر از شما خواسته شود که یک ستاره در ترمینال چاپ کنید. کافی است دستور (“*”) print  را اجرا کنید.

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

برای این کار ما می توانیم از کد زیر استفاده کنیم

n = 5

for i in range(n)

Print(“*”)

 

با استفاد از این حلقه ما در ۵ سطر متوالی ۱ ستاره مشاهده خواهیم کرد. اما ما می خواهیم در هر یک خط ۵ ستاره مشاهده کنیم بناابر این باید کد بالا را به کد زیر تغییر دهیم.

n = 5

for i in range(n)

Print(“*”, end= ” ")

 

حال اگر ما بخواهیم یک مربع یا ستاره درست کنیم کافی است این دو حلقه را در دو جهت افقی و عمودی با هم ترکیب کنیم.

بدین شکل:

for i in range(n)

for j in range(n)

print(“*”, end=" ")

 

کد نهایی:

size = 5

# Create a list of rows
for i in range(0, size):
    # Create a list of columns
    for j in range(0, size):
        print("*", end="")
    print()

 

نکته بسیار مهم: پس از پایان حلقه نیاز است تا یک ()print نیز خارج از لوپ قرار بگیرد تا بعد از چاپ یک خط، برنامه به خط بعدی حرکت کند.

نکته بسیار مهم ۲: برای اینکه مربع شما، تبدیل به مستطیل نشود حتما باید ”  “ = end  را در print قرار دهید اگر این عبارت وجود نداشته باشد، مربع شما به مستطیل تبدیل خواهد شد. پارامتر end نیز به شما این اطمینان را می دهد تا بعد از چاپ هر ستاره فاصله مشخصی تا ستاره بعدی به وجود بیاید.

نکته بسیار مهم ۳: شما در print می توانید به جای علامت *  از هر علامت دیگری استفاده کنید.

 

 increasing triangle

برای نوشتن این الگو، به کد قبلی نگاه کنید:

ما میدانیم که حلقه اول مربوط به ردیف ها و حلقه دوم مربوط به ستون هاست.

چون ما همچنان ۵ ردیف داریم پس حلقه بیرونی تغییر نمی کند اما ما در ستون های مختلف تعداد ستاره های متفاوتی در خروجی چاپ می کنیم بنابراین حلقه داخلی قطعا با تغییرات مواجه خواهد بود و هر سطر نسبت به سطر قبلی خودش یک ستاره بیشتر خواهد داشت. بنابر این حلقه داخلی به جای بازه n  در بازه  i+1 طی خواهد شد.

کد مثلث افزایشی:

# pyramid star pattern
n = 5
for i in range(1, n+1):
    for j in range(n - i):
        print(' ', end='')
    for k in range(2 * i - 1):
        print('*', end='')
    print()

 

 decreasing triangle

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

پس کد را به شکل زیر تغییر می دهیم.

# reverse pyramid pattern
n = 5

for i in range(1, n+1):
    # printing spaces
    for j in range(i-1):
        print(' ', end='')
    # printing stars
    for j in range(2*(n-i)+1):
        print('*', end='')
    print()

به مدل های دیگر الگوریتم های ستاره توجه کنید. تمام الگوریتم های دیگر حلقه های تو در تو بر همین اساس کد نویسی شده اند ترکیبی از مثلث هایی که شما فضای خالی یا ستاره هستند.

 

Left sided triangle

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

پس کد ما از سه حلقه تشکیل شده است. یک حلقه بیرونی که مانند تمامی مثال های قبلی بر تعداد سطرها دلالت می کند و دو حلقه درونی که ستون ها را با دو علامت فضای خالی و ستاره کامل می کند.

به کد زیر دقت کنید و خط به خط آن را دنبال کنید.

# Left triangle star pattern
n = 5

for i in range(1, n+1):
    # internal loop run for i times
    for k in range(1, i+1):
        print("*", end="")
    print()

 

Right sided triangle

این الگوریتم از دو بخش تشکیل شده است: مثلث کاهشی فضای خالی، مثلث افزایشی ستاره. بنابر این کافیست دو کد ساده مثال های قبل را با هم ترکیب کنیم و از یک حلقه خارجی و دو حلقه داخلی استفاده کنیم. به کد زیر توجه کنید:

# right triangle star pattern
size = 5
for i in range(size):
    for j in range(1, size - i):
        print(" ", end="")
    for k in range(0, i + 1):
        print("*", end="")
    print()

 

 

Hill pattern triangle

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

به کد زیر دقت کنید:

print('Hill Pattern\n')
n = 5
for i in range(n):
   for j in range(i,n):
       print(' ', end = ' ')

   for j in range(i):
        print('*' , end = ' ')

    for j in range(i+1):
        print('*' , end = ' ')

print()

 

Reverse hill triangle

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

print('Reverse Hill Pattern\n')
n = 5
for i in range(n):
   for j in range(i+1):
       print(' ', end = ' ')

   for j in range(i,n-1):
        print('*' , end = ' ')

    for j in range(i,n):
        print('*' , end = ' ')

print()

 

جمع بندی

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

 

 

آیا این مطلب برای شما مفید بود؟

امتیازشو ثبت کنید

میانگین / 5. تعداد رای

اولین نفر شما امتیاز دهید

نوشته شده توسط
علی سخا

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

2 دیدگاه

  1. همش جواب نمیده

  2. ممنون از آموزشتون خیلی برام مفید بود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *