حالا که با نحوه کار با پایتون آشنا شدید، زمان آن رسیده که کمی کار گرافیکی انجام دهید. قصد داریم در ادامه با استفاده از ابزاری به نام «turtle» یک دانه برف بسازیم.
turtle که در اصل رباتهایی شبیه به لاکپشت هستند، برای حرکت در یک خط مستقیم، چرخش و بلند کردن و پایین آوردن قلم طراحی شدهاند. ورژن دیجیتالی turtle در واقع کار کشیدن یا متوقف کردن رسم یک خط را بر عهده دارد. پایتون برخلاف برخی از زبانهای برنامهنویسی مانند لوگو، ابزار turtle را ندارد اما میتوان با اضافه کردن کتابخانهای، از این ابزار در پایتون هم استفاده کرد.
کتابخانهها، پکیجها یا بستههایی هستند که با اضافه کردن دستورالعملهای جدید، قابلیتهای پایتون را گسترش میدهند. کتابخانهها را با استفاده از دستور import میتوان به برنامهها اضافه کرد. نهایتاً برای ساخت یک برنامه جدید بر روی آیکون New (+) کلیک کنید و سپس کد زیر را تایپ کنید:
|
1 |
import turtle |
برای استفاده از دستورات موجود در یک کتابخانه باید ابتدا نام کتابخانه را به همراه یک نقطه وارد و سپس نام دستور را تایپ کنید. اینکه هر بار مجبور باشید این کار را تکرار کنید، آزاردهنده است. برای سادهسازی این فرایند میتوانید یک نام کوتاهتر به متغیر اختصاص دهید (این نام اختصاری میتواند فقط یک حرف باشد). با این حال در ادامه از کد زیر استفاده میکنیم:
|
1 |
pat = turtle.Turtle() |
برای اینکه بتوانید برنامه را تست کنید، باید به لاکپشت بگویید که کاری انجام دهد؛ بنابراین کد زیر را تایپ کنید:
|
1 |
pat.forward(100) |
برای اجرای برنامه، روی آیکون Run کلیک کنید و برنامه را با نام «Turtle Snowflakes» ذخیره کنید. پس از ذخیره برنامه، یک پنجره جدید به اسم Turtle Graphics ظاهر میشود و سپس خروجی برنامه را مشاهده میکنید:
لاک پشت 100 واحد به جلو حرکت میکند و یک خط مستقیم رسم میکند (شکل 1-7).

شکل 7-1: Turtle برای کشیدن یک خط مستقیم به جلو حرکت میکند
برای بازگشت به پنجره اصلی Thonny (در صورتی که پشت پنجره Turtle Graphics مخفی شده باشد) میتوانید روی دکمه minimize در پنجره Turtle Graphics کلیک کنید یا میتوانید روی آیکون Thonny entry در نوار وظیفه/ task bar در بالای صفحه کلیک و بعد روی دکمه Stop کلیک کنید تا پنجره Turtle Graphics بسته شود.
قطعاً اینکه هر بار یک دستور حرکتی را تایپ کنید، خستهکننده است، بنابراین کاری که میکنیم این است که خط 3 را حذف و یک حلقه تعریف میکنیم تا کار رسم شکل را انجام دهد:
|
1 2 3 4 5 6 7 8 9 |
for i in range(2): pat.forward(100) pat.right(60) pat.forward(100) pat.right(120) |
برنامه را اجرا کنید تا Pat شروع به رسم یک متوازیالاضلاع ساده کند (شکل7-2).

شکل 7-2: با ترکیب چرخشها و جابجاییها، اشکال مختلفی میتوانید رسم کنید.
برای تبدیل این شکل به یک دانه برف، روی آیکون Stop در پنجره اصلی Thonny کلیک کنید و سپس یک حلقه جدید تعریف کنید به گونهای که حلقه قبلی را در بربگیرد. خط زیر را جایگزین خط 3 کنید تا یک حلقه تو در تو ایجاد شود:
|
1 |
for i in range(10): |
برای کامل کردن برنامه، در انتها کد زیر را اضافه کنید:
|
1 |
pat.right(36) |
توجه کنید که برنامه به این شکل اجرا نخواهد شد، زیرا تورفتگی درستی در حلقه وجود ندارد. برای رفع این مشکل، ابتدای هر خط در حلقه کلیک کنید (خطوط 4 تا 8) و کلید SPACE را چهار بار فشار دهید تا تورفتگی به شکل صحیحی اصلاح شد. حال برنامه باید به این شکل باشد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import turtle pat = turtle.Turtle() for i in range(10): for i in range(2): pat.forward(100) pat.right(60) pat.forward(100) pat.right(120) pat.right(36) |
روی آیکون Run کلیک کنید و ببینید turtle چه میکند: لاکپشت همانند قبل یک متوازیالاضلاع رسم خواهد کرد. با این تفاوت که وقتی رسم آن تمام شد، 36 درجه میچرخد و یک متوازیالاضلاع دیگر رسم خواهد کرد. این کار یکی پس از دیگری ادامه خواهد یافت تا ده متوازیالاضلاع روی هم رسم شود. حال این شکل کمی شبیه به یک دانه برف است (شکل 10-5).

شکل 7-3: تکرار شکل برای ساخت شکل های پیچیدهتر
لاکپشت روباتیک میتواند تنها با یک رنگ روی یک کاغذ بزرگ ترسیم کند اما لاکپشت شبیهسازی شده در پایتون میتواند با طیف گستردهای از رنگها، اشکال مختلف ترسیم کند. بدین منظور دو خط جدید به گونهای اضافه میکنیم که خطهای 3 و 4، به دو خط پایینتر منتقل شوند:
|
1 2 3 |
turtle.Screen().bgcolor("blue") pat.color("cyan") |
برنامه را دوباره اجرا کنید و ببینید با توجه به کد جدید، چطور عمل میکند:
همانطور که میبینید رنگ پسزمینه پنجره Turtle Graphics به آبی تغییر کرده و دانه برف فیروزهای شده است

شکل 7-4: تغییر رنگ پسزمینه و دانههای برف
کار دیگری که میتوانید انجام دهید این است که با استفاده از کتابخانه random، رنگها را به صورت تصادفی انتخاب کنید. به برنامه برگردید و خط زیر را به عنوان خط 2 اضافه کنید:
|
1 |
import random |
رنگ پسزمینه را در خط 4 که در حال حاضر blue است به grey تغییر دهید، سپس یک متغیر جدید به نام colours در خط 5 تعریف کنید:
|
1 |
colours = ["cyan", "purple", "white", "blue"] |
در بسیاری از زبانهای برنامهنویسی، ازجمله پایتون، املای آمریکایی کلمات مد نظر قرار دارد. به عنوان مثال برای تغییر رنگ قلم لاکپشت، عبارت color تایپ میشود. حال اگر این دستور به شیوه انگلیسی بریتانیایی یعنی colour نوشته شود، در سادهترین حالت برنامه کار نمیکند؛ اما در مورد متغیرها، انعطاف بیشتری وجود دارد. میتوانید متغیرها را هر طور که دوست دارید، نامگذاری کنید. به همین دلیل میتوانید یک متغیر جدید به نام colours (با املای بریتانیایی) تعریف کنید. این موضوع در پایتون هم قابل قبول است، زیرا نامگذاری متغیرها قوانین املایی مشخص، ندارد.
این نوع متغیر به عنوان لیست شناخته میشود و با کروشهها مشخص میشود. در این مورد، لیست با رنگهای ممکن برای بخشهای مختلف دانه برف پر شده است. با این حال باز هم لازم است که به پایتون بگویید هر بار که حلقه تکرار میشود، یکی را انتخاب کند. در انتهای برنامه، دستور زیر را وارد کنید. برای اینکه این دستور بخشی از حلقه بیرونی باشد، مطمئن شوید که چهار فاصله تورفتگی را لحاظ کردهاید، دقیقاً مانند خط بالای آن:
|
1 |
pat.color(random.choice(colours)) |
روی آیکون Run کلیک کنید. خواهید دید که دانه برف دوباره رسم خواهد شد. این بار پایتون یک رنگ تصادفی از لیست انتخاب میکند و هر گلبرگ را رسم میکند. به این صورت در پایان یک دانه برف چندرنگ زیبا میبینید (شکل 7-5).

شکل 7-5: استفاده از رنگهای تصادفی برای رسم هر گلبرگ
برای اینکه دانه برف کمتر شبیه ستاره نینجا و بیشتر شبیه یک دانه برف واقعی باشد، یک خط جدید به عنوان خط 6، دقیقاً زیر لیست colours اضافه کنید و بعد عبارت زیر را تایپ کنید:
|
1 2 3 4 5 6 7 |
pat.penup() pat.forward(90) pat.left(45) pat.pendown() |
اگر دستورهای penup و pendown را به یک ربات لاکپشت بدهید، ربات قلم را از روی کاغذ بلند میکند و دوباره روی کاغذ میگذارد، اما در دنیای مجازی لاکپشت رسم خطوط را متوقف کرده و دوباره شروع میکند. این بار، به جای استفاده از یک حلقه، قصد داریم یک تابع تعریف کنیم. تابع بخشی از کد است که میتوانید در هر زمان آن را فراخوانی کنید.
ابتدا کدی که برای رسم دانههای برف با چندین متوازیالاضلاع بود را حذف کنید. دقت کنید که این حذف کردن شامل همه چیز ازجمله دستور pat.color(“cyan”) در خط 10 تا دستور pat.right(36) در خط 17 میشود. حال دستور pat.color(random.choice(colours)) را تایپ کنید و یک علامت هشتگ (#) در ابتدای آن اضافه کنید. از علامت # برای کامنتگذاری روی یک دستور استفاده میشود و به این معناست که میتوانید توضیحاتی را به کد اضافه کنید. این کار باعث میشود وقتی پس از مدتی به برنامه باز میگردید یا آن را برای فرد دیگر ارسال میکنید، کدهایی که نوشتهاید راحتتر درک شوند.
ابتدا یک تابع به نام branch تعریف کنید. برای این منظور دستور زیر را در خط 10 و زیر دستور pat.pendown() تایپ کنید:
|
1 |
def branch(): |
به این صورت یک تابع به اسم branch تعریف میشود. وقتی کلید ENTER را فشار دهید، Thonny به طور خودکار برای دستورات تورفتگی را اضافه میکند. دستورالعملهای زیر را تایپ و به تورفتگیها (indentation) توجه کنید. چون در یک نقطه قرار است که کد سه سطح تورفتگی تودرتو داشته باشد.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
for i in range(3): for i in range(3): pat.forward(30) pat.backward(30) pat.right(45) pat.left(90) pat.backward(30) pat.left(45) pat.right(90) pat.forward(90) |
در نهایت، یک حلقه جدید در انتهای برنامه و بالای خط دارای کامنت colour تعریف کنید. هدف از این کار فراخوانی و اجرای تابع جدید است.
|
1 2 3 4 5 |
for i in range(8): branch() pat.left(45) |
در نهایت برنامه شما باید به این شکل باشد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import turtle import random pat = turtle.Turtle() turtle.Screen().bgcolor("grey") colours = ["cyan", "purple", "white", "blue"] pat.penup() pat.forward(90) pat.left(45) pat.pendown() def branch(): for i in range(3): for i in range(3): pat.forward(30) pat.backward(30) pat.right(45) pat.left(90) pat.backward(30) pat.left(45) pat.right(90) pat.forward(90) for i in range(8): branch() pat.left(45) # pat.color(random.choice(colours)) |
روی دکمه Run کلیک کنید و ببینید که Pat چگونه طبق کدی که نوشتید، عمل میکند.
تبریک میگویم: دانه برف شما خیلی بیشتر از قبل شبیه یک دانه برف شده است (شکل 7-6)!

شکل 7-6: branche های بیشتر سبب میشوند که شکل شما خیلی بیشتر شبیه دانههای برف باشد.
آیا میتوانید branche هایی با رنگهای مختلف رسم کنید؟ آیا میتوانید یک تابع به نام snowflake تعریف کنید و از آن برای رسم تعداد زیادی دانه برف بر روی صفحه استفاده کنید؟ آیا میتوانید برنامه را طوری تنظیم کنید که اندازه و رنگ دانههای برف را به صورت تصادفی تغییر دهد؟
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.