یکیاز مهمترین بخشها در یادگیری زبان برنامهنویسی پایتون در مراحل مقدماتی، آشنایی با شرطها، حلقهها و درنهایت حلقههای تو در تو است. یکی از رایجترین مباحث در تمرینات این بخش، ساخت الگوها و اشکال مختلف با علائم مختلفی چون «*» و «$» و «#» است.
اگر شما هم مانند بسیاری از نوآموزان زبان برنامهنویسی پایتون در پیادهسازی این اشکال با چالش مواجهاید، من قصد دارم در این مقاله منطق و اصول کلی برای کدنویسی تمام این اشکال را به شما آموزش دهم تا شما بتوانید یکبار برای همیشه این موضوع را به خوبی فرابگیرید و از آن در حل الگوهای مختلف استفاده کنید.
آنچه در این نوشته خواهیم داشت
اساس ساخت اشکال در زبان پایتون
۱) اساس این الگوها افزایش یا کاهش هرم است، مابقی اشکال از قبیل hill pattern، Diamond و… از ترکیب این اشکال به دست میآیند.
۲) اجرای کد از بالا به پایین و از چپ به راست است و خلاف جهت آن برنامه عمل نمیکند.
نکته: هیچ گونه پرش در ساخت اشکال وجود ندارد و فضاهای خالی نیز بر اساس آنچه در الگوریتم وجود دارد، چاپ می شوند.
ساخت الگوهای پایتون با حلقه های تو در تو
برای نوشتن کد الگوهای پایتون، پاسخ به این سوال اهمیت بالایی دارد.
سایز الگو چه قدر است. منظور من از سایز این است که الگوی ما از چند ردیف ساخته شده است. تعداد ردیفها در این دست الگوها همان عددی است که از کاربر تحت عنوان input میگیریم.
پس گام اول در ساخت این الگوها مشخص کردن اندازه الگوست که به دو روش انجام میگردد:
n = int(input(“enter a positive number:”))
def pattern (n)
استفاده از حلقههای تو در تو برای ساخت مربع
در این بخش نوشتن الگوریتم هرمهای مختلف با حلقههای تو در تو را با سادهترین شکل یعنی یک مربع آغاز میکنیم.
اگر از شما خواسته شود که یک ستاره در ترمینال چاپ کنید، کافی است دستور (“*”) 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()
جمع بندی
در این بخش از سری مقالات آموزش پایتون آکادمی آمانج یاد گرفتیم تا الگوهای مختلفی را در پایتون بنویسیم و با حلقههای تو در تو بیشتر آشنا شویم. همانطور که مشاهده فرمودید نوشتن کد این الگوها تماما بر اصول مشخصی استوار است. کافی است تا با منطق این الگوها آشنا شوید تا از پس هر سوالی بهراحتی بربیایید. اگر سوالی در رابطه با الگوهای بالا داشید و یا بخشی را متوجه نشدید حتما در انتهای مقاله سوالات خود را با ما در میان بگذارید. امیدوارم مطالعه این مقاله برای شما مفید باشد.
همش جواب نمیده
ممنون از آموزشتون خیلی برام مفید بود.