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

Python
Essentials

الدليل الشامل لأساسيات Python — المتغيرات، أنواع البيانات، الشروط، اللوبات، الدوال، الـ Collections وأكتر — شرح بالعربي مع الحفاظ على كل المصطلحات التقنية 🇪🇬🐍

9
قسم شرح
22+
سؤال امتحان حقيقي
2021–2025
سنوات الامتحانات
نجاح 🎯
01

Why Python? — ليه Python للـ Backend؟

إعداد البيئة خطوة خطوة

💡 ليه Python تحديداً؟

Readable (مقروءة): الكود بيتكلم بلغة قريبة من اللغة الإنجليزية العادية — تقدر تركز على المنطق بدل الأقواس والفواصل.

Productive (إنتاجية عالية): تقدر تبني Prototype بسرعة وتختبر الأفكار في وقت أقل بكتير من لغات تانية.

Ecosystem ضخم: عندها Django و Flask و FastAPI وآلاف المكتبات الجاهزة.

مناسبة للتعليم: بتخلي الطالب يتعلم المنطق البرمجي بسهولة قبل ما يتعامل مع تعقيدات لغات تانية.

🔗 ربط بالمستقبل: لما تشتغل مع Django، هتلاقي إن كل الـ Views عبارة عن Functions بايثون. كل الـ Models عبارة عن Classes بايثون. كل حاجة هتتعلمها النهارده هتشوفها فيه.
🛠️ الأدوات المطلوبة — Tools Setup
1
تنزيل Python من الموقع الرسمي
اختار أحدث Python 3. المهم جداً: أثناء التثبيت على Windows، فعّل خيار "Add Python to PATH" — من غير ده الـ Terminal مش هيعرف يشغل Python!
2
التحقق من التثبيت في الـ Terminal
افتح Command Prompt أو PowerShell واكتب: python --version أو py --version — لو ظهر رقم الإصدار، كل حاجة تمام!
3
تنزيل VS Code وتثبيت Python Extension
VS Code هو الـ Editor. بعد ما تفتحه، اتجه لـ Extensions وحمّل "Python" بتاع Microsoft — ده بيدي الكود ألوان ودعم زي Autocomplete.
4
أنشئ مجلد للمحاضرة وشغّل أول ملف
أنشئ مجلد زي python_backend_course، اعمل ملف first_program.py، واكتب print("Hello!") وشغّله من الـ Terminal بالأمر: python first_program.py
⚠️ نقطة مهمة: الـ Terminal مش مخيف! هو مجرد طريقة نصية للكلام مع الكمبيوتر. ولاحقاً أوامر Django زي runserver وmigrate هتتنفذ منه كمان.
02

Variables & Data Types — المتغيرات وأنواع البيانات

أساس أي برنامج — إزاي بنحفظ المعلومات؟

📦 Variables — المتغيرات

المتغير (Variable) زي الصندوق المتسمّي — بنحط فيه قيمة ونستخدمها بعدين. علامة = هي الـ Assignment Operator، يعني "حط القيمة دي في المتغير ده".

PYTHON — Variables
student_name = "Mona"     # str — نص
age = 20                 # int — رقم صحيح
gpa = 3.8                # float — رقم عشري
is_active = True         # bool — صح أو غلط
course = "Backend Python"

print(student_name)
print(type(age))         # بيطبع: <class 'int'>
📌 دالة type(): بتعرفك نوع المتغير — استخدمها لما الكود بيطلع نتيجة غريبة. كتير من الأخطاء بتيجي من إنك مش عارف النوع الحقيقي للقيمة.
📏 قواعد تسمية المتغيرات — Naming Rules

✅ صح

VALID NAMES
student_name = "Ali"
score1 = 90
_private = "hidden"
myVar = 5

❌ غلط

INVALID NAMES
1score = 90  # يبدأ برقم ❌
my-var = 5   # فيه شرطة ❌
my var = "x" # فيه مسافة ❌
for = 1     # كلمة محجوزة ❌
🚨 من امتحان 2025: الاسم my-var هو اسم غلط في Python — الشرطة العادية - مش مسموح بيها في أسماء المتغيرات. استخدم الشرطة السفلية my_var بدلها ✅
📊 Data Types — أنواع البيانات الأساسية
النوعالاسممثالالاستخدام
strString"Ali"أسماء، ايميلات، رسائل، أي نص
intInteger20أعداد صحيحة زي السن والعدد
floatFloat3.75أرقام عشرية زي الـ GPA والسعر
boolBooleanTrue / Falseحالات زي logged_in, is_admin
⚡ نقطة امتحان مكررة: القسمة العادية / في Python دايماً بترجع float. يعني 10 / 2 = 5.0 مش 5! لو عايز عدد صحيح استخدم // (Integer Division).
💡 f-Strings: الطريقة الأفضل لعرض متغيرات جوا نص هي الـ f-string: f"اسمي {name} وسني {age}" — أوضح وأنضف من الـ Concatenation بـ +.
PYTHON — f-Strings
name = "Sara"
city = "Cairo"

# الطريقة القديمة (Concatenation)
print("اسمي " + name + " من " + city)

# الطريقة الأحسن (f-string) ✅
print(f"اسمي {name} من {city}")
03

Input / Output & Comments — الإدخال والإخراج والتعليقات

إزاي البرنامج يتكلم مع المستخدم

⌨️ input() — استقبال بيانات

دالة input() بتوقف البرنامج وتستنى المستخدم يكتب حاجة. النقطة المهمة: input() دايماً بترجع String، حتى لو المستخدم كتب رقم!

PYTHON
name = input("اكتب اسمك: ")
print(f"أهلاً {name}!")
🔄 Type Casting — تحويل النوع

عشان تحول الـ String الجاي من input() لرقم، لازم تعمل Type Casting. استخدم int() للأعداد الصحيحة وfloat() للعشرية.

PYTHON
# int Casting
age = int(input("السن: "))
# float Casting
price = float(input("السعر: "))

print(age + 1)  # شغال ✅
#️⃣ Comments — التعليقات

التعليق بيبدأ بـ # وبيتجاهله Python عند التشغيل. استخدمه عشان تشرح النية وراء الكود — مش عشان تشرح الواضح.

❌ تعليق مش مفيد

BAD
# بطبع الاسم
print(name)

✅ تعليق مفيد

GOOD
# input() بترجع string
# لازم نحوّل لـ int للحساب
age = int(input("السن: "))
04

Operators & Conditions — العمليات والشروط

إزاي البرنامج يفكر ويتخذ قرارات؟

Arithmetic Operators — العمليات الحسابية
الرمزالاسممثالالنتيجة
+Addition10 + 313
-Subtraction10 - 37
*Multiplication10 * 330
/Division10 / 33.333... (float!)
//Integer Division10 // 33 (بدون كسر)
%Modulus (باقي القسمة)10 % 31
**Exponent (الأسس)2 ** 38
🚨 فخ الامتحان الأول: القسمة العادية / دايماً تطلع float حتى لو الناتج عدد صحيح. 10 / 2 = 5.0 وليس 5!
🔍 Comparison & Logical Operators

Comparison Operators — نتيجتهم دايماً True أو False:

PYTHON
score = 75
print(score == 75)  # True
print(score != 100) # True
print(score > 50)   # True
print(score <= 70)  # False

Logical Operators — لدمج أكتر من شرط:

PYTHON
age = 20
has_id = True

# and: لازم الاتنين صح
print(age >= 18 and has_id)  # True
# or: واحد بس يكفي
print(age < 18 or has_id)   # True
# not: يعكس النتيجة
print(not has_id)             # False
⚠️ = vs ==: علامة = بتحط قيمة في متغير (Assignment). علامة == بتقارن قيمتين (Comparison). الخلط بينهم من أشهر الأخطاء!
🔀 if / elif / else — الجمل الشرطية

Python بتعتمد على الـ Indentation (المسافات البادئة) عشان تعرف الـ Blocks. مفيش أقواس {} زي باقي اللغات. لو نسيت المسافة هيطلع IndentationError!

PYTHON — if / elif / else
mark = 87

if mark >= 90:
    print("Excellent")      # مسافة 4 بادئة ✅
elif mark >= 80:           # elif = "else if"
    print("Very Good")
elif mark >= 65:
    print("Good")
else:
    print("Need Improvement")
📌 Nested Conditions (شروط متداخلة): تقدر تحط if جوا if تاني — مفيد لحالات زي Login ثم فحص الـ Role. لو logged_in صح، فافحص هل هو admin ولا لأ.
PYTHON — Nested Conditions (مثال Backend واقعي)
logged_in = True
is_admin = False

if logged_in:
    if is_admin:
        print("افتح لوحة الأدمن")
    else:
        print("افتح لوحة الطالب")
else:
    print("من فضلك سجّل دخولك")
🚨 من امتحان 2021 — سؤال الـ Indentation:
if 2 < 1: [indented] print("Two is less than one!") [not-indented] print("Two is less than one!")
النتيجة: الـ print الأولى مش هتتنفذ (الشرط غلط)، الثانية هتتنفذ دايماً لأنها بره الـ if.
05

Loops — for & while

تنفيذ نفس الكود أكتر من مرة بشكل أوتوماتيكي

🔁 for Loop

الـ for بنستخدمه لما عارف عدد التكرارات. دالة range() بتولد أرقام:

PYTHON
# range(5) = 0, 1, 2, 3, 4
for i in range(5):
    print(i)

# range(1,6) = 1, 2, 3, 4, 5
for i in range(1, 6):
    print(i)

# Loop على عناصر قائمة
students = ["Ali", "Mona", "Sara"]
for student in students:
    print(student)
⚡ من امتحان 2024: لو كتبت for i in range(5); بفاصلة منقوطة بدل النقطتين فوق بعض، هيطلع SyntaxError!
🔄 while Loop

الـ while بيكمل طالما الشرط True. مهم دايماً تعدّل المتغير جوا اللوب عشان متدخلش في Loop لا نهائي!

PYTHON
count = 1

while count <= 5:
    print(count)
    count += 1   # مهم! عشان اللوب يوقف

# Output: 1, 2, 3, 4, 5
🛑 break, continue, pass

🔴 break

  • يخرج من اللوب فوراً
  • يوقف كل التكرار

🟡 continue

  • يتخطى الفردة الحالية
  • يكمل اللوب للفردة اللي بعدها

⚪ pass

  • ما بيعملش حاجة
  • Placeholder فاضي للكود
PYTHON — break & continue
for i in range(1, 6):
    if i == 3:
        continue    # يتخطى 3
    if i == 5:
        break       # يوقف عند 5
    print(i)

# Output: 1, 2, 4
06

List & Tuple — القوائم والـ Tuples

هياكل بيانات مرتبة — الفرق بين المتغير والثابت

📋 List — القائمة [ ]

القائمة بتخزن عناصر بالترتيب وبتقدر تعدل فيها. كل عنصر بيبدأ من Index رقم 0.

PYTHON — List Operations
students = ["Ali", "Mona", "Sara"]
print(students[0])   # Ali
print(students[-1])  # Sara (الأخير)

students.append("Nour")  # يضيف للآخر
students.remove("Ali")  # يحذف بالقيمة
students.pop()          # يحذف ويرجع الأخير
students.pop(0)        # يحذف الأول
print(len(students))  # عدد العناصر
PYTHON — List Slicing
lst = [0, 1, 2, 3, 4]
# list[start:end] — end مش متضمنة!
print(lst[1:3])   # [1, 2]

txt = "Hello, My Friend"
print(txt[:8])   # "Hello, M"
# يبدأ من الأول حتى index 7
PYTHON — Sorting
x = ['C', 'b', 'a']
x.sort()
print(x)  # ['C', 'a', 'b'] ← C أولاً!
# الحروف Capital بتيجي قبل Small

y = ['C', 'b', 'A']
y.sort(key=str.lower)
print(y)  # ['A', 'b', 'C']
# key=str.lower: يرتب بدون اعتبار حالة الحرف
# لكن يحافظ على شكله الأصلي!
🚨 من امتحانات 2021 و2025:
sort() على list من lists بيقارن أول عنصر فقط
sort(key=str.lower) يرتب بدون اعتبار الـ Case لكن يحافظ على الشكل الأصلي
pop() بدون argument تشيل آخر عنصر دايماً
📌 Tuple — ( )

الـ Tuple زي الـ List بالظبط، الفرق الوحيد إنها Immutable — مش ممكن تعدل فيها بعد ما تنشئها. بتستخدمها لما البيانات المفروض تفضل ثابتة.

PYTHON — Tuple
point = (10, 20)
print(point[0])   # 10

# Tuple بعنصر واحد — لازم الفاصلة!
t1 = ("apple",)    # ✅ Tuple
t2 = ("apple")     # ❌ String مش Tuple!

# Tuple Unpacking
tup = (1, 2, 3, 4)
(*k,) = tup
print(k)  # [1, 2, 3, 4]
🚨 من امتحان 2025 (Q70 & Q71):
(*k,) = (1,2,3,4) → يحول كل العناصر لـ List: [1, 2, 3, 4]
(x, *k, y, z, m) = (1,2,3)ValueError! المتغيرات الإجبارية (x, y, z, m) أكتر من العناصر.
⚡ من امتحان 2025: x = ("apple", "banana", "cherry") — هذه ليست List! دي Tuple لأنها بتستخدم قوسين عاديين ( ) مش أقواس مربعة [ ].
PYTHON — append() vs extend()
lst1 = [1, 2]
lst2 = [3, 4]

lst1.append(lst2)    # يضيف الـ list كعنصر واحد
print(lst1)           # [1, 2, [3, 4]]

lst1 = [1, 2]
lst1.extend(lst2)    # يضيف عناصر lst2 كلها
print(lst1)           # [1, 2, 3, 4] ✅
🚨 من امتحان 2025: لدمج عناصر list في list تانية، استخدم extend() — مش update() (ده للـ Set والـ Dict) ولا append() (ده يضيف كعنصر واحد كامل).
07

Set & Dictionary — المجموعات والقواميس

بيانات فريدة وبيانات بـ Key-Value Pairs

🎲 Set — المجموعة { }

الـ Set بتخزن قيم فريدة (مش بتكرر) وبدون ترتيب (Unordered) وبدون Index. يعني مش تقدر تقول s[0]!

PYTHON — Set
colors = {"red", "blue", "red", "green"}
print(colors)  # red واحدة بس!

# pop() في Set عشوائي!!
s = {1, 2, 3}
x = s.pop()   # مش عارف أيه هيتمسح!

# update() للـ Set: يضيف عناصر Set تانية
s1 = {1, 2}
s2 = {3, 4}
s1.update(s2)  # {1, 2, 3, 4}
🚨 من امتحانات 2021, 2025 (أسئلة متكررة):
• الـ Set هي Unordered AND Unindexed (مش Unordered AND Indexed)
pop() في Set يمسح عنصر عشوائي — مش دايماً الأخير ولا الأول
• لدمج Set في Set تانية: استخدم update() (مش extend())
📖 Dictionary — { key: value }

الـ Dictionary بيخزن البيانات كأزواج من Key: Value. مناسب جداً لبيانات الـ Profile أو الـ Settings. الـ Keys لازم تكون فريدة.

PYTHON — Dictionary
student = {
    "name": "Laila",
    "age": 20,
    "dept": "IS"
}

print(student["name"])   # Laila

# تحديث قيمة
student["age"] = 21

# إضافة Key جديد
student["gpa"] = 3.9

print(student)
🚨 من امتحان 2021 — قاعدة مهمة:
لو ضفت Key موجود في الـ Dictionary، القيمة الجديدة بتكتب فوق القديمة بدون Error.
مثال: {"name": "Ahmed", "mobile": 123, "mobile": 987} → الـ mobile هيكون 987 (الأخيرة)
💡 y = d — Reference مش Copy: لما تكتب y = d مش بتعمل نسخة جديدة — الاتنين بيشاوروا على نفس الـ Dictionary. لو غيّرت في d، y هتتأثر برضو. عشان تعمل نسخة حقيقية استخدم d.copy() (بحرف سمول!)
🗃️ مقارنة هياكل البيانات — Data Structures Comparison
الهيكلالأقواسمرتبة؟لها Index؟تتعدل؟بتكرر؟استخدامها
list[ ]✅ نعم✅ نعم✅ نعم✅ نعمقوائم متغيرة بترتيب
tuple( )✅ نعم✅ نعم❌ لأ✅ نعمبيانات ثابتة (Immutable)
set{ }❌ لأ❌ لأ✅ نعم❌ لأقيم فريدة بدون تكرار
dict{ }✅ نعمبالـ Key✅ نعمKeys لأبيانات بتسمية (Key-Value)
💡 قاعدة الاختيار: بيانات بتتغير وبالترتيب؟ → List. ثابتة؟ → Tuple. بدون تكرار؟ → Set. كل قيمة ليها اسم (Label)؟ → Dictionary (مثلاً بيانات Student: name, age, dept).
08

Functions & Scope — الدوال ونطاق المتغيرات

كود قابل لإعادة الاستخدام — أساس Django Views

⚙️ تعريف الدوال — def

الـ Function بلوك كود بينفذ مهمة معينة ومش بيشتغل إلا لما تناديه (Call). بنعرفه بكلمة def. المهم تفهم الفرق بين تعريف الدالة واستدعاءها!

دالة بسيطة + Parameters

PYTHON
def greet(name):
    print(f"مرحباً {name}")

greet("Mona")
greet("Omar")

print vs return — الفرق المهم

PYTHON
def add(a, b):
    return a + b  # يرجع القيمة

result = add(5, 7)
print(result)   # 12
⚡ print vs return: print بيعرض للشاشة وبس. return بيرجع القيمة للبرنامج عشان تستخدمها بعدين. كتير من الـ Django Views بترجع قيم بـ return.
*args و **kwargs
PYTHON
# *args: يجمع arguments في Tuple
def show(*args):
    print(args)

show(1, 2, 3)  # (1, 2, 3)

# **kwargs: يجمع keyword args في Dict
def person_info(**person):
    print("اسمه: " + person["name"])

person_info(name="Ahmed", age=10)
# يطبع: اسمه: Ahmed
# الـ age بيتجاهل لأن الكود مش محتاجه
📌 من امتحان 2021: **person بيجمع البيانات في Dictionary. الدالة بتطبع person["name"] بس — الـ age بيتجاهل بدون Error. ✅
λ Lambda Functions

الـ Lambda دالة سريعة بسطر واحد بدون اسم. فكرتها: lambda arguments: expression

PYTHON — Lambda
# سؤال بيتكرر في 2021 و2024!
y = lambda x: x / 20
print(y(100))   # 5.0 (مش 5!)
# القسمة بـ / دايماً float!

# دالة Lambda بدون Args
f = lambda: 10
print(f())   # 10
🚨 من امتحانات 2021, 2024: y = lambda x: x / 20 ثم y(100) = 5.0 وليس 5! دي من أكتر الأسئلة اللي بتتكرر.
🔭 Scope — نطاق المتغيرات

المتغير اللي بتعرّفه جوا Function هو Local Variable — بيعيش بس جوا الـ Function ومينقدرش تستخدمه بره منها.

PYTHON — Scope
def test():
    message = "أنا جوا الدالة"  # Local
    print(message)

test()
# print(message)  ← هيطلع NameError!
09

Modules, Errors & Files — التنظيم والأخطاء والملفات

Python بتنمو من Script واحد لمشروع ضخم

📦 Modules — الوحدات

الـ Module هو ملف Python بيحتوي كود قابل للاستيراد. Django نفسه مجموعة ضخمة من Modules!

PYTHON — Modules
# استيراد module جاهز
import math
print(math.sqrt(25))  # 5.0
print(math.pi)         # 3.14159...

# استيراد من module ملف ثاني
# helpers.py:
def greet(name): return f"Hello {name}"

# main.py:
from helpers import greet
print(greet("Nour"))
🐛 Error Types — أنواع الأخطاء
النوعالمعنىمثال
SyntaxErrorPython مش فاهم الكودنسيت : بعد if
NameErrorمتغير مش معرّفكتبت اسم غلط
TypeErrorعملية على نوع غلط"a" + 1
IndentationErrorالمسافات البادئة غلطنسيت 4 مسافات
ValueErrorالقيمة مش مناسبةtuple unpacking فشل
🛡️ try / except — معالجة الأخطاء

عشان البرنامج ميقفلش فجأة لو حصل خطأ، بنحيط الكود الخطر بـ try ونتعامل مع الخطأ في except.

PYTHON — try / except
try:
    num = int(input("اكتب رقم: "))
    print(num * 2)
except:
    print("ده مش رقم! اكتب رقم صحيح")
📁 File Handling — التعامل مع الملفات

Python تقدر تقرأ وتكتب في ملفات خارجية باستخدام دالة open(filename, mode).

قراءة ملف

READ
file = open("notes.txt", "r")
content = file.read()
print(content)
file.close()

كتابة ملف

WRITE
file = open("report.txt", "w")
file.write("Backend Lec 2")
file.close()
⚠️ تحذير Mode "w": لو الملف موجود، Mode "w" بيمسح محتواه القديم ويكتب من الأول! استخدم Mode "a" (Append) لو عايز تضيف من غير ما تمسح.
🎯

أسئلة امتحانات Python — 2021 & 2025

22 سؤال حقيقي من الامتحانات مرتبين حسب الشرح مع تفسيرات عربية مفصلة 🇪🇬

Q1 Final 2025 — T/F Q24
my-var is an incorrect variable name in Python. True or False?
A
True
B
False
✅ الإجابة: A — True
انتبه: الإجابة الصح هي A (True) مش B! الاسم my-var فعلاً اسم غلط في Python لأن الشرطة العادية - مش مسموح بيها في أسماء المتغيرات. الصح هو استخدام الشرطة السفلية: my_var ✅. ملاحظة: السؤال بيسأل "هل هو غلط؟" والإجابة True يعني نعم هو غلط.
Q2 Final 2021 — Q58
In the following Python code, what is the output?
if 2 < 1:
    print("Two is less than one!")
print("Two is less than one!")
A
Prints "Two is less than one!" once — only the second print executes
B
Prints the message twice
C
No output
D
Error
✅ الإجابة: A
الشرط 2 < 1 طبعاً غلط (False)، فالـ print اللي جوا الـ if (اللي ليها Indentation) مش هتتنفذ. أما الـ print التانية فهي بره الـ if (مفيش Indentation)، وده معناه إنها هتتنفذ دايماً. المحاضرة بتركز على إن الـ Indentation هي اللي بتحدد إيه جوا الـ Block وإيه بره.
Q3 Final 2021 — Q27
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
[[15, 6], [10, 30, 20]]
C
[[10, 30, 20], [15, 6]]
D
[[6, 15], [10, 20, 30]]
✅ الإجابة: C — [[10, 30, 20], [15, 6]]
الـ lst بيحتوي على list من lists: [[15, 6], [10, 30, 20]]. لما تعمل sort() على list من lists، Python بتقارن أول عنصر فقط في كل sub-list. الـ 10 أصغر من 15، فـ [10, 30, 20] بتيجي قبل [15, 6]. العناصر الداخلية لكل list مش بتتأثر وبتفضل بترتيبها الأصلي.
Q4 Final 2021 — Q77
In Python, the value of [] (empty list) is False. True or False?
A
True
B
False
✅ الإجابة: A — True
في Python أي حاجة فاضية (Empty) قيمتها المنطقية False: القائمة الفاضية []، الـ Dict الفاضي {}، الـ String الفاضية ""، والرقم 0. ده اسمه "Truthy and Falsy Values" في Python.
Q5 Final 2025 — T/F Q26
The output of the following statements is "Hello, My":
b = "Hello, My Friend"
print(b[:8])
A
True
B
False
✅ الإجابة: B — False
الـ Slicing بالصيغة b[:8] بتاخد من أول النص لحد قبل index 8، يعني العناصر من index 0 إلى index 7 فقط. العد هنا:
H(0), e(1), l(2), l(3), o(4), ,(5), space(6), M(7)
إذن الناتج الحقيقي هو "Hello, M" وليس "Hello, My". عشان تطبع "Hello, My" محتاج تستخدم b[:9] لأن حرف y موجود عند index 8.
Q6 Final 2025 — T/F Q28
The output of the following statements is ['a', 'b', 'C']:
X = ['C', 'b', 'a']
X.sort()
print(X)
A
True
B
False
✅ الإجابة: B — False
sort() العادية (بدون key) بتعتمد على كود ASCII. في ASCII، الحروف الـ Capital (A-Z = 65-90) بتيجي قبل الـ Small (a-z = 97-122). يعني 'C' (67) بتيجي قبل 'a' (97) وقبل 'b' (98). النتيجة الصحيحة هي ['C', 'a', 'b'] وليس ['a', 'b', 'C'].
Q7 Final 2025 — T/F Q32
The output of the following Python statements is ['a', 'b', 'c']:
X = ['C', 'b', 'A']
X.sort(key=str.lower)
print(X)
A
True
B
False
✅ الإجابة: B — False
key=str.lower بتخلي الترتيب يعتمد على النسخة الـ Lowercase من الحروف — يعني 'A' و'a' بيتعاملوا كـ 'a'. الترتيب الأبجدي بيطلع: A, b, C. لكن الحروف بتفضل بشكلها الأصلي! يعني الناتج هيكون ['A', 'b', 'C'] وليس ['a', 'b', 'c'].
Q8 Final 2025 — T/F Q21 + Final 2024
In the following statement:
myNumbers = [1, 2, 3]
x = myNumbers.pop()
The removed item will be 3. True or False?
A
True
B
False
✅ الإجابة: A — True
pop() بدون argument دايماً بتشيل آخر عنصر في الـ List. القائمة [1, 2, 3] — آخر عنصر هو 3. يعني x = 3 والقائمة تبقى [1, 2]. (السؤال ده اتكرر في 2024 برضو وكانت الإجابة نفسها).
Q9 Final 2025 — T/F Q22
In the following statement:
myNumbers = [1, 2, 3]
x = myNumbers.pop()
The removed item will be 1. True or False?
A
True
B
False
✅ الإجابة: B — False
pop() بدون argument بتشيل آخر عنصر وهو 3، مش العنصر الأول (1). لو عايز تشيل أول عنصر اكتب pop(0). ده سؤال مصمم عشان يفرق بين الناس اللي فاهمين الـ pop() واللي مش فاهمين.
Q10 Final 2025 — T/F Q12
In Python, to append elements from another list to the current list, use the update() method. True or False?
A
True
B
False
✅ الإجابة: B — False
الخلاصة الامتحانية:
• لدمج List في List تانية: استخدم extend()
• لدمج Set في Set تانية: استخدم update()
• لدمج Dict في Dict تانية: استخدم update()
update() مش بتشتغل على Lists!
Q11 Final 2025 — T/F Q13
In Python, to add items from another set into the current set, use the extend() method. True or False?
A
True
B
False
✅ الإجابة: B — False
عشان تضيف عناصر Set في Set تانية، بنستخدم update() مش extend(). الـ extend() بتشتغل مع الـ List فقط. فخ كتير طلاب بيقعوا فيه لأن الكلمتين شبه بعض!
Q12 Final 2021 — Q78 + Final 2025 — T/F Q7
In Python, a set is a collection which is both unordered AND indexed. True or False?
A
True
B
False
✅ الإجابة: B — False
الـ Set هي Unordered (بدون ترتيب) وكمان Unindexed (بدون Index). مش ممكن تقول s[0]! السؤال ده اتكرر في 2021 و2025 بنفس الصياغة تقريباً — خد بالك منه كويس.
Q13 Final 2021 — Q79
In the following statement:
myNumbers = {1, 2, 3}
x = myNumbers.pop()
The removed item will definitely be 3. True or False?
A
True
B
False
✅ الإجابة: B — False
لأن ده Set مش List! الـ pop() في الـ Set بتشيل عنصر عشوائي (Random) لأن الـ Set مش مرتبة. ممكن يشيل 1 أو 2 أو 3 — مش ضمان. قارن ده بالـ List: pop() في List دايماً بتشيل الآخر.
Q14 Final 2025 — T/F Q23
The following statement:
x = ("apple", "banana", "cherry")
is a definition of a list. True or False?
A
True
B
False
✅ الإجابة: B — False
ده Tuple مش List! الـ Tuple بتستخدم قوسين عاديين ( )، أما الـ List فبتستخدم أقواس مربعة [ ]. الفرق مهم جداً لأن الـ Tuple Immutable (مش ممكن تتعدل) والـ List Mutable.
Q15 Final 2025 — T/F Q34
The following statement:
y = ("apple",)
is a tuple. True or False?
A
True
B
False
✅ الإجابة: A — True
نعم ده Tuple! الـ Tuple بعنصر واحد لازم تحط فاصلة بعد العنصر: ("apple",). لو ما حطتيش الفاصلة: y = ("apple") → ده هيبقى String مش Tuple!
Q16 Final 2025 — Q70
What will be the output of the following Python code?
newtuple = (1, 2, 3, 4)
(*k,) = newtuple
print(k)
A
2,3,4
B
[2,3,4]
C
1,2,3
D
[1, 2, 3, 4]
✅ الإجابة: D — [1, 2, 3, 4]
الصيغة (*k,) = newtuple — النجمة * مع k بتجمع كل العناصر في List. يعني k هيكون [1, 2, 3, 4]. لو كانت (x, *k, y) = (1,2,3,4) فـ x=1, k=[2,3], y=4.
Q17 Final 2025 — Q71
What will be the output of the following Python code?
newtuple = (1, 2, 3)
(x, *k, y, z, m) = newtuple
print(k)
A
2,3
B
[2,3]
C
Python Error (ValueError)
D
[]
✅ الإجابة: C — Python Error
الـ Tuple فيها 3 عناصر فقط، لكن الـ Unpacking بيطلب: x (1 عنصر) + k (0 على الأقل) + y (1) + z (1) + m (1) = 4 عناصر إجبارية كحد أدنى! العناصر مش كافية فبيطلع ValueError. لو كانت (1,2,3,4,5) كانت هتنجح: x=1, k=[2,3], y=4, z=5, m=???... لأ برضو! مفتقرة لـ m.
Q18 Final 2021 — Q59
The following print will return:
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 — duplicate keys not allowed
✅ الإجابة: C
في الـ Dictionary، الـ Keys لازم تكون فريدة. لو حطيت نفس الـ Key أكتر من مرة، Python مش بيطلع Error — بس بيحتفظ بالقيمة الأخيرة فقط. "mobile": 987654321 هي القيمة الأخيرة، فهي اللي بتفضل.
Q19 Final 2021 — Q60
What will be the output of the following Python code?
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 — function doesn't take keyword arguments
D
Error — no "name" key found
✅ الإجابة: A — Person's name is Ahmed
**person بيجمع كل الـ keyword arguments في Dictionary: {"name": "Ahmed", "age": 10}. الكود بيطبع بس person["name"] = "Ahmed". الـ age موجود في الـ Dict لكن الكود مش طالبه، فبيتجاهله بدون Error.
Q20 Final 2021 — Q61 + Final 2024 — Lambda Q
The following statement will return:
y = lambda x: x / 20
print(y(100))
A
Error — no function called y
B
5 (integer)
C
5.0 (float)
D
y(100)
✅ الإجابة: C — 5.0
القاعدة الذهبية اللي بتتكرر في كل امتحان: القسمة العادية بعلامة / في Python دايماً بترجع float. 100 / 20 = 5.0 وليس 5. لو عايز 5 عدد صحيح استخدم 100 // 20.
Q21 Final 2024 — Python Q
After running:
lst = [1, 2, 3, 4]
lst.pop()
what is lst?
A
[2, 3, 4]
B
[1, 2, 3]
C
[1, 2, 4]
D
[1, 2, 3, 4] (unchanged)
✅ الإجابة: B — [1, 2, 3]
pop() بدون argument بتشيل آخر عنصر وهو 4. القائمة تبقى [1, 2, 3].
Q22 Final 2025 — T/F Q6
In Python, format function is used to format the datatypes of the output. True or False?
A
True
B
False
✅ الإجابة: B — False
دالة format() مش بتغير نوع البيانات (Datatypes). هي بس بتنظم وتنسّق طريقة عرض الـ String. اللي بيغير النوع هو الـ Type Casting: int(), float(), str(), bool().