• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

آموزش پايتون (Python)

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
بنام خدا
آموزش پایتون – درس 1
مقدمه​
پایتون یک زبان اسکریپتی و بسیار قدرتمند و گسترده هستش و این روزا می تونید آثاری از نفوذش رو تقریبا همه جا ببیند از پروژه های ساده و بسار کوچک گرفته تا پروژه های عظیم چون برخی از نرم افزار های NASA . شاید بپرسید دلیلش چیه ؟ خوب دلایل زیادی داره . اینم بگم که هر زبانی برای یک استفاده بخصوص طراحی شده و تو همون زمینه بهتر جواب میده . زبانی مثل Pascal برای آموزش برنامه نویسی , زبانهایی چونC و اسمبلی هم واسه برنامه های سیستمی و سیتم عامل و زبانی چون php برای طراحی سایت . و استفاده از هر یک به جای دیگری امکان پذیر ولی نا صحیح می باشد . حالا دیگه کسی نمی یاد gui خودش رو با C کار کنه !! علاوه بر اینکه Python زبانی عملی برای برنامه های کاربردی میباشد یه جورایی میشه ازش تو زمینه هایه دیگه ای مثلا برنامه نویسی سیستمی – رابط کاربری (gui) – کامپوننت – برنامه نویسی اینترنت – برنامه های عددی و محاسباتی – برنامه های پایگاه داده – پردازش تصویر – هوش مصنوعی – اشیا توضیع شده – شبیه سازی – روباتیک – برنامه نویسی موبایل – امنیت و شبکه و ... استفاده کرد !!!!
و اما چرا باید از پایتون استفاده کنیم ؟؟
پایتون شی گراست :
پایتون زاتا یک زبان شز گراست و از ویژگی های پیشرفته شی گرایی چون وراثت – چند شکلی – سربار گزاری عملگر و ... پشتیبانی می کند اگر شما با برنامه نویسی شی گرا آشنایی ندارید پایتون یک راه حل عالی واسه یاد گرفتنشه !!! نکته جالب و یک ویژگی منحصر به فرد پایتون که لقب چسب را بارای پایتون به ارمغان آورده امکان استفاده از کد ها و کلاس های نوشته شده در زبانهای دیگری چون ++C و Java هستش و یه جورایی کار چسباندن قطعات کد جدا و فقط نوشتن بدنه اصلی به عهده پایتون است .
پایتون رایگان است !!
پایتون یک زبان رایگان و باز متن هستش که این روزا بحث اکثر محافل شده . با کمی توجه به این نکته که دیر یا زود قانون کپی رایت (اون طوری که من از منابع موثق شنیدم 2 سال بعد !!)می یاد و فکر نمی کنم تو کشوری مثل ایران و پس از جوی مثل الان کسی حاضر بشه یه نر افزار رو با قیمت واقعی اون بخره ( مثلا 100 هزار تومن واسه ویندوز !!) پس می شه گفت تها گزینه واسه ما نرم افزار های باز متن و رایگان هستش البته تنها دلیل رایگان بودت این دسته از نرم افزار ها نیستش . موضوعات مهم دیگری هم هست که خودشون یه مقاله جدا هستن ...
پایتون یک زبان پورتابل یا قابل انتقال می باشد :
چون پایتون با زبان پورتابل C نوشته شده می تواند به صورت مجازی بر روی هر سیستمی کامپایل و اجرا شود . اگه یادتون باشه گفتم این یه زبان اسکریپتی یعنی در حالت معمول به فایل اجرایی تبدیل نمی شه بلکه یک ماشین مجازی فایل کد رو می خونه و همزمان اونارو تفسیر کرده و اجرا می کنه . پس شما می تونید یک برنامه رو تو ویندوز بنویسید و سپس انو بدون تغییر روی لینوکس یا مکینتاش یا هر سیستم عامل و سخت افزار دیگری که پایتون روی آن نصب باشد اجرا کنید .
پایتون قدرتمند است :
پایتون یه زبان چند رگه هستش . پایتون از زبانهای اسکریپتی (برای مثال : Tcl,Scheme,Perl) و زبانهای سیستمی (برای مثال : C++,C وJava ) مشتق شده . بنابراین تمام سادگی و راحتی کار زبان های اسکریپتی و ویژگی ها و قدرت زباهای سطح پایین را داراست .
پایتون قابلیت استفاده از کد های نوشته شده با سایر زبان ها را دارد :
این ویژگی یکی از پرکاربرد ترین و قوی ترین ویژگی های پایتون می باشد . شما می توانید قطعه از کد را در زبانی چون C و ++C و Java نوشت اونو تبدیل به فایل اجرایی کرد و سپس ازش در برنامه نوشته شده با پایتون استفاده کرد . و یا از توابع کتابخانه و کامپوننت هایی چون COM API استفاده کرد .

یادگیری و استفاده از پایتون بسیار راحت می باشد :
بی شک و حداقل از نظر من و بسیاری از برنامه نویسان پایتون این زبان یکی از آسان ترین زبان ها برای یادگیری و استفاده می باشد و از آن به عنوان یک زبان سریع برنامه نویسی یاد می کنند . این زبان نیازی به کامپایل ندارد و شما مستقما می توانید پس از نوشتد کد و با یک دستور آن را اجرا کنید . دستورات این زبان بسیار نزدیک به زبان انسان می باشد . برای مثال برنامه Hello World را که اولین برنامه ساده می باشد را در دو زبان C و Python مقایسه کنید :
کد:
#include <stdio.h>
int main()
{
	printf(“ Hello world “);
	return 0;
}

ابتدا باید این برنامه را بنویسید و آن را یا دستوری چونcc helloworld.c -o hello کامپایل و سپس با دستور hello/. اونو اجرا کنید . اما بوسیله پایتون در یک فایل متنی بنویسید :

کد:
print “Hello World !!”

و با دستور python hi.py اونو اجرا کنید .
با کم شدن حجم کد برنامه نویسی راحت تر و رفع اشکال و توسعه آن آسان تر می شود .
اهمیت پایتون :
مطمن هستم با اهمیت لینوکس و نرم افزار های باز متن در ایران آشنا هستید همانطور که می دانید سیستم عامل ملی ما بر پایه لینوکس می باشد و این لازمه توسعه برنامه نویسی تحت لینوکس را برایمان آشکار می کند . شاید فکر کنید زبان برنامه نویسی و انتخاب اکثر لینوکس کاران C می باشد این تفکر درستی است اما نه برای برنامه هلی کاربردی مانند یک برنامه حسابداری . پایتون در سراسر دنیا از اهمیت ویژهای برخوردار می باشد و رفته رفته به جایگاه اصلی و لایق خود نزدیک می شود . جالب است بدانید مایکرو سافت نیز این زبان را با نام IronPython در تکنولوژی Net. خود گنجانده است !!
به نظر من وظیفه ما این است که با تلاش و همکاری کشورمون ایران را نیز به جایگاهی که باید خیلی وقت پیش آنجا می بودیم پیش ببریم .
من قصد دارم آموزش هایی رو که شروعش پایتون هست رو برای دوستان عزیزم ارایه کنم . مجوز همه این آموزش ها GPL هستش و فعلا اونا رو تو فروم های سایت www.pylearn.com قرار می دم و از هرگونه مطالب و نظرات شما استقبال می کنم .

راستي پيشنهاد مي كنم حتما نسخه pdf مربوط به هر درس رو دانلود كنيد :

به امید آینده ای بهتر و با تشکر از تمام دوستان Mehdi Bayazee – [email protected]
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
توضيح : من تمام مثال ها رو مطابق با لينوكس)FC4( مي نويسم و تست مي كنم و همه دستورات در اين محيط هستش و راستش بخواهيد آشنايي چنداني با معادلشون تو ويندوز ندارم اما اگه بخواهيد و سئوالي باشه مي تونم برم دنبالش و تا جايي كه ممكنه يه چيزايي بنويسم . هرجا كه لازم بود بگيد . شما مي تونيد پايتون رو براي نصب تو ويندوز يا لينوكس از اينترنت و سايت خود پايتون دانلود كنيد . اكثر توزيع هاي كنوني لينوكس يه نسخه از مفسر پايتون رو دارند .
قبلا ما از پايتون به عنوان يك زبان برنامه نويسي ياد كرديم . اما پايتون نام يك بسته نرم افزاري به نام مفسر نيز هست كه كار اصلي آن اجراي برنامه مي باشد . مفسر سطر به سطر كد برنامه )Python( را خوانده و همزمان اجرا مي كند . در حالت كلي يك برنامه پايتون به 4 طريق اجرا مي شود :
1.به حالت محاوره اي
2.به عنوان ماجول پايتون
3.به عنوان فايل اسكريپت unix
4.از داخل يك سيستم ديگر
5.متد هاي خاص يك سيستم عامل
حالت محاوره اي راحترين حال اجراي كد در پايتون مي باشد . كافي هست كلمه پايتون رو وارد كنيد :

کد:
# python

و سپس دستورات خود را به صورت محاوره اي وارد كنيد :

کد:
>>> print "Hello world!”                                                       
Hello world!                                                                   
>>>  را بفشاريد Ctrl-D براي خروج (Ctrl-Z در برخي سيستم عامل ها)

در حالت دوم فايلي را با پسوند py ايجاد و كد خود را درون آن بنويسيد :

کد:
import sys
print sys.argv
و سپس از طريق ترمينال آن را اجرا كنيد :

کد:
# python test1.py –I eggs –o bacon
['test1.py', '-I', 'eggs', '-o', 'bacon']
اين برنامه بسيار كوچك كه با نام test1.py ذخيره شده پارامتر هاي ورودي را به صورت يك ليست به نمايش مي گذارد . دستور معادل آن در ويندوز عبارت است از :
کد:
C:\book\tests> python test1.py -i eggs -o bacon
['test1.py', '-i', 'eggs', '-o', 'bacon']

حالت سوم اجرا در حال اسكريپت مي باشد . اين نوع فايل متني حالت اجرايي داراست و مشخصه آن اولين خط آن مي باشد كه يك مثال ساده عبارت است از :
کد:
#!/usr/bin/env python
print 'The Bright Side of Life ...' # comment

توضيح اينكه اولين خط اين برنامه را با كامنت ( توضيحات ) اشتبا نگيريد اين سطر به اين معني است كه كل كد ادامه فايل را با برنامه اي كه آدرس آن پس از عبارت !# آمده فرستاده و به اجرا در مي آيد . پس اين خط آدرس فايل اجرايي مفسر پايتون به همراه علامت هاي !# است . سپس اين فايل را به حالت اجرايي تبديل كرده و اجرا كنيد :

کد:
# chmod +x test2.py
# ./test2.py
The Bright Side of Life ...

خوب فكر مي كنم تا اين حد كافي باشه لازم به ذكر هستش كه روي دستورات ساده و بديهي زياد وقت نمي ذاريم و يكم سريع جلو مي ريم تا زود تر به مثال هاي عملي و به درد بخور تر برسيم .
عبارات :
عبارات و انجام محاسبات رياضي بسيار شبيه ساير زبانهاي برنامه نويسي مي باشد

کد:
>>> 3 + 5
8
>>> 3 + (5*4)
24
>>> 3 ** 2
9
>>> 'Hello' + ' World'
'Hello World'
[مقدار دهي متغيير ها :
نوع متغيير ها به صورت ديناميكي تعيين مي شود و در طول اجراي برنامه ممكن است تغيير يابد
متغيير ها تنها اسمي براي يك شي مي باشند و همانند زبان C به يك نقطه از حافظه اشاره نمي كنند

کد:
>>> a = 4
>>> b = a * 4.5
>>> c = (a+b)/2.5
>>> a = "Hello World"

همانطور كه مشاهده مي كنيد تعريف يك متغيير به وسيله مقدار دهي آن انجام مي شود و اين نظريه درست نيست كه در پايتون نيازي به تعريف متغيير نمي باشد براي مثال استفاده از كدي مثل :

کد:
>>> print x
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'x' is not defined
باعث نمايش يك پيغام خطا خواهد شد چون متغيير x قبلا تعريف (مقداردهي) نشده است .
نكته ديگر اينكه ما در پايتون نيازي به تعيين نوع يك متغيير نداريم براي نمونه در مثال بالا متغيير a ابتدا مقدار صحيح (int) مي باشد و سپس از آن براي نشان دادن يك رشته استفاده شده است .
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
رشته :
رشته اولین نوع داده ای است که باهاش آشنا می شید . فرق رشته در پایتون با اکثر زبان های برنامه نویسی اینکه یک کاراکتر به عنوان یک رشته با طول یک می باشد . توضیح دیگر علامت نقل قول دوگانه و منفرد تقریبا کار یکسانی انجام می دن البته فرقهایی دارند که به مرور و با مثال آشنا خواهید شد از ۳ علامت نقل گول هم برای وارد کردن رشته هایی دارای علامت های خاص استفاده می شود .

کد:
>>> ‘Ali said “How\’re we supposed to know that?”’
‘Ali said “How\’re we supposed to know that?”’

>>> “””This is kind of a special string, because it violates some
...�  �  � rules that we haven’t talked about yet”””
“This is kind of a special string, because it violates some\n�  �  � rules that we
haven’t talked about yet”

فرمت بندی رشته :
شبیه منطقی مانند فرمتد بندی C می باشد :
کد:
>>> “Mehdi %s” % (“ Bayazee”)
‘Mehdi Bayazee’

>>> “%-10s %s %10s” % (“Name”, “Id”, “Family”)
‘Name�  �  �  � Id�  �  � Family’

>>> “Controlling the number of decimal places shown: %.02f” % 25.101010101
‘Controlling the number of decimal places shown: 25.10’
اعداد و عملگر ها :
پایتون دارای نوع های پیش فرض integers,long numbers,floating-point(float), imaginary numbers می باشد . برای اطلاع از نوع یک متغییر در هر لحظحه می توانید از دستور type استفاده کنید:

کد:
>>> x=2000
>>> type(x)
<type ‘int’>

>>> type(999999999999)
<type ‘long’>

>>> type(1.0)
<type ‘float’>
در مورد تقدم عملگر و عملگر و بسیاری از بحث های تکراری توضیحی داده نمی شود و به مرور با آنها آشنا خواهید شد .
استفاده از سایر انواع پیشرفته پایتون :
خوب تقریبا از این بخش وارد مباحث ویژه پایتون می شویم . پایتون دارای 3 نوع درونی و پیشرفته تقریبا قابل مقایسه به آرایه و ساختمان C
می باشد . که عبارت است از :
1.Tuples
2.Lists
3.Dictionaries
Tuple یا توالی غیر قابل تغییری از داده همانند آرایه می باشد با این تفاوت که پس از تعریف و مقدار دهی اولیه قابل هیچ گونه تغییری� � نمی باشد . علامت مشخصه آن در هنگام تعریف پارانتز می باشد .
کد:
>>> filler = (“string”, “filled”, “by a”, “tuple”)
>>> print “A %s %s %s %s” % filler
A string filled by a tuple

>>> print “The second element of the tuple is ‘%s’” % filter[1]
The second element of the tuple is ‘filled’
همانطور که متوجه شدید اندیس همانند C از صفر شروع می شود . برای پیدا کردن طول (تعداد اعضا) یک تیوپل از دستور len استفاده می شود هرگونه تلاش برای تغییر یا دسترسی به اندیس بیشتر از طول تیوپل باعث نمایش خطا می شود :
کد:
>>> print “%d” % len(filter)
3
>>> print a[len(filter) - 1]
tuple
List� یا توالی قابل تغییری از داده همانند تیوپل� می باشد با این تفاوت که قابلت تغییر و گسترش را دارا می باشد علامت مشخصه آن براکت می باشد .
کد:
>>> breakfast = [ “coffee”, “tea”, “toast”, “egg” ]
>>> count = 1
>>> print “Todays breakfast is %s” % breakfast[count]
Todays breakfast is tea
و همانطور که گفتیم لیست امکان تغییر را دارا می باشد .
کد:
>>> breakfast[2]="milk"
>>> breakfast
['coffee', 'tea', 'milk', 'egg']

توجه کنید که شما می توانید تنها عناصر موجود را تغییر دهید برای اضافه کردن عناصر و داده های جدید از دستور append استفتده می کنیم .
کد:
>>> breakfast.append(“waffle”)
>>> breakfast
['coffee', 'tea', 'milk', 'egg', 'waffle']
اگر قصد دارید تعداد بیشتری از داده ها را در قالب لیست یا تیوپل به لیست موجود اضافه کنید بدین منظور از دستور extend استفاده می کنیم
کد:
>>> breakfast.extend([“juice”, “decaf”, “oatmeal”])
>>> breakfast
[‘coffee’, ‘tea’, ‘milk’, ‘egg’, ‘waffle’, ‘juice’, ‘decaf’, ‘oatmeal’]

Dictionary� شبیه به لیست و تیوپل می باشد با این تفاوت که� ایندکس دیکشنری عددی نمی باشد و می تواند شامل رشته یا در اصطلاح هر اسم دیگری باشد !!
کد:
>>> dic={}
>>> dic["name"]="mehdi"
>>> dic["family"]="bayazee"
>>> print dic
{'name': 'mehdi', 'family': 'bayazee'}
نام ایندکس در دیکشنری keys یا کلید و مقدار هر کلید value نامیده می شود . که برای بدست آورد کلیدها و مقادیر می توانید از توابع� � � � � � � � � � � � ()keys و ()values استفاده می شود :
کد:
>>> dic.keys()
['name', 'family']
>>> dic.values()
['mehdi', 'bayazee']
نکات :
می توانید در پایتون از اندیس دهی معکوس استفاده کنید ! به این صورت که اندیس 1- آخرین عضو آرایه می باشد .
تکه تکه کردن (Slicing) آرایه و رشته� از طریق ترکیب اندیس آغازین و پایانی صورت می گیرد .

کد:
>>>last_names = [ “Douglass”, “Jefferson”, “Williams”, “Frank”, “Thomas” ]
>>>last_names[-1]
'Thomas'
>>>last_names[-5]
'Douglass'
>>> s[1:4]
['Jefferson', 'Williams', 'Frank']
>>> s[0][0:6]
'Dougla'
برای مشاهده اعضا هر کلاس (متغییر ها و توابع) می توانید از دستور dir استفاده کنید .
کد:
>>> s=[]
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

برای دسترسی با مستندات هر دستور یا کلاس می توانید متغییر __doc__ آن� دستور استفاده کنید.
کد:
>>> print (s.__doc__)
list() -> new list
list(sequence) -> new list initialized from sequence's items
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
راستی یادم رفت بگم منبع این آموزش ها سایت زیر هستش
اولین سایت تخصصی زبان برنامه نویسی پایتون :
http://www.pylearn.com
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
زمانی که یک خطای زمان اجرا (runtime) اتفاق می افتد حالتی پیش می آید که اصطلاحا به آن استثنا می گویند . که معمولا برنامه اتمام یافته و پایتون یک پیام ارور یا خطا چاپ می کند .
برای مثال عمل تقسیم بر صفر یک خطا یا استثنا ایجاد می کند :

کد:
>>> print 55/0
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero

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

کد:
filename = raw_input('Enter a File name : ')
try :
	fp = file(filename, "r")
except :
	print 'There is no file named ', filename


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

کد:
def GetAge():
	age = input ("Enter your age : ")
	if age < 18 :
		raise 'BadNumberError' , 'Your age must be greader than 18 !!'
	return age

همانطور که مشاهده می کنید این تابع یک عدد را از کاربر دریافت می کند و اگر مقدار آن کمتر از 18 باشد یک استثنا ایجاد می کند و در حالت عادی اجرای برنامه را متوقف می کند . دستور raise دو متغییر می گیرد اولی نوع استثنا و دومی اطلاعاتی در مورد خطای اتفاق افتاده نوع استثنای BadNumberError یک نوع جدید از استثنا هست که ما از آن در این تابع استفاده کرده ایم .
در هنگام استفاده از try و except می توانید اطلاعات ارسالی از تابع raise را دریافت و چاپ کنید :

کد:
>>> s=[]
>>> try:
...     print s[1]
... except IndexError,er:
...     print "We have an error : ",er
...
We have an error :  list index out of range

در مثال زیر نیز نحوه مدیریت جدا و همزمان چندین خطا را مشاهده می کنید .

کد:
s = [5,6,0,2]
x = input("Enter an Index : ")
try:
  print "%.2f" %(10.0/s[x])
except IndexError :
  print "Sorry , we have not this index !!"
except ZeroDivisionError :
  print "The value of this index is zero ! i can not devide it .."

نمونه ای از خروجی :

کد:
Enter an Index : 2
The value of this index is zero ! i can not devide it ..
Enter an Index : 10
Sorry , we have not this index !!
Enter an Index : 1
1.67
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
راستی چند تا مقاله دیگه تو سایت گذاشتم که چون عکس و کد زیاد داره نتونستم اینجا بزارم مثلا آموزش ساختمان داده به پایتون -۰-> http://www.pylearn.com
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
آموزش های جدید به سایت اضافه شد !
آموزش extending programming with c
و ...
برای دیدن آموزش ها به سایت http://www.pylearn.com مراجعه کنید .
 

bayazee

Registered User
تاریخ عضویت
25 می 2006
نوشته‌ها
84
لایک‌ها
0
آقا یه خبر خوب سایت اسمش شد www.pylearn.com
تبریک به همه اپن سورسی ها !!
کلی آموزش جدید هم قرار گرفت
کسی نظری نداره ؟؟!!
 
بالا