پرتقال
orange
۷ تیر ۱۳۹۹

آموزش مقدماتی پایتون برای تازه کارها

3
telegram twitter
آموزش مقدماتی پایتون برای تازه کارها

آموزش مقدماتی پایتون برای تازه کارها

 

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


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

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

اگر پیش بردن پروژه برایتان آسان نبود ناامید نشوید و به این فکر کنید که فقط شما نیستید که مشکل دارید، لازم نیست که پروژه برنامه نویسی تان به یک چالش سخت و روی مخ برای شما تبدیل شود! فقط هر وقت که به مشکلی خوردید کافیست از دید دیگری به برنامه نگاه کنید.

 

در این مقاله آموزشی موارد زیر را یاد میگیرید:
-اجرای پایتون
-کمک بگیرید!
-متغیر ها 
-نوع داده ها
-کنترل کننده ها (مثل حلقه ها و شرط ها)
-توابع

اجرای پایتون

اگر از لینوکس یا مک استفاده میکنید، خیلی خوش شانس هستید! پایتون به احتمال 99 درصد روی سیستم شما نصب است، کافی است در ترمینال عبارت python را تایپ کنید و اینتر را فشار دهید. سپس میتوانید پایتون بنویسید! 

اما اگر ویندوز نصب دارید، باید به سایت python.org و سپس نسخه مخصوص به ویندوزتان را دانلود و نصب کنید. نصب پایتون هم خیلی ساده است فقط دقت کنید که در هنگام نصب تیک گزینه Add python to path را بگذارید.

اگر پایتون را درست نصب کرده باشید (یا نصب باشد) وقتی در ترمینال یا cmd عبارت python را بنویسید و اینتر بزنید باید چیزی به این شکل ببینید:

آموزش پایتون

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

حالا شما آماده هستید که پایتون کار کنید و یاد بگیرید. بخش بعدی: کمک گرفتن از پایتون!

 


کمک بگیرید!


خوشبختانه پایتون در کمک کردن به شما خیلی مشتاق است! فقط کافی است بنویسید help() و در پرانتز چیزی بنویسید که میخواهید در مورد آن بدانید. سپس مفسر میفهمد و توضیحاتی را به شما ارائه میدهد. برای آشنایی از نحوه عملکرد چیزی که اینجا گفته شد یک مثال ببینید:

آموزش مقدماتی پایتون

 

در اینجا اصلا نیازی نیست بدانید که len چه چیزی بود که در موردش ما از پایتون کمک خواستیم. فقط کافی است یاد بگیرید که help() چگونه کار میکند.

خب ... بدون هیچ سردرگمی به بخش بعدی میرویم: متغیر ها


متغیر ها 


اگر قبل از پایتون، زبان برنامه نویسی دیگری کار کرده باشید ممکن است با مفهوم متغیرها آشنا باشید اما اگر برای اولین بار است چنین اسمی را میشنوید نگران نباشید! چون متغیرها یک چیز خیلی ساده در برنامه نویسی در تمام زبان ها است.

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

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


آموزش پایتون به تازه کار ها

اگر شما این برنامه را بنویسید (دقت کنید که <<< را تایپ نکنید!) و اینتر را فشار دهید، برنامه از شما شکایت میکند! چون نمیداند name چیست. اما اگر برای مثال مقدار name را ali قرار دهید برنامه به ali سلام میکند! Hello Ali. بدون اینکه در کد بالا تغییری ایجاد کنید.

در واقع با این کار ما مقدار name را به برنامه میفهمانیم.


 "name = "Ali<<<

اجازه ندهید علامت = شما را گول بزند که name با Ali برابر است! اینطور نیست. در واقع ما با علامت = میگوییم که رشته Ali در متغیر name ذخیره شده است. به این کار میگویند مقدار دهی.

حالا اگر سعی کنید دستور print اجرا کنید، مفسر دیگر میداند منظور شما از name چیست و بدون خطا کار میکند و به شما خروجی Hello Ali را می دهد. 


نوع داده ها 


نوع داده یا Data Type چیزهایی هستند که مفسر میتواند ماهیت آنها را درک کند، در بخش قبلی یک جورهایی با String ها آشنا شدیم و یک داده به این نوع در یک متغیر هم ذخیره کردیم.

متغیرهای String در واقع هر چیز متنی را شامل میشوند، دقت کنید حتی یک عدد هم میتواند به عنوان متغیر رشته ای یا String ذخیره شود فقط تفاوتی که در حالت متغیر عددی با متغیر رشته ای دارد این است که نمیتوانید  عملیات ریاضی روی آنها اعمال کنید.

در پایتون نوع داده های دیگری هم وجود دارند که در ادامه به معرفی برخی از آنها میپردازیم:

None
None یعنی هیچ! برنامه نویس از این نوع داده وقتی استفاده میکنند که فعلا نمیداند چه چیزی در متغیر قرار دهد یا میخواهد مقدار داخل متغیر خالی باشد. 

Booleans
متغیرهایی که از نوع بولین هستند فقط دو مقدار میپذیرند: True و False. و برای مواقعی استفاده میشود که بخواهیم بگوییم چیزی درست است یا غلط.

Integers/floats
مطمئنم با اینها آشنایی دارید! integer در واقع همان اعداد صحیح است. مثل -1، 1، 1399و... اما 1.2 دیگر یک عدد صحیح حساب نمیشود برای این اعداد نوع داده دیگری به نام float یا همان اعداد اعشاری داریم.

با تمامی این اعداد میتوانید عملیات ریاضی انجام دهید و هیچ محدودیتی ندارید و همینطور میتوانید با یک متغیر که یک عدد صحیح یا اعشاری داخل آن ذخیره شده و یک عدد (بدون متغیر) هم میتوانید عملیات ریاضی انجام دهید.

لیست ها یکی از نوع داده های پراستفاده در پایتون است و واقعا به سادگی آن چیزی است که گفته میشود، لیست ها دقیقا لیستی از چیزها هستند!

در لیست ها شما میتوانید هر عدد و هر رشته یا حتی هر لیست دیگری را بگذارید، لیست ها با علامت براکت [] مشخص میشوند. یک مثال از تعریف لیست ها ببینید:


لیست ها در پایتون


همانطور که میبینید در لیست بالا از 4 نوع داده مختلف داریم و جالب است بدانید لیست ها حتی میتوانند حاوی محتویات خودشان باشند! (اگر چه این کار به ندرت انجام میشود و نیازی به دانستن آن ندارید.)

شما میتوانید دو لیست را به هم اضافه کنید، یا چیزهایی به یک لیست اضافه یا حذف کنید و... حتی میتوانید به متغیرخاصی در یک لیست هم اشاره کنید.

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


[my_list[0]

مفسر به شما عدد 1 را میدهد.

نوع دیگری از داده ها در پایتون وجود دارد به اسم تاپل (tuple) که در واقع همان لیست است با این تفاوت که مقدارهای درون آن نمیتوانند عوض شوند.

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

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

دیکشنری ها با براکت های فرفری یا {} تعریف میشوند! 

نوع داده ها در پایتون

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

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

چیزی به اسم اولین و آخرین و به عبارت دیگر چیزی به اسم ترتیب در دیکشنری ها وجود ندارد! 

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

 

کنترل کننده ها (مثل حلقه ها و شرط ها)


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

ممکن است یک سری کدها بنویسید که فقط در یک سری شرایط اجرا شود و یا کدهایی بنویسید که چندین بار اجرا شوند. اینجاست که کنترل کننده ها به میدان می آیند!

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

Blocks

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

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

به مثال زیر توجه کنید، لازم نیست بدانید چه کار انجام میدهند فقط هدف این است که بفهمید منظور از تو رفتگی ها و بیرون آمدگی ها چیست:

آموزش پایتون برای تازه کارها


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

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

if
دستور if یکی از کنترل کننده هاست که همانطور که از اسمش پیداست برای تعریف شرط استفاده میشود.

if یعنی اگر کاری درست (true) بود آنرا انجام بده و اگر نه (false) یا از شرط خارج شو و یا کار دیگری را انجام بده. علامت = را یادتان هست؟ گفتیم برای مقدار دهی به متغیرها استفاده میشود؟

حالا اگر بخواهیم شرط بگذاریم اگر چیزی با چیز دیگری برابر بود باید چکار کنیم؟ مطمئنا نمیتوانیم از = استفاده کنیم چون این علامت برای مقداردهی استفاده میشود. در این صورت ما باید از دو تا علامت مساوی به این شکل == استفاده کنیم تا شرط برابر بودن را بررسی کنیم.

برای مثال شرط 1==2 . اگر این دستور را در پایتون وارد کنید چه میبینید؟ false! چون 1 با 2 برابر نیست.

نحو نوشتن شرط با if بسیار ساده است. فقط کافیست بنویسید if بعد یک فاصله بگذارید و شرط تان را بنویسید و سپس یک دو نقطه ( : ) و سپس اینتر را بزنید.

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

بلاک اول که بعد از دستور if شروع میشود برای موقعی است که شرط برقرار باشد، بعد از اینکه این بلاک تمام شد شما میتوانید یک بلاک دیگر با else برای موقعی که شرط درست نبود ایجاد کنید. 
آموزش پایتون
اتفاقی که در این کد می افتد این است که شرط بررسی میکند ببیند که آیا متغیر name مقدارش دقیقا برابر John است یا خیر. که در اینجا میبینیم که هست و شرط وارد بلاک True میشود.

اگر این اتفاق نمی افتاد یعنی متغیر name چیز دیگری بود، شرط وارد بلاک False میشد و پیام I don't even know who you are any more. برای شما چاپ میشد.

وقتی که شرط درست است، انگار بخش  else بی فایده است. پس کد به این شکل میشود: 


آموزش مقدماتی پایتون در یک روز
بدیهی است که اگر در این کد متغیر name برابر John نبود اتفاق نمی افتاد.

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


آموزش سیر تا پیاز پایتون

برای مثال فرض کنید مقدار متغیر dollars ما برابر 2000 باشد. چه اتفاقی می افتد وقتی این برنامه را اجرا کنیم؟؟ 


آموزش پایتون به تازه کار ها-2
هر سه شرط اجرا شد! چرا ؟؟ چون تمام شرط ها با در نظر گرفتن 2000 دلار، درست از آب در آمد و همه شان اجرا شد! اما ما گاهی نیاز داریم که فقط یک شرط اجرا شود و بقیه شرط ها دیگر اجرا نشوند. اینجاست که باید از دستور جادویی elif استفاده کنیم! 


آموزش برنامه نویسی پایتون مقدماتی

دستور elif تا زمانی ادامه به کارش میدهد تا بالاخره یک شرط درست باشد و بعد از آن شرط تمام میشود. در این نوع شرط نویسی بلوک else وقتی اجرا میشود که تمام شرط ها غلط باشند. 


while

حلقه  while از لحاظ کاری که انجام میدهد خیلی شبیه به دستور if است منتها بلاک کد فقط یک بار اجرا نمیشود بلکه تا وقتی که شرط while درست است کدهای درون بلاک تکرار میشوند. 


حلقه while در پایتون
خروجی این کد چیزی شبیه زیر میشود:


آموزش برنامه نویسی پایتون از مقدماتی تا پیشرفته
هیچ چیز خارق العاده ای رخ نداد! بطری ها از 9 شروع شدند و یکی یکی کم شدند تا که به صفر رسیدند. همچنین شما میتوانید با دستور break هر وقت که خواستید از حلقه خارج شوید. به مثال توجه کنید:


آموزش پایتون
در اینجا هم هیچ چیز جادویی اتفاق نیوفتاد! حلقه فقط تا بطری شماره 5 میشمارد و سپس از حلقه خارج میشود. هدف در این تمرین این بود که کاربرد break را یاد بگیرید و بتوانید از آن در برنامه های خودتان استفاده کنید. 


for


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

یک چیز جالب که در مورد پایتون بدانید این است که در پایتون میتوانید روی رشته ها و لیست ها و دیکشنری ها بخزید! خزیدن یعنی چه؟ یعنی تک تک عناصر آنها را به صورت جداگانه چاپ کنید. و این کار را شما با حلقه for میتوانید انجام دهید. مثال ببینید:


آموزش مقدماتی پایتون

این کد چیزی که در خروجی به ما میدهد چنین چیزی است:


آموزش پایتون برای تازه کار ها
دیدید چه راحت کار کرد؟! نه نیازی به شمارنده بود، نه نیازی بود که داده ها را در جایی ذخیره کنیم یا چیز دیگری... فقط از حلقه for استفاده کردیم و آن همه کارها را برای ما انجام داد! 
حلقه for هم مثل حلقه while از دستورهای else و break هم پشتیبانی میکند:


آموزش پایتون به صورت مقدماتی
در خروجی این برنامه، اگر برنامه کلمه را در لیست پیدا کند تایپ میکند Found it! و از حلقه خارج میشود و اگر پیدا نکند تایپ میکند it’s not in there. اگر همین برنامه را با while بنویسید میبینید که چقدر همه چیز پیچیده تر میشود! 


کنترل روی لیست ها


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

با همین موارد خواهید دید که چه کارهایی میشود انجام داد! مثالی میزنیم. شما میخواهید تمامی عناصری که در یک لیست قرار دارند را ضربدر 3 بکنید. اگر بخواهید این کار را تنهایی با for انجام دهید حداقل باید 3 خط کد بنویسید! اما با این کاری که اینجا میبینید فقط در یک خط تمام این کارها را انجام میدهید:


آموزش پایتون
این کار میتواند در بیشتر موارد کدهای شما را هوشمندانه تر و خواناتر بکند. جادو در اینجا متوقف نمیشود!

شما میتوانید این کار را با فیلترهای بیشتری هم انجام دهید. مثلا میتوانیم بگوییم فقط اعداد زوج را سه برابر کند و نمایش بده! (اعداد زوج اعدادی هستند که باقی مانده تقسیم آنها بر 2 صفر باشد.):


آموزش مقدماتی پایتون

به پایان این بخش رسیدیم اما این بخش هیچوقت برای شما نباید به پایان برسد! همینطور که برنامه نویسی میکنید به راه های دیگری که میتوانید روی داده های کنترل انجام دهید فکر کنید و آنها را به کار ببرید. همیشه سعی کنید هوشمندانه کد بنویسید. بخش بعدی: توابع

 


توابع


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

خوبی تابع ها این است که فقط یک بار مینویسید و هربار که خواستید دیگر فقط آن را صدا میزنید تا کار کند.. به همین سادگی.

برای مثال بیایید یک تابع بنویسیم که یک عدد بگیرد و آن را سه برابر کند و به ما نشان دهد! توابع را با کلمه کلیدی def تعریف میکنند سپس اسم تابع را مینویسیم (دلخواه میتواند هر چیزی باشد) و سپس جلوی آن یک پرانتز میگذارید و در پرانتز باید داده هایی که در تابع نیاز دارید را بنویسید (که به آنها آرگومان هم میگویند).

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

کلمه کلیدی دیگری در هنگام کار با تابع ها میبینید که برای بازگشت دادن خروجی های تابع استفاده میشود: return و در مثال زیر کاربرد آن را میبینید:


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


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

خارج کردن چند متغیر از یک تابع


شاید از خودتان بپرسید که آیا میشود چند داده از یک تابع بیرون کشید؟ پاسخ بله است! در مثال پایین ببینید:

آموزش
بعد از اجرای این کد متغیر های one و two و three به ترتیب مقدار های 1 و 2 و 3 را در خود ذخیره میکنند. 

بیشتر در مورد آرگومان ها

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

آموزش پایتون 5


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

آموزش پایتون 6

سخنان پایانی 


اکنون شما یک دید کلی از زبان برنامه نویسی پایتون دارید. تمامی مفاهیمی که در پایتون مقدماتی لازم است بدانید را دارید و اگر این مفاهیم را با هم مخلوط کنید میتوانید برنامه های کوچک و کاربردی بسازید!

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

 

    نظرات

    مهدی محمودی
    مهدی محمودی 1 ماه پیش

    ممنون از لطفتون، یک سال گذشته ولی هنوز اصلاح نشده چیزی! فدای تو ادمین بشم من! بیست و ششم فروردین یکهزار و چهارصد و سه خورشیدی

    کیو
    کیو 1 سال پیش

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

    مطالب مشابه

    پرتقال

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

    درباره پرتقال
    • telegram
    • instagram
    پروانه نشر دیجیتال

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

    Porteqali.com All Rights Reserved. Copyright 2024 ©