البرمجة هي فن كتابة التعليمات للحاسوب بلغة يفهمها، ليقوم بتنفيذ مهام محددة. تخيل أنك تعطي تعليمات لشخص لا يفهم لغتك، فتحتاج لغة مشتركة - هذه هي لغة البرمجة.
المتغير هو صندوق تخزين تحفظ فيه بيانات. كل متغير له اسم ونوع وقيمة.
first_name = "ahmed" # إنشاء متغير نصي يحتوي على الاسم الأول
last_name = "bakr" # إنشاء متغير نصي يحتوي على الاسم الأخير
full_name = first_name + " " + last_name # دمج الاسم الأول مع الأخير في متغير واحد
print(full_name) # طباعة الاسم الكامل
النتيجة: ahmed bakr
age = 25 # إنشاء متغير عددي صحيح يمثل العمر
print(age) # طباعة قيمة العمر
النتيجة: 25
pi = 3.14 # إنشاء متغير عشري float لتمثيل قيمة تقريبية للعدد π
print(pi) # طباعة قيمة المتغير pi
النتيجة: 3.14
print(type(first_name)) # طباعة نوع المتغير first_name (str)
print(type(age)) # طباعة نوع المتغير age (int)
print(type(pi)) # طباعة نوع المتغير pi (float)
النتيجة:
<class 'str'>
<class 'int'>
<class 'float'>
" " أو ' 'True أو False (سنراها لاحقًا)هي رموز خاصة تبدأ بعلامة \ لتمثيل أحرف خاصة في النص.
print("hello python") # طباعة نص بسيط
print("ahmed bakr 'hello'") # استخدام علامات تنصيص مفردة داخل نص مزدوج
print("ahmed bakr \"hello\"") # استخدام \" لطباعة علامة التنصيص المزدوجة داخل النص
print("I like \\") # استخدام \\ لطباعة علامة \ نفسها
print("I like \nyoutube") # استخدام \n لطباعة كل كلمة/جملة في سطر جديد
print("I like \nyoutube \nand facebook \nand telegram") # طباعة النص على عدة أسطر
user = "ahmed bakr" # نص لاختبار التقطيع (Slicing)
print(user[0]) # طباعة أول حرف a
print(user[4]) # طباعة الحرف الخامس d
print(user[6]) # طباعة الحرف السابع b
print(user[-1]) # طباعة آخر حرف r (العدد السالب يبدأ من النهاية)
print(user[1]) # طباعة الحرف الثاني h
النتيجة:
a
d
b
r
h
user = "ahmedbakr" # نص بدون مسافات
print(user[0:5]) # طباعة الحروف من الأندكس 0 حتى قبل 5 (ahmed)
print(user[0:6]) # طباعة الحروف من 0 إلى 6 (ahmedb)
print(user[0:-1]) # طباعة من البداية حتى قبل الأخير (ahmedbak)
print(user[0:]) # طباعة من البداية للنهاية (ahmedbakr)
print(user[5:]) # طباعة من الأندكس 5 للنهاية (bakr)
print(user[0:6:1]) # طباعة من 0 إلى 6 بخطوة 1 (ahmedb)
print(user[0:6:2]) # طباعة من 0 إلى 6 بخطوة 2 (تخطي حرف) (amd)
print(user[0:10:3]) # طباعة من 0 إلى 10 بخطوة 3 (aea)
print(user[::-1]) # طباعة النص بالعكس (rkbademha)
msg = "hello Qais, and AHMED, and mahmoud" # نص مختلط الأحرف
print(len(msg)) # معرفة عدد الأحرف (34)
print(msg.lower()) # تحويل النص إلى حروف صغيرة
print(msg.upper()) # تحويل النص إلى حروف كبيرة
one = "ahmed" # نص أول
two = "bakr" # نص ثاني
age = 25 # رقم (لا يمكن دمجه مباشرة مع النص)
print(one + two) # دمج بدون مسافات (ahmedbakr)
print("hello" + one + two) # دمج مع كلمة hello (helloahmedbakr)
print("hello " + one + two) # دمج مع مسافة بعد hello (hello ahmedbakr)
print("hello " + one + " " + two) # دمج مع مسافات بين الكلمات (hello ahmed bakr)
\n: سطر جديد\": علامة تنصيص مزدوجة\\: علامة backslash[0]: أول حرف (الأندكس يبدأ من 0)[-1]: آخر حرف[0:5]: من 0 إلى قبل 5 (لا يشمل 5)[::-1]: عكس النصname = " mester perfect " # نص يحتوي على مسافات في البداية والنهاية
print(name.strip()) # إزالة المسافات من البداية والنهاية
النتيجة: mester perfect
centered = "mester".center(20, "*") # محاذاة النص في المنتصف داخل عرض 20 مع ملء الفراغ بـ *
print(centered) # طباعة النص بعد المحاذاة
النتيجة: *******mester*******
msg = "I love python , python is very easy" # نص لتجربة الدوال المختلفة
print(msg.replace("python", "PHP")) # استبدال كلمة python بكلمة PHP في النص
print(msg.count("python")) # عدّ عدد مرات تكرار كلمة python في النص
النتيجة:
I love PHP , PHP is very easy
2
name = "ahmed baker" # اسم المستخدم
age = 25 # عمر المستخدم
rank = 10.5 # ترتيب أو تقييم المستخدم
print("hello my name is: %s and my age is: %d and my rank is: %.1f" % (name, age, rank)) # تنسيق باستخدام % القديم
النتيجة: hello my name is: ahmed baker and my age is: 25 and my rank is: 10.5
شرح الرموز:
- %s = نص (string)
- %d = رقم صحيح (integer)
- %.1f = رقم عشري بمنزلة عشرية واحدة (float)
print(f"hello my name is {name} and my age is {age} and my rank is {rank}") # تنسيق باستخدام f-string الحديث
النتيجة: hello my name is ahmed baker and my age is 25 and my rank is 10.5
{}tech_window_team = ["hero", "ahmed", "qais"] # إنشاء قائمة تحتوي على أسماء الفريق
tech_window_team.append("ali") # إضافة اسم جديد إلى القائمة
print(tech_window_team) # طباعة القائمة بعد الإضافة
النتيجة: ['hero', 'ahmed', 'qais', 'ali']
خصائص List:
- ✅ قابلة للتعديل (Mutable)
- ✅ تقبل التكرار
- ✅ مرتبة (Ordered)
- ✅ تستخدم []
team_set = {"hero", "ahmed", "qais"} # إنشاء مجموعة set لا تقبل التكرار
team_set.add("ali") # إضافة عنصر جديد إلى المجموعة
print(team_set) # طباعة المجموعة بعد الإضافة
النتيجة: {'hero', 'ahmed', 'qais', 'ali'}
خصائص Set:
- ✅ لا تقبل التكرار (Unique)
- ❌ غير مرتبة (Unordered)
- ✅ قابلة للتعديل
- ✅ تستخدم {}
team_tuple = ("hero", "ahmed", "qais") # إنشاء مصفوفة tuple ثابتة لا يمكن تعديل عناصرها
print(team_tuple[0]) # طباعة أول عنصر في المصفوفة
النتيجة: hero
خصائص Tuple:
- ❌ غير قابلة للتعديل (Immutable)
- ✅ تقبل التكرار
- ✅ مرتبة
- ✅ تستخدم ()
user = {"user_name": "ahmed", "age": 25} # إنشاء قاموس يحتوي على مفتاحين وقيمتين
print(user["user_name"]) # طباعة اسم المستخدم من القاموس
print(user.get("age", 0)) # طباعة العمر باستخدام get مع قيمة افتراضية
النتيجة:
ahmed
25
خصائص Dict:
- ✅ قابلة للتعديل
- ✅ مرتبة (من Python 3.7+)
- ✅ لا تقبل تكرار المفاتيح
- ✅ تستخدم {} مع key: value
phone_number = 7594322297 # رقم هاتف كنص أو رقم
phone_str = str(phone_number) # تحويل الرقم إلى نص str
print(phone_str) # طباعة الرقم بعد تحويله لنص
print(type(phone_str)) # طباعة نوع المتغير بعد التحويل
النتيجة:
7594322297
<class 'str'>
| النوع | قابلة للتعديل | تقبل التكرار | مرتبة | الرمز |
|---|---|---|---|---|
| List | ✅ | ✅ | ✅ | [] |
| Set | ✅ | ❌ | ❌ | {} |
| Tuple | ❌ | ✅ | ✅ | () |
| Dict | ✅ | ❌ (مفاتيح) | ✅ | {key: value} |
print(50 < 40) # مقارنة: هل 50 أصغر من 40؟ النتيجة False
print(50 > 40) # مقارنة: هل 50 أكبر من 40؟ النتيجة True
print(50 <= 50) # مقارنة: هل 50 أصغر من أو يساوي 50؟ النتيجة True
print(50 == 50) # مقارنة: هل 50 يساوي 50؟ النتيجة True
print(50 != 49) # مقارنة: هل 50 لا يساوي 49؟ النتيجة True
النتيجة:
False
True
True
True
True
print(50 == 50 and 50 > 48) # استخدام and: الشرطان صحيحان، النتيجة True
النتيجة: True
قاعدة AND: النتيجة True فقط إذا كان كل الشروط True
print(50 == 50 or 50 < 48) # استخدام or: شرط واحد صحيح يكفي، النتيجة True
النتيجة: True
قاعدة OR: النتيجة True إذا كان أي شرط True
print(not 50 == 50) # استخدام not: عكس نتيجة الشرط، النتيجة False
النتيجة: False
قاعدة NOT: يعكس النتيجة (True → False و False → True)
| A | B | A AND B | A OR B | NOT A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
name = "ahmed" # اسم المستخدم
country = "egypt" # دولة المستخدم
course = "Python Course" # اسم الكورس
price = 100 # السعر الأساسي للكورس
if country == "egypt": # إذا كانت الدولة هي مصر
final_price = price - 90 # خصم 90 دولار للمستخدم من مصر
elif country == "ksa": # إذا كانت الدولة هي السعودية
final_price = price - 50 # خصم 50 دولار للمستخدم من السعودية
else: # في باقي الدول لا يوجد خصم
final_price = price # السعر بدون خصم
print(f"hello {name}, this is {course}, your final price is: ${final_price}") # طباعة رسالة السعر النهائي
النتيجة: hello ahmed, this is Python Course, your final price is: $10
movie = "القناص" # اسم الفلم
movie_rate = 18 # العمر المناسب للفلم
age = 15 # عمر المستخدم
print("the movie is not good for u!" if age < movie_rate else "the movie is good for u!") # if قصيرة داخل print
النتيجة: the movie is not good for u!
الصيغة: النتيجة_إذا_True if الشرط else النتيجة_إذا_False
a = 0 # متغير لبدء العد من الصفر
while a <= 10: # تكرار حتى يصل a إلى 10
print(a) # طباعة القيمة الحالية
a += 1 # زيادة قيمة a بمقدار 1 في كل دورة
النتيجة:
0
1
2
3
4
5
6
7
8
9
10
friends = ["Ahmed", "Bakr", "Mohammed", "Ali"] # قائمة بأسماء الأصدقاء
index = 0 # مؤشر البداية
while index < len(friends): # التكرار على جميع عناصر القائمة
print(f"#{index + 1} {friends[index]}") # طباعة رقم وترتيب الصديق
index += 1 # زيادة المؤشر بمقدار 1
النتيجة:
#1 Ahmed
#2 Bakr
#3 Mohammed
#4 Ali
my_fav_web = [] # قائمة فارغة لحفظ روابط المواقع المفضلة
max_web = 3 # عدد المرات المتاحة للمستخدم لإضافة مواقع (عدد المواقع المسموح به)
while max_web > 0: # طالما ما زالت هناك محاولات متبقية، استمر في طلب المواقع
web = input('ادخل الموقع بدون "https://": ').strip().lower() # طلب رابط الموقع من المستخدم، إزالة الفراغات من البداية والنهاية، وتحويله لحروف صغيرة
web = web.replace(" ", "") # إزالة أي مسافات داخل الرابط نفسه حتى لا تسبب مشاكل في الرابط
my_fav_web.append(f"https://{web}") # إضافة الرابط بعد تركيب https:// في بداية الرابط وتخزينه في القائمة
max_web -= 1 # تقليل عدد المحاولات المتبقية بمقدار 1 بعد كل إدخال
print(f"تم إضافة الموقع، عدد الأماكن المتبقية: {max_web}") # إظهار رسالة للمستخدم بعد الإضافة توضح عدد الأماكن المتبقية
print("قائمة المواقع المفضلة:", my_fav_web) # في النهاية طباعة جميع المواقع المفضلة التي أدخلها المستخدم
Truenumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # قائمة أرقام من 1 إلى 10
for num in numbers: # التكرار على جميع الأرقام في القائمة
if num == 5: # إذا وصلنا للرقم 5
continue # تخطي هذا الرقم وعدم طباعته
print(num) # طباعة الرقم الحالي
النتيجة:
1
2
3
4
6
7
8
9
10
tec_window_team = { # قاموس يحتوي على مستخدمين ومهاراتهم
"ahmed": {"HTML": "90%", "CSS": "70%"},
"perfect": {"JavaScript": "85%", "Ruby": "75%"},
}
for user in tec_window_team: # التكرار على أسماء المستخدمين
for skill in tec_window_team[user]: # التكرار على مهارات كل مستخدم
level = tec_window_team[user][skill] # مستوى المهارة للمستخدم الحالي
print(f"المستخدم {user} يجيد {skill} بمستوى {level}") # طباعة اسم المستخدم ومهارته ومستواه
النتيجة:
المستخدم ahmed يجيد HTML بمستوى 90%
المستخدم ahmed يجيد CSS بمستوى 70%
المستخدم perfect يجيد JavaScript بمستوى 85%
المستخدم perfect يجيد Ruby بمستوى 75%
| while | for |
|---|---|
| تستخدم عندما لا تعرف عدد التكرارات | تستخدم عندما تعرف عدد التكرارات |
| تحتاج تحديث المتغير يدويًا | تحديث تلقائي |
| أكثر مرونة | أكثر بساطة |
الدالة هي كتلة من الكود يمكن استدعاؤها عدة مرات دون إعادة كتابتها.
def say_hello(name): # تعريف دالة تأخذ الاسم وتطبع رسالة ترحيب
print(f"hello {name}") # طباعة رسالة ترحيب مع الاسم
say_hello("ahmed") # استدعاء الدالة مع تمرير اسم ahmed
النتيجة: hello ahmed
def calculator(n1, n2): # تعريف دالة تجمع رقمين
print(n1 + n2) # طباعة ناتج جمع الرقمين
calculator(10, 20) # استدعاء الدالة لحساب 10 + 20
النتيجة: 30
def full_name(first, last, age=18): # تعريف دالة تحتوي على قيمة افتراضية للسن
print(f"hello {first} {last}, your age is: {age}") # طباعة الاسم بالكامل والعمر
full_name("ahmed", "bakr") # استدعاء الدالة بدون تمرير العمر (يستخدم القيمة الافتراضية)
النتيجة: hello ahmed bakr, your age is: 18
my_function = lambda: "hello ahmed" # دالة lambda بسيطة ترجع نصًا
print(my_function()) # طباعة ناتج دالة lambda
النتيجة: hello ahmed
nums = [1, 2, 3, 4] # قائمة أرقام صحيحة
print(all(nums)) # التحقق هل جميع العناصر تعتبر True؟ (القائمة بدون أصفار أو فراغ = True)
النتيجة: True
nums_with_zero = [1, 2, 0, 4] # قائمة تحتوي على صفر
print(any(nums_with_zero)) # التحقق هل يوجد عنصر واحد على الأقل True؟ (النتيجة True)
النتيجة: True
total = sum(nums) # جمع جميع الأرقام داخل القائمة
print(total) # طباعة مجموع الأرقام
print(min(nums)) # طباعة أصغر رقم في القائمة
print(max(nums)) # طباعة أكبر رقم في القائمة
النتيجة:
10
1
4
def format_name(text): # دالة تنسيق نصي للاستخدام مع map
return f"# {text.capitalize()} #" # إرجاع النص مع أول حرف كبير وبداخل إطار #
names = ["mahmoud", "qais", "ahmed"] # قائمة أسماء صغيرة الأحرف
formatted_names = map(format_name, names) # تطبيق الدالة format_name على كل عنصر
for name in formatted_names: # التكرار على النتائج
print(name) # طباعة الاسم بعد التنسيق
النتيجة:
# Mahmoud #
# Qais #
# Ahmed #
def is_start_with_a(word): # دالة للتحقق من بداية الكلمة بحرف a
return word.startswith("a") # إرجاع True إذا كانت الكلمة تبدأ بـ a
words = ["Ahmed", "ali", "amer"] # قائمة كلمات لاختبار filter
filtered = filter(is_start_with_a, words) # تصفية الكلمات التي تبدأ بحرف a
for w in filtered: # التكرار على النتائج
print(w) # طباعة الكلمات التي تبدأ بحرف a
النتيجة:
ali
amer
البرمجة الكائنية هي طريقة برمجة تعتمد على إنشاء كائنات (Objects) تحتوي على بيانات ووظائف.
class SiteMember: # تعريف كلاس يمثل عضو في الموقع
def __init__(self, first_name, middle_name, last_name, gender): # دالة البناء لاستقبال بيانات العضو
self.first_name = first_name # حفظ الاسم الأول كـ attribute
self.middle_name = middle_name # حفظ الاسم الأوسط كـ attribute
self.last_name = last_name # حفظ الاسم الأخير كـ attribute
self.gender = gender # حفظ نوع الجنس (ذكر/أنثى)
def full_name(self): # دالة لإرجاع الاسم الثلاثي كاملًا
return f"{self.first_name} {self.middle_name} {self.last_name}" # دمج الاسم الثلاثي في نص واحد
def hello_user(self): # دالة لطباعة رسالة ترحيب حسب الجنس
if self.gender == "male": # إذا كان المستخدم ذكر
return f"hello Mr: {self.first_name}" # ترحيب ب Mr
elif self.gender == "female": # إذا كانت أنثى
return f"hello Ms: {self.first_name}" # ترحيب ب Ms
return self.first_name # في حال لم يتم تحديد الجنس نرجع الاسم فقط
member1 = SiteMember("أحمد", "محمد", "بكر", "male") # إنشاء عضو جديد ذكر
member2 = SiteMember("زينب", "محمد", "بكر", "female") # إنشاء عضوة جديدة أنثى
print(member1.hello_user()) # طباعة رسالة الترحيب للعضو الأول
print(member2.hello_user()) # طباعة رسالة الترحيب للعضوة الثانية
print(member1.full_name()) # طباعة الاسم الثلاثي للعضو الأول
النتيجة:
hello Mr: أحمد
hello Ms: زينب
أحمد محمد بكر
__init__: دالة خاصة تُستدعى تلقائيًا عند إنشاء كائن جديدself: يشير إلى الكائن الحالي.method(): استدعاء دالة من الكائنclass SiteMember: # تعريف كلاس يمثل عضو في الموقع
not_allowed_users = ["hell", "shit", "nacer", "perfect"] # أسماء غير مسموح بها للتسجيل (Class Attribute)
users_count = 0 # عدّاد لعدد المستخدمين الذين تم إنشاؤهم (Class Attribute)
def __init__(self, first_name, middle_name, last_name, gender): # دالة البناء للعضو
self.first_name = first_name # حفظ الاسم الأول للعضو (Instance Attribute)
self.middle_name = middle_name # حفظ الاسم الأوسط للعضو (Instance Attribute)
self.last_name = last_name # حفظ الاسم الأخير للعضو (Instance Attribute)
self.gender = gender # حفظ نوع جنس العضو (Instance Attribute)
SiteMember.users_count += 1 # زيادة عدّاد المستخدمين عند إنشاء كل عضو جديد
def full_name(self): # دالة لإرجاع الاسم الثلاثي
return f"{self.first_name} {self.middle_name} {self.last_name}" # دمج الاسم الثلاثي
def get_full_info(self): # دالة لإرجاع معلومات كاملة عن العضو
if self.first_name in SiteMember.not_allowed_users: # التحقق إذا كان الاسم الأول في قائمة الممنوعين
return f"هذا الاسم {self.first_name} غير مسموح به" # رسالة توضح أن الاسم غير مسموح
return f"مرحبًا {self.full_name()}، نوعك هو {self.gender}" # إرجاع رسالة تحتوي على الاسم والنوع
@classmethod
def show_users_count(cls): # دالة كلاس لعرض عدد المستخدمين
return f"عدد المستخدمين الحاليين هو: {cls.users_count}" # إرجاع عدد المستخدمين
member1 = SiteMember("أحمد", "محمد", "بكر", "male") # إنشاء عضو جديد
member2 = SiteMember("زينب", "محمد", "بكر", "female") # إنشاء عضوة جديدة
print(member1.get_full_info()) # طباعة معلومات العضو الأول
print(member2.get_full_info()) # طباعة معلومات العضوة الثانية
print(SiteMember.show_users_count()) # طباعة عدد المستخدمين الكلي
النتيجة:
مرحبًا أحمد محمد بكر، نوعك هو male
مرحبًا زينب محمد بكر، نوعك هو female
عدد المستخدمين الحاليين هو: 2
| Class Attribute | Instance Attribute |
|---|---|
| مشترك بين كل الكائنات | خاص بكل كائن |
يُعرّف خارج __init__ |
يُعرّف داخل __init__ |
يُصل إليه بـ ClassName.attr |
يُصل إليه بـ self.attr |
الوراثة تسمح لـ كلاس ابن أن يرث خصائص ووظائف من كلاس أب.
class Father: # تعريف كلاس الأب
def __init__(self, name, age): # دالة البناء التي تستقبل الاسم والعمر
self.name = name # حفظ اسم الأب
self.age = age # حفظ عمر الأب
def full_info(self): # دالة لطباعة معلومات الأب
print(f"اسمي هو: {self.name} وعمري هو: {self.age} عامًا (رسالة من الكلاس الأب)") # طباعة رسالة معلومات
class Son(Father): # تعريف كلاس الابن يرث من Father
def __init__(self, name, age, website): # دالة البناء للابن تستقبل اسم وعمر وموقع
super().__init__(name, age) # استدعاء دالة البناء من الكلاس الأب
self.website = website # حفظ موقع الابن الشخصي
def full_info(self): # إعادة تعريف الدالة (Override) في كلاس الابن
print(f"اسمي هو: {self.name} وعمري هو: {self.age} عامًا وموقعي هو: {self.website}") # طباعة معلومات الابن
father = Father("بكر", 61) # إنشاء كائن من كلاس الأب
son = Son("ahmed", 25, "https://tecwindow.net") # إنشاء كائن من كلاس الابن
father.full_info() # استدعاء دالة المعلومات من كلاس الأب
son.full_info() # استدعاء دالة المعلومات من كلاس الابن (المعاد تعريفها)
النتيجة:
اسمي هو: بكر وعمري هو: 61 عامًا (رسالة من الكلاس الأب)
اسمي هو: ahmed وعمري هو: 25 عامًا وموقعي هو: https://tecwindow.net
super(): للوصول إلى كلاس الأبالتغليف هو إخفاء البيانات والسماح بالوصول إليها فقط من خلال واجهات محددة.
class Member: # تعريف كلاس يمثل عضو
def __init__(self, name, age): # دالة البناء تستقبل الاسم والعمر
self.name = name # متغير عام Public يمكن الوصول إليه من خارج الكلاس
self._country = "Egypt" # متغير محمي Protected (اتفاقيًا للاستخدام الداخلي أو في الكلاسات الوريثة)
self.__age = age # متغير خاص Private لا يمكن الوصول إليه مباشرة من خارج الكلاس
def get_age(self): # دالة Getter لجلب قيمة العمر الخاص
return self.__age # إرجاع قيمة المتغير الخاص
def set_age(self, new_age): # دالة Setter لتعديل العمر الخاص
self.__age = new_age # تعديل قيمة المتغير الخاص
@property
def age_in_days(self): # خاصية property لحساب العمر بالأيام
return self.__age * 365 # ضرب العمر بالسنوات في 365 لإرجاع العمر بالأيام
one = Member("ahmed", 25) # إنشاء كائن جديد من الكلاس Member
print(one.name) # طباعة الاسم العام
print(one.get_age()) # طباعة العمر باستخدام Getter
one.set_age(30) # تعديل العمر عبر Setter إلى 30
print(one.get_age()) # طباعة العمر بعد التعديل
print(one.age_in_days) # طباعة العمر بالأيام باستخدام property
النتيجة:
ahmed
25
30
10950
| المستوى | الرمز | الوصول |
|---|---|---|
| Public | بدون رمز | من أي مكان |
| Protected | _ |
من الكلاس نفسه والكلاسات الوريثة |
| Private | __ |
من الكلاس نفسه فقط |
الكلاسات المجردة هي كلاسات تحتوي على دوال مجردة يجب على الكلاسات الوريثة تنفيذها.
from abc import ABC, abstractmethod # استيراد الأساسيات لبناء كلاس مجرد
class APCLanguage(ABC): # كلاس مجرد يمثل لغة برمجة
def __init__(self, name): # دالة البناء تستقبل اسم اللغة
self.name = name # حفظ اسم اللغة في خاصية
@abstractmethod
def has_oop(self): # دالة مجردة توضح هل اللغة تدعم OOP
pass # لا يوجد تنفيذ هنا في الكلاس المجرد
@abstractmethod
def is_interpreted(self): # دالة مجردة توضح هل اللغة مفسرة
pass # التنفيذ يكون في الكلاس الابن
@abstractmethod
def is_compiled(self): # دالة مجردة توضح هل اللغة مترجمة
pass # التنفيذ يكون في الكلاسات الأبناء
class Python(APCLanguage): # كلاس فرعي يمثل لغة Python
def __init__(self): # دالة البناء بدون معاملات خارجية
super().__init__("Python") # استدعاء دالة البناء من الكلاس المجرد مع اسم اللغة
def has_oop(self): # تنفيذ الدالة المجردة has_oop
return True # لغة Python تدعم OOP
def is_interpreted(self): # تنفيذ الدالة المجردة is_interpreted
return True # Python لغة مفسرة
def is_compiled(self): # تنفيذ الدالة المجردة is_compiled
return False # Python ليست مترجمة بشكل تقليدي
langs = [Python()] # إنشاء قائمة تحتوي على كائن واحد من كلاس Python
for lang in langs: # التكرار على جميع اللغات في القائمة
print(f"Language: {lang.name}") # طباعة اسم اللغة
print(f" Has OOP: {lang.has_oop()}") # طباعة هل تدعم OOP
print(f" Is Interpreted: {lang.is_interpreted()}") # طباعة هل هي مفسرة
print(f" Is Compiled: {lang.is_compiled()}") # طباعة هل هي مترجمة
النتيجة:
Language: Python
Has OOP: True
Is Interpreted: True
Is Compiled: False
المكتبات هي أكواد جاهزة يمكن استيرادها واستخدامها في برامجك.
import random # استيراد مكتبة random المدمجة في بايثون لتوليد أرقام عشوائية
print(random.random()) # طباعة رقم عشوائي عشري بين 0 و 1
print(random.randint(10, 600)) # طباعة رقم عشوائي صحيح بين 10 و 600
from random import random as r_random, randint as r_int # استيراد دوال معينة بأسماء مختصرة
print(r_random()) # استخدام الاسم المختصر للدالة random()
print(r_int(1, 100)) # استخدام الاسم المختصر للدالة randint() للحصول على رقم بين 1 و 100
import library: استيراد المكتبة كاملةfrom library import function: استيراد دالة محددةimport library as alias: استيراد باسم مختصرfrom library import function as alias: استيراد دالة باسم مختصر# ملف tecwindow.py
import random # استيراد مكتبة random لاستخدامها داخل الدالة show_random_num
def say_hello(name): # دالة ترحيب بسيطة تأخذ اسمًا واحدًا
print(f"hello {name}") # طباعة رسالة ترحيب مع الاسم
def say_hi(name): # دالة ترحيب رسمية تضيف mr قبل الاسم
print(f"hi mr {name}") # طباعة رسالة ترحيب رسمية
def show_random_num(): # دالة لعرض رقمين عشوائيين
print(random.random()) # طباعة رقم عشري عشوائي بين 0 و 1
print(random.randint(10, 600)) # طباعة رقم صحيح عشوائي بين 10 و 600
import tecwindow as tw # استيراد المكتبة المحلية tecwindow باسم مختصر tw
tw.say_hello("ahmed") # استدعاء دالة say_hello لطباعة ترحيب بسيط بالاسم
tw.say_hi("ahmed") # استدعاء دالة say_hi لطباعة تحية رسمية مع mr
tw.show_random_num() # استدعاء دالة show_random_num لعرض أرقام عشوائية
النتيجة:
hello ahmed
hi mr ahmed
0.123456789
456
pip install)❌ سيء:
x = 25
n = "ahmed"
✅ جيد:
age = 25
name = "ahmed"
❌ سيء:
def calc(a, b):
return a + b
✅ جيد:
def calculate_sum(first_number, second_number):
"""دالة لجمع رقمين وإرجاع الناتج"""
return first_number + second_number
❌ سيء:
print("hello ahmed")
print("hello ahmed")
print("hello ahmed")
✅ جيد:
def say_hello(name):
print(f"hello {name}")
say_hello("ahmed")
say_hello("ahmed")
say_hello("ahmed")
❌ سيء:
if x==5:
print("yes")
✅ جيد:
if x == 5:
print("yes")
❌ سيء:
# 100 سطر من الكود في دالة واحدة
✅ جيد:
# تقسيم الكود إلى دوال صغيرة وواضحة
def function1():
pass
def function2():
pass
🎓 تهانينا! لقد أكملت كورس Python الأساسي بنجاح. أنت الآن جاهز لبدء رحلتك في عالم البرمجة. تذكر: الممارسة هي المفتاح!
<style>
body {
background-color: #1e1e1e;
color: #d4d4d4;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
padding: 20px;
}
h1, h2, h3 {
color: #4ec9b0;
}
code {
background-color: #252526;
color: #ce9178;
padding: 2px 6px;
border-radius: 3px;
}
pre {
background-color: #252526;
color: #d4d4d4;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
}
blockquote {
border-left: 4px solid #4ec9b0;
padding-left: 15px;
color: #b5cea8;
}
table {
border-collapse: collapse;
width: 100%;
margin: 20px 0;
}
th, td {
border: 1px solid #3e3e42;
padding: 10px;
text-align: left;
}
th {
background-color: #2d2d30;
color: #4ec9b0;
}
tr:nth-child(even) {
background-color: #252526;
}
</style>
نهاية الدليل