⚡ IS231 · Lecture 03 · Dr. Mohamed Nour Eldien · أسئلة امتحانات 2021 – 2025

OOP & File Handling

من مجرد سكربت بسيط لبرنامج حقيقي منظم! شرح الـ Object-Oriented Programming والوراثة والـ Constructor وإدارة الملفات والـ JSON — الشرح بالعامية المصرية والمصطلحات بالإنجليزي 🇪🇬

8
أقسام رئيسية
10+
سؤال امتحان حقيقي
2021–2025
سنوات الامتحانات
نجاح 🎯
01

Why OOP? — ليه بنستخدم الـ OOP؟

تنظيم الداتا بشكل يعكس الواقع الحقيقي

🤔 المشكلة اللي الـ OOP بيحلها

البرامج الصغيرة ممكن نكتبها بشوية متغيرات ودوال (Variables & Functions) متبعترة. لكن لما البرنامج يكبر ويبقى سيستم كامل لجامعة مثلاً، هيبقى عندنا آلاف الطلاب والكورسات.

الـ OOP بيخلينا نبرمج الحاجات دي كأنها "كيانات" حقيقية (Entities) زي Student و Course. وده بيسهل قراءة الكود وتعديله وصيانته.

🔗 ربط بالـ Django: كل ما هنيجي نعمل Model في الـ Django بعدين، إحنا في الحقيقة بنعمل Class. المحاضرة دي هي الأساس الحقيقي للـ Django!
🎯 OOP in One Sentence — الجملة الملخصة

الـ Object-Oriented Programming هو طريقة نبني بيها البرامج باستخدام Classes و Objects.

📐 الـ Class (البلوبرنت / التصميم)

  • هو الرسمة أو "الأسطمبة" — القالب الفاضي
  • بيعرّف إيه البيانات الموجودة وإيه الأفعال الممكنة
  • مفيش فيه داتا حقيقية لطالب معين
  • زي فكرة "فورم تقديم فاضي"

👤 الـ Object (النسخة / الـ Instance)

  • هو الحاجة الحقيقية اللي اتعملت من القالب
  • "الطالب علي" أو "الطالبة منى"
  • كل Object شايل بيانات مختلفة
  • زي "فورم اتملى ببيانات طالب حقيقي"
🏛️ أمثلة حقيقية من حياتنا — Real-World Entities

فكر في أي سيستم حواليك — كل كيان فيه ممكن يبقى Class:

🎓 جامعة

  • Student — الطالب
  • Course — المادة
  • Instructor — الأستاذ

🛒 متجر إلكتروني

  • Product — المنتج
  • Order — الطلب
  • User — المستخدم

📚 مكتبة

  • Book — الكتاب
  • Member — العضو
  • Loan — الإعارة
02

Class, Object, Attribute & Method

الكلاس بيتكون من إيه من جوه؟

🧩 الـ Attributes والـ Methods — البيانات والأفعال

كل Class بيتكون من نوعين من الحاجات:

  • Attributes: هي "البيانات" اللي جوه الـ Object — الكائن ده بيعرف إيه؟ (زي اسمه، مستواه، قسمه)
  • Methods: هي "الدوال" المكتوبة جوه الـ Class — الكائن ده بيعرف يعمل إيه؟ (زي إنه يعرض بياناته أو يرفع مستواه)
💡 الجملة المهمة: Data + Behavior together = Object-Oriented Thinking. البيانات + الأفعال جنب بعض = التفكير الـ OOP.
أبسط Class ممكن نكتبه في Python

عشان نكتب Class في Python بنستخدم كلمة class، والاسم بيبدأ بحرف كابيتال (PascalCase). لو الكلاس فاضي بنحط pass.

PYTHON — أبسط Class
# 1. تعريف الـ Class
class Student:
    pass   # فاضي حالياً — هنضيف حاجات بعدين

# 2. إنشاء Objects (Instantiation) — بننادي الكلاس زي الدالة
student1 = Student()
student2 = Student()

# print(student1) هيطبع عنوان الـ Object في الذاكرة — ده مش مهم دلوقتي
# المهم إن student1 و student2 هما objects مختلفة!
⚠️ إضافة Attributes يدوياً — الطريقة الضعيفة

ممكن نضيف بيانات للـ Object بعد ما اتعمل مباشرة، بس دي طريقة ضعيفة ومش مفضلة!

PYTHON — إضافة Attributes يدوياً (مش كويسة)
class Student:
    pass

student1 = Student()
student1.name = "Mona"
student1.level = 2

student2 = Student()
# نسيت تضيف level لـ student2!

print(student1.name)   # Mona
print(student2.level)  # AttributeError — خطأ!
⚠️ ليه الطريقة دي وحشة؟ لأنك ممكن تنسى تضيف attribute معين لـ Object معين، وساعتها الكود هيضرب Error. عشان كده لازم نستخدم الـ Constructor!
03

Constructor & Self — دالة البناء

ازاي ننظم ولادة الـ Object بشكل صحيح؟

🏗️ دالة البناء __init__ — الـ Constructor

دي دالة بتشتغل أوتوماتيك أول ما تعمل Object جديد. وظيفتها إنها تضمن إن الـ Object ده اتخلق وهو معاه كل الداتا الأساسية بتاعته. الـ __init__ دي بتبدأ وتخلص بـ double underscore ما قبلها وما بعدها.

PYTHON — الـ Constructor
class Student:
    # الـ Constructor — بيتنادى أوتوماتيك عند إنشاء Object
    def __init__(self, name, level, department="General"):
        self.name = name             # self.name = الـ attribute بتاع الـ Object
        self.level = level
        self.department = department

# Python بتنادي __init__ لوحدها أول ما تعمل Object
student1 = Student("Mona", 2, "IS")
student2 = Student("Ali", 2)   # هياخد "General" كـ default

print(student1.name)        # Mona
print(student2.department)  # General
📌 مزايا الـ Constructor: بيضمن إن كل Object بيتولد وهو معاه كل البيانات المطلوبة — بيمنع الـ Errors — بيقلل التكرار — بيخلي الكود أنظف وأوضح.
👤 يعني إيه كلمة self؟

كلمة self بترمز للـ Object الحالي اللي بيتعمله إنشاء أو اللي بينادي الدالة. لما نقول self.name = name كأننا بنقول "يا Python، خد القيمة اللي جيالك وحطها في الـ Object اللي في إيدينا دلوقتي".

PYTHON — فهم الـ self
class Student:
    def __init__(self, name, level):
        self.name = name    # self هنا = الـ Object اللي بيتعمل دلوقتي
        self.level = level

    def display_info(self):
        # لما student1.display_info() تتنادى، self هنا = student1
        print(self.name, self.level)

student1 = Student("Mona", 2)
student1.display_info()   # Mona 2

student2 = Student("Ali", 3)
student2.display_info()   # Ali 3 — كل object بياناته مختلفة!
خطأ شائع جداً: لو كتبت دالة جوه الـ Class ونسيت تحط self كأول parameter، Python هيرمي Error أول ما تيجي تنادي الدالة دي!
04

Naming Conventions & Methods — الأسماء والأساليب

print vs return وأسلوب كتابة الكود الصح

📝 Naming Conventions — اتفاقيات التسمية

في Python في اتفاقيات مهمة للتسمية لازم تتبعها:

نوع الاسمالنمط المستخدممثال
Class Names (أسماء الكلاسات)PascalCaseStudent, LibraryBook, UserProfile
Attributes & Methodssnake_casestudent_name, display_info, get_grade
Private (Convention)_underscore_internal_data, _password
💡 ليه الـ Naming مهم؟ الكود اللي بيتقرأ بسهولة أسهل في التعديل والـ Debug. OOP بيعتمد على أسماء واضحة زي promote() بدل f().
🔄 print vs return داخل الـ Methods

في الـ Backend، الدوال في الغالب بترجع قيمة (return) مش بس بتطبعها (print). عارف الفرق؟

print داخل Method
class Course:
    def __init__(self, title, hours):
        self.title = title
        self.hours = hours

    def description(self):
        print(self.title, self.hours)

c = Course("Python", 3)
c.description()
# بتطبع على الشاشة — مش بترجع قيمة!
return داخل Method (الأفضل)
class Course:
    def __init__(self, title, hours):
        self.title = title
        self.hours = hours

    def description(self):
        return f"{self.title} — {self.hours} hours"

c = Course("Python", 3)
info = c.description()
print(info) # Python — 3 hours
📌 القاعدة: print() بتعرض على الشاشة. return بيبعت القيمة لمن نادى الدالة عشان يستخدمها. في الـ Backend دايماً تقريباً بنستخدم return!
تحديث بيانات الـ Object بالـ Methods

الـ Methods مش بس بتعرض البيانات — ممكن تعدّلها كمان. وده أحسن من تعديلها من بره الكلاس مباشرة!

PYTHON — Method بتعدل بيانات الـ Object
class Student:
    def __init__(self, name, level):
        self.name = name
        self.level = level

    def promote(self):
        self.level += 1    # بتزود الـ level بواحد

    def display_info(self):
        return f"Student: {self.name}, Level: {self.level}"

student1 = Student("Mona", 2)
print(student1.display_info())  # Student: Mona, Level: 2
student1.promote()
print(student1.display_info())  # Student: Mona, Level: 3
05

Inheritance & Overriding — الوراثة والتعديل

إعادة استخدام الكود بذكاء

👨‍👦 مفهوم الوراثة (Inheritance)

لو عندنا كلاسين بيشاركوا في بيانات مشتركة (زي الطالب والمدرس — الاتنين أشخاص ليهم اسم وـ ID)، بدل ما نكرر الكود، بنعمل كلاس كبير (Parent Class) اسمه Person، ونخلي الكلاسات الصغيرة (Child Classes) تورث منه.

🚨 مهم جداً للامتحان: Python بتستخدم الأقواس للوراثة: class Student(Person): — ومفيش كلمة اسمها inherits في Python! (خليها تفرق عن Java اللي بتستخدم extends)
PYTHON — Inheritance كاملة
class Person:
    def __init__(self, name):
        self.name = name

    def introduce(self):
        print("I am a person")

# Student "is a" Person — وراثة بالأقواس (مش كلمة inherits!)
class Student(Person):
    def __init__(self, name, level):
        # super() بتنادي Constructor الـ Parent
        super().__init__(name)
        self.level = level

    # Method Overriding: بنعيد كتابة الدالة عشان نغير سلوكها
    def introduce(self):
        print(f"I am a student named {self.name}, level {self.level}")

p = Person("Ahmed")
s = Student("Mona", 2)

p.introduce()   # I am a person
s.introduce()   # I am a student named Mona, level 2
print(s.name)   # Mona — ورّثها من Person!
🔍 إيه لازمة دالة super()؟

دالة super() بتديلك صلاحية توصل لدوال الكلاس الأب (Parent) وتشغلها جوه الكلاس الابن (Child).

  • بتشغّل الـ __init__ بتاعة الأب فمش بنكتب نفس كود الداتا المشتركة مرتين.
  • الابن بيورث كل الـ Attributes والـ Methods من الأب.
  • super() مش بتعطي الكلاس "عدد لا نهائي من الـ Attributes" — دي معلومة غلط!
📌 من الامتحان 2025: super() مش بتضيف attributes غير محدودة — ده كلام غلط. هي بس بتديك أداة توصل لدوال الـ Parent Class.
🔒 Private vs Public في Python

Python مافيهاش حاجة اسمها Private بالمعنى الحرفي زي Java! لكن في convention (اتفاقية) بين المبرمجين:

✅ Public (عام)

  • أي attribute أو method عادي
  • مثل: self.name
  • يقدر أي كود من بره الكلاس يوصله

⚠️ "Private" by Convention

  • بتبدأ بـ underscore _name
  • مثل: self._password
  • مش قانون — Convention بس
  • بيقول "متعدلوش من بره!"
06

Composition vs Inheritance — "has a" vs "is a"

التفكير الصح في تصميم الكلاسات

🧠 فين نستخدم الوراثة وفين لأ؟

قبل ما تستخدم الـ Inheritance، اسأل نفسك: هل العلاقة بين الكلاسين هي "is a" ولا "has a"؟

🧬 Inheritance — "is a"

  • Student IS A Person
  • Car IS A Vehicle
  • استخدم Inheritance هنا
  • الابن بيورث كل حاجة من الأب

🔧 Composition — "has a"

  • Course HAS AN Instructor
  • Car HAS AN Engine
  • استخدم Composition هنا
  • Object جوه Object
PYTHON — Composition مثال
class Instructor:
    def __init__(self, name):
        self.name = name

class Course:
    def __init__(self, title, instructor_name):
        self.title = title
        # Course "has an" Instructor — مش Course "is" Instructor
        self.instructor = Instructor(instructor_name)

    def show(self):
        print(f"{self.title} taught by {self.instructor.name}")

course1 = Course("Python", "Dr. Mohamed")
course1.show()  # Python taught by Dr. Mohamed
💡 القاعدة البسيطة: Inheritance = "is a". Composition = "has a". لا تستخدم Inheritance لمجرد إنها موجودة — استخدمها بس لما العلاقة منطقية فعلاً.
07

File Handling — التعامل مع الملفات

حفظ الداتا بره الـ RAM

📂 ليه بنستخدم الملفات في الـ Backend؟

المتغيرات بتتمسح أول ما البرنامج يقفل. لو عايز تحفظ Logs (سجلات) أو Settings أو تصدّر بيانات أو تقرأ ملفات تهيئة — بنستخدم الملفات.

بنفتح الملف بالدالة open(filename, mode) وبعدين نستخدمه.

📝 Reading Methods — طرق القراءة

  • read() — بيقرأ الملف كله كـ String واحد
  • readline() — بيقرأ سطر واحد بس
  • readlines() — بيقرأ كل السطور ويرجعها في List

✍️ Writing Methods — طرق الكتابة

  • write(text) — بيكتب نص في الملف
  • writelines(list) — بيكتب list من الأسطر
  • الـ \n بيعمل سطر جديد في الملف
🗂️ File Modes — أوضاع فتح الملف

كل mode بيفتح الملف بطريقة مختلفة. لازم تعرف الفرق كويس:

"r"
Read
للقراءة فقط. لو الملف مش موجود — FileNotFoundError!
"w"
Write
للكتابة. بيمسح المحتوى القديم! لو مش موجود بيخلقه.
"a"
Append
بيضيف في آخر الملف بدون مسح. لو مش موجود بيخلقه.
"x"
Create
بيخلق ملف جديد. لو الملف موجود بالفعل — Error!
🚨 تحذير مهم جداً: الـ "w" mode بيمسح كل المحتوى القديم! لو عايز تحتفظ بالمحتوى القديم وتضيف عليه، استخدم "a" مش "w".
🛡️ الأسلوب الأأمن: with open(...)

لو استخدمت open() العادية، لازم تقفل الملف في الآخر بـ file.close(). الأفضل نستخدم with open() لأنها بتقفل الملف أوتوماتيك أول ما البلوك يخلص، حتى لو حصل Error في النص.

PYTHON — كتابة بـ with open
# كتابة — "w" بيمسح القديم ويكتب جديد
with open("students.txt", "w") as file:
    file.write("Mona\n")   # \n = سطر جديد
    file.write("Ali\n")
# الملف اتقفل لوحده هنا!

# إضافة — "a" بيحتفظ بالقديم ويضيف
with open("students.txt", "a") as file:
    file.write("Nour\n")   # هيتضاف في الآخر
PYTHON — قراءة بأساليب مختلفة
# read() — كل الملف في String واحد
with open("students.txt", "r") as file:
    content = file.read()
    print(content)

# readlines() — كل سطر عنصر في List
with open("students.txt", "r") as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip()) # strip يشيل \n
08

JSON & File Errors — الجيسون وأخطاء الملفات

ازاي بنبعت ونستقبل داتا في الويب؟

🐞 أشهر أخطاء الملفات
  • FileNotFoundError: بتظهر لو استخدمت "r" على ملف مش موجود أو مساره غلط. الحل: try/except.
  • PermissionError: لو البرنامج مش واخد صلاحية يدخل على الملف أو يكتب فيه.
PYTHON — معالجة أخطاء الملفات بـ try/except
try:
    with open("data.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("الملف مش موجود — File not found!")
except PermissionError:
    print("مفيش صلاحية للوصول للملف ده!")
🌐 الـ JSON وأهميته في الـ Backend

الـ JSON (JavaScript Object Notation) هي طريقة بنرتب بيها البيانات عشان ننقلها بسهولة بين الـ Backend والـ Frontend. شكلها في Python شبه الـ Dictionary بالظبط.

لما يكون عندك Object، مينفعش ترميه زي ما هو في ملف JSON! لازم الأول تحوله لـ Dictionary (العملية دي اسمها Serialization).

PYTHON — json.dump و json.load
import json

student_data = {"name": "Mona", "level": 2, "dept": "IS"}

# json.dump(): بتحفظ الـ dict في ملف JSON
with open("student.json", "w") as f:
    json.dump(student_data, f, indent=4)  # indent بتخلي شكله منسق

# json.load(): بتقرأ من ملف JSON وترجعه dict
with open("student.json", "r") as f:
    data = json.load(f)
    print(data["name"])   # Mona

# json.dumps(): بتحوّل dict لـ String JSON (مش لملف)
json_string = json.dumps(student_data)

# json.loads(): بتحوّل String JSON لـ dict
back_to_dict = json.loads(json_string)
الدالةالاستخداماتجاه التحويل
json.dump()كتابة dict في ملف JSONdict → file
json.load()قراءة من ملف JSONfile → dict
json.dumps()تحويل dict لـ Stringdict → string
json.loads()تحويل String لـ dictstring → dict
🔗 OOP + Files معًا — المثال الكامل

ربط الـ OOP بالـ File Handling: بنحفظ بيانات الـ Objects في ملف JSON!

PYTHON — حفظ Objects في JSON
import json

class Student:
    def __init__(self, name, level, dept):
        self.name = name
        self.level = level
        self.dept = dept

    # بنحول الـ Object لـ dict عشان نحفظه في JSON (Serialization)
    def to_dict(self):
        return {
            "name": self.name,
            "level": self.level,
            "dept": self.dept
        }

# إنشاء Objects
s1 = Student("Mona", 2, "IS")
s2 = Student("Ali", 3, "CS")

# حفظ في JSON file
students_list = [s1.to_dict(), s2.to_dict()]
with open("students.json", "w") as f:
    json.dump(students_list, f, indent=4)

print("✅ تم حفظ بيانات الطلاب في students.json")
💡 ليه to_dict؟ لأن الـ Object مباشرة مش قابل للتحويل لـ JSON. لازم يبقى dict أولاً. العملية دي اسمها Serialization وهي أساسية في الـ Backend APIs.
🎯

أسئلة امتحانات OOP & File Handling

كل أسئلة المحاضرة دي من امتحانات 2021 + 2025 — مرتبة حسب ترتيب الشرح 🇪🇬

Q1 Final 2021 — Q.26
Which statement is correct about this Python code?
class Name:
    def __init__(self, name):
        self.name = name

name1 = Name('ABC')
name2 = name1
A
It will throw an error as multiple references to the same object is not possible.
B
id(name1) and id(name2) will have the same value.
C
They are completely separate objects in memory.
D
All of the above.
✅ الإجابة الصح: B
لما بتعمل name2 = name1 إنت مش بتعمل نسخة جديدة من الـ Object! إنت بس بتعمل "إشارة" جديدة (Reference) لنفس المكان في الذاكرة. فالاتنين بيكون ليهم نفس الـ id() بالظبط. Python's id() بيرجع عنوان الـ Object في الذاكرة — وطالما الاتنين بيشاوروا على نفس المكان، الـ id هيبقى واحد.
Q2 Final 2025 — T/F Q.19
In Python, to create a class that inherits from another class we use inherits keyword.
A
True
B
False
✅ الإجابة الصح: B — False
Python مفيهاش كلمة اسمها inherits! عشان نورث بنستخدم الأقواس العادية: class Child(Parent):. الفخ ده عشان يلخبطك مع Java اللي بتستخدم extends أو C# اللي بتستخدم :. في Python: الأقواس = الوراثة.
Q3 Final 2025 — T/F Q.20
In Python, when using the super() function, the child class will NOT inherit the methods and properties from the parent class.
A
True
B
False
✅ الإجابة الصح: B — False
العكس تماماً! دالة super() هي اللي بنستخدمها عشان ننادي دوال الأب (زي الـ __init__) ونضمن إن الابن ورث واستفاد من خصائص الأب بالكامل. super() بتمكّن الوراثة مش بتمنعها!
Q4 Final 2025 — T/F Q.10
The super() function in Python enables a class to have unlimited number of attributes.
A
True
B
False
✅ الإجابة الصح: B — False
دالة super() ملهاش أي علاقة بعدد الـ Attributes! هي مجرد أداة عشان توصل لدوال الـ Parent Class. إنت أصلاً تقدر تعمل عدد لا نهائي من الـ Attributes في أي كلاس حتى بدون ما تستخدم super().
Q5 Final 2025 — Q.46
In JavaScript, what is the purpose of the constructor method in a class?
A
To define static properties of a class.
B
To initialize object properties.
C
To inherit methods from another class.
D
To execute a class directly.
✅ الإجابة الصح: B — To initialize object properties
الـ constructor في JavaScript هو نفس الـ __init__ في Python — بيتنادى أوتوماتيك لما تعمل Object جديد ووظيفته يهيّأ الـ properties (الخصائص) بتاعة الـ Object. المفهوم واحد في اللغتين، بس الاسم مختلف.
Q6 Final 2025 — Q.47
In JavaScript, what does the super keyword do?
A
Creates a new object in the class.
B
Defines a static method.
C
Calls the parent class's constructor.
D
Overrides the parent class methods.
✅ الإجابة الصح: C — Calls the parent class's constructor
كلمة super في JavaScript زي دالة super() في Python تماماً — بتنادي الـ Constructor بتاع الـ Parent Class. وده بيضمن إن الـ Child Class ورث الـ properties بتاعت الأب وهيّأها صح. مفهوم متشابه في اللغتين!
Q7 Final 2021 — Q.27
What will the following Python code print?
lst = []
nums = [15, 6]
lst.append(nums)
nums = [10, 30, 20]
lst.append(nums)
lst.sort()
print(lst)
A
[6, 10, 15, 20, 30]
B
[[6, 15], [10, 20, 30]]
C
[[15, 6], [10, 30, 20]]
D
[[10, 30, 20], [15, 6]]
✅ الإجابة الصح: D — [[10, 30, 20], [15, 6]]
lst.append(nums) بيحط الـ list كـ عنصر واحد جوه الـ lst. لما nums اتغيرت لـ [10,30,20]، الـ reference القديمة اللي في lst لسه شايلة [15,6] لأن nums اتعينت من جديد مش اتعدلت. lst.sort() بيرتب الـ lists بالمقارنة: [10,...] < [15,...] فـ[10,30,20] بتيجي أول.
Q8 Final 2021 — Q.59
What will the following Python code print?
x = {"name": "Ahmed", "id": "1", "mobile": 123456789, "mobile": 987654321}
print(x)
A
{'name': 'Ahmed', 'id': '1', 'mobile': 123456789, 'mobile': 987654321}
B
{'name': 'Ahmed', 'id': '1', 'mobile': 123456789}
C
{'name': 'Ahmed', 'id': '1', 'mobile': 987654321}
D
Error! As you cannot have duplicate keys in a dictionary.
✅ الإجابة الصح: C
في Python الـ Dictionary مينفعش يبقى فيها نفس الـ key أكتر من مرة. لو حصل كده، القيمة الأخيرة بتغلب وبتبقى هي اللي محفوظة. فـ mobile الأخيرة (987654321) هي اللي هتتحفظ وهتتطبع. مفيش Error.
Q9 Final 2021 — Q.60
What will the following Python code return?
def f(**person):
    print("Person's name is " + person["name"])

f(name="Ahmed", age=10)
A
Person's name is Ahmed
B
Person's name is Ahmed and Age is 10
C
Error as the function f doesn't take except one argument
D
Error as the function f doesn't take an argument called "name"
✅ الإجابة الصح: A — Person's name is Ahmed
**person بيخلي الدالة تقبل أي عدد من الـ keyword arguments وتحطهم في dict اسمه person. فـperson هيبقى {"name": "Ahmed", "age": 10}. بعدين person["name"] بيرجع "Ahmed". الدالة بتطبع "Person's name is Ahmed" بس — مش الـ age.
Q10 Final 2021 — Q.61
What will the following Python code return?
y = lambda x: x / 20
print(y(100))
A
Error as there is no function called y
B
100/20
C
5.0
D
y(100)
✅ الإجابة الصح: C — 5.0
الـ lambda في Python هي دالة مجهولة بسيطة (Anonymous Function). y = lambda x: x / 20 بيعمل دالة بتاخد x وبترجع x/20. لما بنقول y(100) — بترجع 100/20 = 5.0. ممكن نستخدم lambda مع map وfilter وreduce.
Q11 Final 2025 — T/F Q.21 & Q.22
In the following statement: myNumbers = [1, 2, 3] then x = myNumbers.pop() — The removed item will be 1.
A
True
B
False
✅ الإجابة الصح: B — False
دالة pop() من غير arguments بتشيل آخر عنصر في الـ list. فـ x = myNumbers.pop() هتشيل 3 (مش 1) وتحطه في x. الـ list هتبقى [1, 2]. لو عايز تشيل عنصر معين بالـ index، بتكتب pop(0) مثلاً.
Q12 Final 2025 — T/F Q.12 & Q.13
In Python, to append elements from another list to the current list, use the update() method.
A
True
B
False
✅ الإجابة الصح: B — False
للـ List: بنستخدم extend() عشان نضيف عناصر من list تانية.
للـ Set: بنستخدم update() عشان نضيف عناصر من set تانية.
update() هي method خاصة بالـ Set والـ Dictionary — مش الـ List!
Q13 Final 2025 — T/F Q.24
my-var is an incorrect variable name in Python.
A
True
B
False
✅ الإجابة الصح: A — True
في Python، أسماء المتغيرات مينفعش تحتوي على - (hyphen/minus). Python بيفسّر my-var كإنها عملية طرح (my minus var)! الصح بنستخدم underscore: my_var. قواعد التسمية الصح: حروف، أرقام، underscore — وتبدأ بحرف أو underscore.