Pythonأنواع المتغيرات في بايثون
مفهوم المتغيرات في بايثون
متغير: تعني variable في اللغة الإنجليزية.
الآن, نريدك أن تفهم المتغيرات على أنها فقط أماكن يتم حجزها في الذاكرة لتخزين البيانات أثناء تشغيل البرنامج.
في بايثون, المبرمج غير مسؤول عن تحديد أنواع المتغيرات التي يعرّفها في برنامجه.
فعلياً, عندما تقوم بتعريف متغير و تضع فيه أي قيمة, سيقوم مفسّر لغة بايثون بتحديد نوع هذا المتغير بناءاً على القيمة التي أسندتها إليه بشكل تلقائي وقت التشغيل.
في بايثون يجب إسناد قيمة إلى المتغير أثناء تعريفه.
المثال الأول
var = 5 # و قيمته 5 var هنا قمنا بتعريف متغير إسمه print(var) # var هنا قمنا بطباعة قيمة المتغير
•سنحصل على النتيجة التالية عند التشغيل.
في بايثون يمكن تعريف عدة متغيرات متساوية في القيمة في وقت واحد.
المثال الثاني
x = y = z = 10 # 10 هنا قمنا بتعريف ثلاث متغيرات قيمتها
print('x = ', x) # x هنا قمنا بطباعة قيمة المتغير
print('y = ', y) # y هنا قمنا بطباعة قيمة المتغير
print('z = ', z) # z هنا قمنا بطباعة قيمة المتغير
•سنحصل على النتيجة التالية عند التشغيل.
y = 10
z = 10
معرفة نوع المتغير في بايثون
لمعرفة نوع أي متغير يمكنك إستخدام الدالة type().
تذكر: نوع المتغير في بايثون غير ثابت لأنه يتغير بشكل تلقائي على حسب نوع القيمة التي يتم تخزينها فيه.
مثال
var = 10 # var هنا وضعنا رقم في المتغير print(type(var)) # لأنها عبارة عن رقم int لاحظ أن نوعها سيكون .var هنا طبعنا نوع قيمة المتغير var = 'harmash' # var هنا وضعنا نص في المتغير print(type(var)) # لأنها عبارة عن نص str لاحظ أن نوعها سيكون .var هنا طبعنا نوع قيمة المتغير
•سنحصل على النتيجة التالية عند التشغيل.
<class 'str'>
أنواع المتغيرات في بايثون
تنقسم أنواع المتغيرات في بايثون إلى 7 أنواع أساسية و هي:
أرقام (Numbers).
نصوص (Strings).
منطقية (Booleans).
مصفوفات ليس لها حجم ثابت يقال لها Lists.
مصفوفات حجمها و قيمها ثابتة, و غير قابلة للتغيير يقال لها Tuples.
مصفوفات ليس لها حجم ثابت, و لا يمكن حذف قيمها, و يمكن إضافة قيم جديدة فيها يقال لها Sets.
جداول تخزن البيانات فيها بطريقة مفايتح (Keys) و قيم (Values) يقال لها Dictionaries.
الأرقام في بايثون
عند تعريف متغير و تخزين رقم فيه, فإن مفسّر لغة بايثون سيقوم بشكل تلقائي بتحديد نوع هذا المتغير بناءاً على نوع القيمة الرقمية التي تم إسنادها إليه.
فإذا وضعت فيه عدد صحيح, يصبح نوعه int. و إذا وضعت فيه عدد عشري ( أي يحتوي على فاصلة ), يصبح نوعه float و هكذا.
أنواع الأرقام في بايثون تنقسم إلى 3 أنواع كما في الجدول التالي.
| النوع | إستخدامه | مثال |
|---|---|---|
int |
يستخدم لتخزين أعداد صحيحة. | x = 3 |
float |
يستخدم لتخزين أعداد تحتوي على فاصلة عشرية. | x = 1.5 |
complex |
يستخدم لتخزين أعداد مركبة (Complex Number) و التي غالباً ما يحتاجها المهندسون عند إجراء عمليات حاسبية معقدة. ملاحظة: هنا يجب وضع الحرف J أو j مباشرةً بعد العدد حتى يعرف مفسّر بايثون أنك تقصد عدد مركب و ليس عدد عادي. |
x = 4J |
في المثال التالي قمنا بتعريف ثلاث متغيرات و كل متغير وضعنا فيه قيمة رقمية مختلفة في النوع و القيمة. بعدها قمنا بعرض نوع كل متغير منهم.
مثال
x = 3 # قيمته عبارة عن عدد صحيح ,x هنا قمنا بتعريف متغير إسمه y = 1.5 # قيمته عبارة عن عدد عشري ,y هنا قمنا بتعريف متغير إسمه z = 4J # قيمته عبارة عن عدد مركب ,z هنا قمنا بتعريف متغير إسمه print(type(x)) # x هنا طبعنا نوع قيمة المتغير print(type(y)) # y هنا طبعنا نوع قيمة المتغير print(type(z)) # z هنا طبعنا نوع قيمة المتغير
•سنحصل على النتيجة التالية عند التشغيل.
<class 'float'>
<class 'complex'>
ملاحظة
صحيح أن مفسّر بايثون يقوم بتحديد أنواع القيم بشكل تلقائي عنك لكن هذا لا يعني أنك غير قادر على تحويل أنواع الأرقام إلى النوع الذي يناسبك.
ستتعرف على دوال خاصة للتعامل مع الأرقام و ستتعلم طريقة تحويل أنواع الأرقام في درس خاص لاحقاً في هذه الدورة.
النصوص في بايثون
لتعريف نص في بايثون نستخدم الرمز ' أو الرمز " أو الرمز """.
هل يوجد فرق بين هذه الرموز؟
بالنسبة للرمز ' و الرمز " فإنه لا يوجد أي فرق بينهما. و يمكن إستخدام أي واحد منهما لتعريف نص يتألف من سطر واحد.
بالنسبة للرمز ''' و الرمز """ فإنه لا يوجد أي فرق بينهما. و يمكن إستخدام أي واحد منهما لتعريف نص كبير يتألف من عدة أسطر.
في المثال التالي قمنا بتعريف ثلاث متغيرات تحتوي على قيم نصية. لاحظ أننا قمنا بتعريف كل متغيير بواسطة رمز مختلف.
المثال الأول
# هنا قمنا بتعريف ثلاث متغيرات تحتوي على قيم نصية
name = 'Mhamad'
job = "Programmer"
message = '''This string that will span across multiple lines. No need to use newline characters for the next lines.
The end of lines within this string is counted as a newline when printed.'''
# هنا قمنا بعرض قيم المتغيرات النصية بأسلوب مرتب
print('Name: ', name)
print('Job: ', job)
print('Message: ', message)
•سنحصل على النتيجة التالية عند التشغيل.
Job: Programmer
Message: This string that will span across multiple lines. No need to use newline characters for the next lines.
The end of lines within this string is counted as a newline when printed.
في المثال التالي قمنا بتعريف نص يحتوي على نفس الرموز التي تستخدم لتعريف النصوص.
المثال الثاني
# يحتوي على قيمة نصية text هنا قمنا بتعريف متغير إسمه text = """In this line we print 'single quotations' In this line we print "double quotations" """ # text هنا قمنا بعرض قيمة المتغير print(text)
•سنحصل على النتيجة التالية عند التشغيل.
In this line we print "double quotations"
ملاحظة
هناك أساليب و دوال خاصة للتعامل مع النصوص سنشرحها في درس خاص لاحقاً في هذه الدورة.
القيم المنطقية في بايثون
النوع bool يستخدم في العادة عند وضع شروط منطقية أو لمعرفة ما إذا تم تنفيذ أمر معين بنجاح أم لا.
عند إسناد القيمة True أو القيمة False إلى المتغير فإنه يصبح من النوع bool.
معلومة تقنية
في الواقع القيمة True تساوي 1 و القيمة False تساوي 0.
في بايثون يفضل إستخدام الصفر و الواحد بدلاً من إستخدام القيم المحجوزة True و False عند التشييك على قيمة المتغير أو على ما سترجعه الدالة.
في المثال التالي قمنا بتعريف متغير إسمه check و أعطيناه القيمة True ثم إستخدمناه في وضع شرط.
مثال
# True و قيمته check هنا قمنا بتعريف إسمه
check = True
# True تساوي check سيتم تنفيذ أمر الطباعة الموضوع هنا إذا كانت قيمة المتغير
if check == True:
print('check = True')
# False أي إذا كانت تساوي True تساوي check سيتم تنفيذ أمر الطباعة الموضوع هنا إذا لم تكن قيمة المتغير
else:
print('check = False')
•سنحصل على النتيجة التالية عند التشغيل.
ملاحظة
بدل الأمر if check == True: كان يمكنك كتابة if check == 1: أو كتابة if check: فقط و الحصول على نفس النتيجة.
تخزين البيانات في List في بايثون
الـ List عبارة عن مصفوفة حجمها غير ثابت و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز [ ] لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) ليس لها حجم ثابت.
في المثال التالي قمنا بتعريف 4 مصفوفات.
المثال الأول
A = [] # هنا قمنا بتعريف مصفوفة فارغة B = [10, 20, 30, 40, 50] # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط C = ['Mhamad', 'Samer', 'Abdullah'] # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط D = [1, 'two', 'three', 4] # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص
في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر, ثم قمنا بإعطائها 4 قيم, ثم قمنا بإضافة عنصر جديد عليها, ثم عرضنا قيمها و عدد عناصرها.
المثال الثاني
# هنا قمنا بتعريف مصفوفة من النصوص تتألف من 4 عناصر
languages = [str] * 4
# هنا قمنا بوضع قيمة في كل عنصر فيها
languages[0] = 'Arabic'
languages[1] = 'French'
languages[2] = 'English'
languages[3] = 'Spanish'
# هنا قمنا بإضافة عنصر جديد على المصفوفة
languages.append('German')
# هنا قمنا بعرض قيم المصفوفة و عدد عناصرها
print('Stored languages:', languages)
print('Number of stored languages is:', len(languages))
•سنحصل على النتيجة التالية عند التشغيل.
Number of stored languages is: 5
ملاحظة
ستتعرف على دوال خاصة للتعامل مع الـ Lists و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.
تخزين البيانات في Tuple في بايثون
الـ Tuple عبارة عن مصفوفة حجمها ثابت و قيمها غير قابلة للتغيير و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز ( ) لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) حجمها و قيمها ثابتة.
في المثال التالي قمنا بتعريف 4 مصفوفات.
المثال الأول
A = () # هنا قمنا بتعريف مصفوفة فارغة
B = (10, 20, 30, 40, 50) # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط
C = ('Mhamad', 'Samer', 'Abdullah') # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط
D = (1, 'two', 'three', 4) # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص
في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر ثابتة, ثم عرضنا قيمها و عدد عناصرها.
المثال الثاني
# هنا قمنا بتعريف مصفوفة ليس لها نوع محدد و تتألف من 4 عناصر
languages = ('Arabic', 'French', 'English', 'Spanish')
# هنا قمنا بعرض قيم المصفوفة و عدد عناصرها
print('Stored languages:', languages)
print('Number of stored languages is:', len(languages))
•سنحصل على النتيجة التالية عند التشغيل.
Number of stored languages is: 4
ملاحظة
ستتعرف على دوال خاصة للتعامل مع الـ Tuples و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.
تخزين البيانات في Set في بايثون
الـ Set عبارة عن مصفوفة ليس لها حجم ثابت و قيمها غير قابلة للتغيير و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز { } لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) ليس لها حجم ثابت و قيمها غير قابلة للتغيير.
في مصفوفات الـ Set يتم تخزين البيانات بشكل عشوائي و ليس بالترتيب كما تم إدخالهم, و السبب في أنه في هذا النوع من المصفوفات لا يتم إعطاء رقم Index خاص لكل عنصر.
لهذا السبب أيضاً, لا يمكنك الوصول لعنصر محدد في Set بشكل مباشر لأنه في الأساس لا يملك رقم Index.
في المثال التالي قمنا بتعريف 4 مصفوفات.
المثال الأول
A = {} # هنا قمنا بتعريف مصفوفة فارغة
B = {10, 20, 30, 40, 50} # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط
C = {'Mhamad', 'Samer', 'Abdullah'} # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط
D = {1, 'two', 'three', 4} # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص
في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر ثابتة, ثم عرضنا قيمها و عدد عناصرها.
المثال الثاني
# هنا قمنا بتعريف مصفوفة ليس لها نوع محدد و تتألف من 4 عناصر
languages = {'Arabic', 'French', 'English', 'Spanish'}
# هنا قمنا بعرض قيم المصفوفة و عدد عناصرها
print('Stored languages:', languages)
print('Number of stored languages is:', len(languages))
•سنحصل على النتيجة التالية عند التشغيل.
Number of stored languages is: 4
ملاحظة
ستتعرف على دوال خاصة للتعامل مع الـ Sets و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.
تخزين البيانات في Dictionary في بايثون
عند إستخدام الـ List أو Tuple فإنك تتعامل مع عناصرهم من خلال أرقام الـ Indices.
فكرة الـ Dictionary هي وضع مفتاح لكل قيمة. عندها تصل لقيمة كل عنصر موجود من خلال المفتاح الخاص فيه.
إذاً الـ Dictionary عبارة جدول تخزن فيه البيانات بطريقة مفاتيح (Keys) و قيم (Values).
بالنسبة لنوع البيانات التي تخزنها بداخل الـ Dictionary فعندك الحرية في تخزين مفاتيح و قيم من أي نوع تريد.
في بايثون نستخدم الرمز { } لتعريف Dictionary.
في المثال التالي قمنا بتعريف Dictionary يتألف من 5 عناصر, ثم عرضنا قيمة العنصر الثالث من خلال المفتاح الخاص فيه.
مثال
# يتألف من 5 عناصر dictionary هنا قمنا بتعريف
dictionary = {
1: 'One',
2: 'Tow',
3: 'Three',
4: 'Four',
5: 'Five'
}
# هنا قمنا بعرض قيمة العنصر الذي يحمل المفتاح رقم 3
print(dictionary[3])
•سنحصل على النتيجة التالية عند التشغيل.
ملاحظة
ستتعرف على دوال خاصة للتعامل مع الـ Dictionaries و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.
هل كل شيء في بايثون عبارة عن كائن؟
الجواب هو نعم. رغم أننا نقول متغير للكائن الذي يحتوي على قيمة رقمية أو نصية, إلا أنه في الواقع عبارة عن كائن و ليس متغير عادي كما يوجد في لغات البرمجة الأخرى.
في حال كنت تستخدم برنامج PyCharm, تلاحظ أنه عند كتابة إسم أي متغير و وضع نقطة مباشرةً بعده, فإنه يظهر لك أنه يمكن إستدعاء دوال أو خصائص موجودة فيه!
لاحظ الصورة التالية.
إذاً لو لم تكن هذه المتغيرات في الحقيقة عبارة عن كائنات لما ظهر لنا أي شيء عند وضع النقطة.
مفهوم العوامل في بايثون
عامل: تعني operator في اللغة الإنجليزية, و العامل عبارة عن رمز له معنى محدد في بايثون.
يمكننا تصنيف العوامل في بايثون إلى 7 مجموعات أساسية و هي:
Arithmetic Operators
Comparison Operators
Logical Operators
Bitwise Operators
Assignment Operators
Membership Operators
Identity Operators
العوامل التي تستخدم في العمليات الحسابية (Arithmetic Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| Assignment | = |
a = b |
أعطي a قيمة b |
| Addition | + |
a + b |
أضف قيمة b على قيمة a |
| Subtraction | - |
a - b |
إطرح قيمة b من قيمة a |
| Unary plus | + |
+a |
أضرب قيمة a بالعامل + |
| Unary minus | - |
-a |
أضرب قيمة a بالعامل - |
| Multiplication | * |
a * b |
أضرب قيمة a بقيمة b |
| Exponent | ** |
a ** b |
ضاعف قيمة a بقيمة b |
| Division | / |
a / b |
أقسم قيمة a على قيمة b |
| Floor Divide | // |
a // b |
أقسم قيمة a على قيمة b و أرجع أقرب عدد صحيح للناتج لا يحتوي على فاصلة. |
| Modulo | % |
a % b |
للحصول على آخر رقم يبقى عندما نقسم قيمة a على قيمة b |
العامل = (Assignment Operator)
العامل = يستخدم لإعطاء قيمة للمتغير.
مثال
a = 5 # 5 و أعطيناه القيمة a هنا قمنا بتعريف متغير إسمه
b = a # a و أعطيناه نفس قيمة المتغير b هنا قمنا بتعريف متغير إسمه
print('a =', a)
print('b =', b)
•سنحصل على النتيجة التالية عند التشغيل.
b = 5
العامل + (Addition Operator)
العامل + يستخدم لإضافة قيمة على قيمة, أي في عمليات الجمع.
مثال
a = 3
b = 4
c = a + b # c = 3 + 4 = 7
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل - (Subtraction Operator)
العامل - يستخدم لإنقاص قيمة من قيمة, أي في عمليات الطرح.
مثال
a = 3
b = 4
c = a - b # c = 3 - 4 = -1
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل + (Unary-Plus Operator)
يعني ضرب القيمة بالعامل +.
مثال
# b لها في المتغير Unary-Plus قيمة أكبر من صفر, ثم وضعنا قيمة الـ a هنا وضعنا في المتغير
a = 10
b = +a # b = +(10) = 10
print('b =', b)
# b لها في المتغير Unary-Plus قيمة أصغر من صفر, ثم وضعنا قيمة الـ a هنا وضعنا في المتغير
a = -10
b = +a # b = +(-10) = -10
print('b =', b)
•سنحصل على النتيجة التالية عند التشغيل.
b = -10
العامل - (Unary-Minus Operator)
يعني ضرب القيمة بالعامل -.
مثال
# b لها في المتغير Unary-Minus قيمة أكبر من صفر, ثم وضعنا قيمة الـ a هنا وضعنا في المتغير
a = 10
b = -a # b = -(10) = -10
print('b =', b)
# b لها في المتغير Unary-Minus قيمة أصغر من صفر, ثم وضعنا قيمة الـ a هنا وضعنا في المتغير
a = -10
b = -a # b = -(-10) = 10
print('b =', b)
•سنحصل على النتيجة التالية عند التشغيل.
b = 10
العامل * (Multiplication Operator)
العامل * يستخدم لضرب قيمة بقيمة, أي في عمليات الضرب.
مثال
a = 6
b = 5
c = a * b # c = 6 * 5 = 30
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل ** (Exponential Operator)
العامل ** يستخدم لمضاعفة قيمة بقيمة, أي لضرب قيمة بنفسها عدة مرات.
مثال
a = 2
b = 5
c = a ** b # c = 2 ** 5 = 2 * 2 * 2 * 2 * 2 = 32
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل / (Division Operator)
العامل / يستخدم لقسمة قيمة على قيمة, أي في عمليات القسمة.
مثال
a = 8
b = 5
c = a / b # c = 8 ÷ 5 = 1.6
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل // (Floor Division Operator)
العامل // يستخدم لقسمة قيمة على قيمة و إزالة أي أرقام بعد الفاصلة.
مثال
a = 8
b = 5
c = a // b # c = 8 ÷ 5 = 1.6 [ بعد أي رقم موجود بعض الفاصلة ]===> c = 1
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العامل % (Modulo Operator)
العامل % يقال له الـ Modulo و يسمى Remainder في الرياضيات و هو آخر رقم يبقى من عملية القسمة.
إذاً نستخدم الـ Modulo للحصول على آخر رقم يبقى من عملية القسمة.
و له فوائد كثيرة, فمثلاً يمكننا إستخدامه لمعرفة ما إذا كان الرقم مفرد أو مزدوج ( أي Even or Odd ) و هذا شرحناه بتفصيل في مادة الخوارزميات.
في هذا المثال سنقوم بتخزين الرقم الذي يبقى من القسمة في المتغير c.
مثال
a = 8
b = 5
c = a % b; # c = 8 % 5 = 3
print('c =', c)
•سنحصل على النتيجة التالية عند التشغيل.
العوامل التي تستخدم في المقارنات (Comparison Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
==
(a == b)
هل قيمة a تساوي قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
Not equal to
!=
(a != b)
هل قيمة a لا تساوي قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
Greater than
>
(a > b)
هل قيمة a أكبر من قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
Less than
<
(a < b)
هل قيمة a أصغر من قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
Greater thanor Equal to
>=
(a >= b)
هل قيمة a أكبر أو تساوي قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
Less thanor Equal to
<=
(a <= b)
هل قيمة a أصغر أو تساوي قيمة b ؟إذا كان الجواب نعم فإنها ترجع
True
العامل == (Equal To Operator)
العامل == يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول تساوي قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول تساوي قيمة المتغير الثاني؟
إذا كانت تساويها سيكون الجواب
Trueو بالتالي سينفذ الكود.أما إذا لم تكن تساويها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 10
b = 10
c = 20
# سيتم تنفيذ أمر الطباعة b تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == b:
print('a = b')
# سيتم تنفيذ أمر الطباعة c تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == c:
print('a = c')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الأول لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الثاني لأن جواب الشرط كان False.
العامل != (Not Equal To Operator)
العامل != يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول لا تساوي قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول لا تساوي قيمة المتغير الثاني؟
إذا كانت لا تساويها سيكون الجواب
Trueو بالتالي سينفذ الكود.أما إذا كانت تساويها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 10
b = 10
c = 20
# سيتم تنفيذ أمر الطباعة b لا تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if(a != b)
print('a != b')
# سيتم تنفيذ أمر الطباعة c لا تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if(a != c)
print('a != c')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الثاني لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الأول لأن جواب الشرط كان False.
العامل > (Greater Than Operator)
العامل > يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أكبر من قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول أكبر من قيمة المتغير الثاني؟
إذا كانت أكبر منها سيكون الجواب
Trueو بالتالي سينفذ الكود.إذا لم تكن أكبر منها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 10
b = 5
# سيتم تنفيذ أمر الطباعة b أكبر من قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a > b:
print('a > b')
# سيتم تنفيذ أمر الطباعة a أكبر من قيمة المتغير b الشرط التالي يعني أنه إذا كانت قيمة المتغير
if b > a:
print('b > a')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الأول لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الثاني لأن جواب الشرط كان False.
العامل < (Less Than Operator)
العامل < يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أصغر من قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول أصغر من قيمة المتغير الثاني؟
إذا كانت أصغر منها سيكون الجواب
Trueو بالتالي سينفذ الكود.إذا لم تكن أصغر منها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 10
b = 5
# سيتم تنفيذ أمر الطباعة b أصغر من قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a < b:
print('a < b')
# سيتم تنفيذ أمر الطباعة a أصغر من قيمة المتغير b الشرط التالي يعني أنه إذا كانت قيمة المتغير
if b < a:
print('b < a')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الثاني لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الأول لأن جواب الشرط كان False.
العامل >= (Greater Than or Equal To Operator)
العامل >= يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أكبر أو تساوي قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول أكبر أو تساوي قيمة المتغير الثاني؟
إذا كانت أكبر منها أو تساويها سيكون الجواب
Trueو بالتالي سينفذ الكود.إذا لم تكن أكبر منها أو تساويها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 5
b = 5
c = 10
# سيتم تنفيذ أمر الطباعة b أكبر أو تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a >= b:
print('a >= b')
# سيتم تنفيذ أمر الطباعة c أكبر أو تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a >= c:
print('a >= c')
# سيتم تنفيذ أمر الطباعة a أكبر أو تساوي قيمة المتغير c الشرط التالي يعني أنه إذا كانت قيمة المتغير
if c >= a:
print('c >= a')
•سنحصل على النتيجة التالية عند التشغيل.
c >= a
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الأول و الثالث لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الثاني لأن جواب الشرط كان False.
العامل <= (Less Than or Equal To Operator)
العامل <= يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أصغر أو تساوي قيمة المتغير الثاني.
عندما نضعه في الشرط فإنه يعني هل قيمة المتغير الأول أصغر أو تساوي قيمة المتغير الثاني؟
إذا كانت أصغر منها أو تساويها سيكون الجواب
Trueو بالتالي سينفذ الكود.إذا لم تكن أصغر منها أو تساويها سيكون الجواب
Falseو بالتالي لن ينفذ الكود.
مثال
a = 5
b = 5
c = 10
# سيتم تنفيذ أمر الطباعة b أصغر أو تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a <= b:
print('a <= b')
# سيتم تنفيذ أمر الطباعة c أصغر أو تساوي قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a <= c:
print('a <= c')
# سيتم تنفيذ أمر الطباعة a أصغر أو تساوي قيمة المتغير c الشرط التالي يعني أنه إذا كانت قيمة المتغير
if c <= a:
print('c <= a')
•سنحصل على النتيجة التالية عند التشغيل.
a <= c
•نلاحظ أنه نفذ أمر الطباعة الموضوع في الشرط الأول و الثاني لأن جواب الشرط كان True. و لم ينفذ أمر الطباعة الموضوع في الشرط الثالث لأن جواب الشرط كان False.
العوامل التي تستخدم في وضع شروط منطقية (Logical Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| Logical AND | and |
a and b |
هل قيمة a و b تساويان True ؟هنا يجب أن يتم تحقيق الشرطين ليرجع True |
| Logical OR | or |
a or b |
هل قيمة a أو b أو كلاهما تساويان True ؟هنا يكفي أن يتم تحقيق شرط واحد من الشرطين ليرجع True |
| Logical NOT | not |
not a |
هل قيمة a لا تساوي True ؟إذا كان الجواب نعم فإنها ترجع True |
العامل and (Logical AND Operator)
العامل and يستخدم لتنفيذ كود معين إذا تحقق الشرط الأول و الشرط الثاني.
أي إذا كانت نتيجة الشرط الأول تساوي
Trueو نتيجة الشرط الثاني تساويTrueسينفذ الكود.إذا لم تكن نتيجة كلا الشرطين تساوي
Trueلن ينفذ الكود.
المثال الأول
a = 10
b = 20
# تساوي 20 سيتم تنفيذ أمر الطباعة b تساوي 10, و قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == 10 and b == 20:
print('The first and the second conditions return True')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه نفذ أمر الطباعة لأن جواب الشرطين الموضوعين في الجملة if هو True.
المثال الثاني
a = 10
b = 20
# تساوي 50 سيتم تنفيذ أمر الطباعة b تساوي 10, و قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == 10 and b == 50:
print('The first and the second conditions return True')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه لم ينفذ أمر الطباعة لأن جواب الشرط الثاني الموضوع في الجملة if هو False.
العامل or (Logical OR Operator)
العامل or يستخدم لتنفيذ كود معين إذا تحقق على الأقل واحد من الشروط الموضوعة.
إذاً هنا يكفي أن يرجع أحد الشرطين القيمة True حتى يتم تنفيذ الأوامر الموضوعة.
المثال الأول
a = 10
b = 20
# تساوي 50 سيتم تنفيذ أمر الطباعة b تساوي 10, أو قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == 10 or b == 50:
print('One of the conditions return True')
•سنحصل على النتيجة التالية عند التشغيل.
•نفذ أمر الطباعة لأن جواب الشرط الأول الموضوع في الجملة if هو True.
المثال الثاني
a = 10
b = 20
# تساوي 50 سيتم تنفيذ أمر الطباعة b تساوي 50, أو قيمة المتغير a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if a == 50 or b == 50:
print('One of the conditions return True')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه لم ينفذ أمر الطباعة لأن جواب الشرط الأول و الثاني الموضوعين في الجملة if هو False.
العامل not (Logical NOT Operator)
العامل not يستخدم لتنفيذ كود معين إذا لم يتحقق أي شرط تم وضعه.
أي إذا أرجع الشرط أو جميع الشروط الموضوعة القيمة False سيتم تنفيذ الأوامر الموضوعة.
المثال الأول
a = 10
# لا تساوي 10 سيتم تنفيذ أمر الطباعة a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if not a == 10:
print('The condition return False')
•سنحصل على النتيجة التالية عند التشغيل.
•لم ينفذ أمر الطباعة لأن جواب الشرط هو True.
المثال الثاني
a = 10
# لا تساوي 20 سيتم تنفيذ أمر الطباعة a الشرط التالي يعني أنه إذا كانت قيمة المتغير
if not a == 20:
print('The condition return False')
•سنحصل على النتيجة التالية عند التشغيل.
•نفذ أمر الطباعة لأن جواب الشرط هو False.
المثال الثالث
a = 30
# بين 0 و 20 سيتم تنفيذ أمر الطباعة a الشرط التالي يعني أنه إذا لم تكن قيمة
if not 0 >= a <= 20:
print('the condition return False')
•سنحصل على النتيجة التالية عند التشغيل.
•نفذ أمر الطباعة لأن جواب الشرط هو False.
ملاحظة
إذا أردت أن تطبق الـ not على أكثر من متغير, يجب أن تضع الشروط بين قوسين. أي هكذا يجب أن تستخدمها not( ).
المثال الرابع
user = 'mhamad'
code = 0000
# الشرط التالي يعني إذا لم يتحقق أي شرط موضوع سيتم تنفيذ أمر الطباعة
if not(user == 'harmash' or code == 1234):
print('Both conditions return False')
•سنحصل على النتيجة التالية عند التشغيل.
•نفذ أمر الطباعة لأن جواب كلا الشرطين هو False.
العوامل التي تستخدم للتعامل مع الـ bits (Bitwise Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| Bitwise AND | & |
a & b |
العامل & يحسب ناتج جمع الـ bits المشتركة بين a و b |
| Bitwise OR | | |
a | b |
العامل | يحسب ناتج جمع الـ bits المشتركة و الغير مشتركة بين a و b |
| Bitwise XOR | ^ |
a ^ b |
العامل ^ يحسب ناتج جمع الـ bits الغير مشتركة بين a و b |
| Bitwise compliment OR | ~ |
~a |
العامل ~ يقلب الـ bits التي تساوي 0 إلى 1 و يقلب الـ bits التي تساوي 1 إلى 0,ثم يضيف عليهم 1 و يحسب ناتج جمعهم, بعدها يضرب الجواب بالعامل ( - ) ثم يعطينا جواب سلبي. |
| Left shift | << |
a << 2 |
العامل << يزيح الـ bits من آخر اليسار إلى أول اليمين.العدد 2 يعني أننا سنزيح آخر إثنين bits و نضعهم في الأول. |
| Right shift | >> |
a >> 2 |
العامل >> يزيح الـ bits من أول اليمين إلى آخر اليسار.العدد 2 يعني أننا سنزيح أول إثنين bits و نضعهم في الأخير. |
العوامل التي تستخدم لإعطاء قيم للمتغيرات (Assignment Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| Basic Assignment | = |
a = b |
ضع قيمة b في a. |
| Add AND Assignment | += |
a += b |
أضف قيمة a على قيمة b و خزن الناتج في a |
| Susbtract AND Assignment | -= |
a -= b |
أنقص قيمة a من قيمة b و خزن الناتج في a |
| Multiply AND Assignment | *= |
a *= b |
أضرب قيمة a بقيمة b و خزن الناتج في a |
| Exponent AND Assignment | **= |
a **= b |
ضاعف قيمة a بقيمة b و خزن الناتج في a |
| Divide AND Assignment | /= |
a /= b |
أقسم قيمة a على قيمة b و خزن الناتج في a |
| Floor Divide AND Assignment | //= |
a //= b |
أقسم قيمة a على قيمة b و أرجع أقرب عدد صحيح للناتج |
| Modulo AND Assignment | %= |
a %= b |
أقسم قيمة a على قيمة b و خزن آخر رقم يبقى من عملية القسمة في a |
| Left shift AND Assignment | <<= |
a <<= 2 |
أزح آخر إثنين bits و ضعهم في الأول ثم خزن الناتج في a |
| Right shift AND Assignment | >>= |
a >>= 2 |
أزح أول اثنين bits و ضعهم في الآخر ثم خزن الناتج في a |
| Bitwise AND Assignment | &= |
a &= b |
أحسب ناتج جمع الـ bits المشتركة بين a و b و خزن الناتج في a |
| Bitwise exclusive OR and Assignment | ^= |
a ^= b |
أحسب ناتج جمع الـ bits الغير مشتركة بين a و b و خزن الناتج في a |
| Bitwise inexclusive OR and Assignment | |= |
a |= b |
أحسب ناتج جمع الـ bits المشتركة و الغير مشتركة بين a و b و خزن الناتج في a |
العامل = (Basic Assign)
العامل = يستخدم لإعطاء قيمة لمتغير.
مثال
a = 10
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل += (Add and Assign)
العامل += يستخدم لإضافة قيمة ما على قيمة المتغير بكود أقل.
مثال
a = 10
b = 20
a += b # a = a + b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل -= (Susbtract and Assign)
العامل -= يستخدم لطرح قيمة ما من قيمة المتغير بكود أقل.
مثال
a = 10
b = 20
a -= b # a = a - b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل *= (Multiply and Assign)
العامل *= يستخدم لضرب قيمة المتغير بقيمة ما بكود أقل.
مثال
a = 10
b = 20
a *= b # a = a * b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل ** (Exponent and Assign)
العامل ** يستخدم لمضاعفة قيمة بقيمة, أي لضرب قيمة المتغير بنفسها عدة مرات بكود أقل.
مثال
a = 2
a **= 5 # a = a ** 5
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل /= (Divide and Assign)
العامل /= يستخدم لقسم قيمة المتغير على قيمة ما بكود أقل.
مثال
a = 100
b = 20
a /= b # a = a / b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل //= (Floor Divide and Assign)
العامل //= يستخدم لقسم قيمة المتغير على قيمة ما مع تقريب الناتج لأقرب عدد صحيح حتى لا يظهر أي رقم بعد الفاصلة بكود أقل.
مثال
a = 8
b = 5
a //= b # a = a // b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل %= (Modulo and Assign)
العامل %= يستخدم لتخزين الباقي من قسمة قيمة المتغير على قيمة ما بكود أقل.
مثال
a = 10
b = 7
a %= b # a = a % b
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل <<= (Left shift and Assign)
في المثال التالي, العامل <<= يعني إمسح bits من ناحية اليسار ثم بدل كل bit تم مسحها منهم بصفر و ضعهم من ناحية اليمين ثم ضع الناتج في المتغير من جديد.
مثال
a = 10
a <<= 2 # a = a << 2 = 00000000000000000000000000001010 << 2 = 00000000000000000000000000101000 = 40
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل >>= (Right shift and Assign)
في المثال التالي, العامل >>= يعني إمسح bits من ناحية اليمين ثم بدل كل bit تم مسحها منهم بصفر و ضعهم من ناحية اليسار ثم ضع الناتج في المتغير من جديد.
مثال
a = 10
a >>= 2 # a = a >> 2 = 00000000000000000000000000001010 >> 2 = 00000000000000000000000000000010 = 2
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل &= (Bitwise and Assign)
العامل &= يعني أحسب ناتج جمع الـ bits المشتركة بين المتغير a و المتغير b ثم خزن الناتج في المتغير a.
مثال
a = 10
b = 75
a &= b # a = a & b = 00000000000000000000000000001010 & 00000000000000000000000001001011 = 00000000000000000000000000001010 = 10
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العامل |= (Bitwise exclusive OR and Assign)
العامل |= يعني أحسب ناتج جمع الـ bits المشتركة و الغير مشتركة بين المتغير a و المتغير b ثم خزن الناتج في المتغير a.
مثال
a = 10
b = 75
a |= b # a = a | b = 00000000000000000000000000001010 | 00000000000000000000000001001011 = 00000000000000000000000001001011 = 75
print('a =', a)
•سنحصل على النتيجة التالية عند التشغيل.
العوامل التي تستخدم للبحث في المصفوفات (Membership Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| In | in |
a in arr |
هل قيمة المتغير a موجودة في المصفوفة arr؟إذا كان الجواب نعم فإنها ترجع True |
| Not In | not in |
a not in arr |
هل قيمة المتغير a غير موجودة في المصفوفة arr؟إذا كان الجواب نعم فإنها ترجع True |
العامل in (In Operator)
العامل in يستخدم لمعرفة ما إذا كانت المصفوفة تحتوي على قيمة معينة أم لا.
إذا كان يوجد عنصر في المصفوفة عنده نفس القيمة المراد البحث عنها, يرجع الجواب
True.إذا كان لا يوجد أي عنصر في المصفوفة عنده نفس القيمة المراد البحث عنها, يرجع الجواب
False.
مثال
# هنا قمنا بتعريف مصفوفة تتألف من 5 عناصر عبارة عن أرقام صحيحة
numbers = [1, 2, 3, 4, 5]
# y و x هنا قمنا بتعريف متغيران
x = 3
y = 8
# سيتم تنفيذ أمر الطباعة x تحتوي على قيمة المتغير numbers إذا كانت المصفوفة
if x in numbers:
print('x value exists in the array')
# سيتم تنفيذ أمر الطباعة y تحتوي على قيمة المتغير numbers إذا كانت المصفوفة
if y in numbers:
print('y value exists in the array')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه تم تنفيذ أمر الطباعة الموضوع في الشرط الأول فقط لأنه تم إيجاد عنصر في المصفوفة numbers عنده نفس قيمة المتغير x.
العامل not in (Not In Operator)
العامل not in يستخدم لمعرفة ما إذا كانت المصفوفة لا تحتوي على قيمة معينة أم لا.
إذا كان لا يوجد أي عنصر في المصفوفة عنده نفس القيمة المراد البحث عنها, يرجع الجواب
True.إذا كان يوجد أي عنصر في المصفوفة عنده نفس القيمة المراد البحث عنها, يرجع الجواب
False.
مثال
# هنا قمنا بتعريف مصفوفة تتألف من 5 عناصر عبارة عن أرقام صحيحة
numbers = [1, 2, 3, 4, 5]
# y و x هنا قمنا بتعريف متغيران
x = 3
y = 8
# سيتم تنفيذ أمر الطباعة x لا تحتوي على قيمة المتغير numbers إذا كانت المصفوفة
if x not in numbers:
print('x value not exists in the array')
# سيتم تنفيذ أمر الطباعة y لا تحتوي على قيمة المتغير numbers إذا كانت المصفوفة
if y not in numbers:
print('y value not exists in the array')
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه تم تنفيذ أمر الطباعة الموضوع في الشرط الثاني فقط لأنه لم يتم إيجاد عنصر في المصفوفة numbers عنده نفس قيمة المتغير y.
العوامل التي تستخدم لمعرفة ما إذا كان الكائنين يشيران لكائن واحد في الذاكرة أم لا (Identity Operators)
| إسم العامل | رمزه | مثال | شرح الكود |
|---|---|---|---|
| Is | is |
a is b |
هل الكائن a و الكائن b يشيران إلى كائن واحد في الذاكرة؟إذا كان الجواب نعم فإنها ترجع True |
| Is Not | is not |
a is not b |
هل الكائن a و الكائن b لا يشيران إلى كائن واحد في الذاكرة؟إذا كان الجواب نعم فإنها ترجع True |
طريقة معرفة عنوان المتغير أو الكائن في الذاكرة في بايثون
لمعرفة المكان أو العنوان المحجوز في الذاكرة لأي شيء تم تعريفه يمكنك إستخدام الدالة id().
بكل بساطة قم بوضع إسم أي متغير أو كائن بداخلها و سترجع لك عدد صحيح يمثل عنوانه في الذاكرة.
المثال الأول
# هنا قمنا بتعريف متغيران عندهم قيم مختلفة
x = 3
y = 7
# هنا قمنا بطباعة عناوينهم في الذاكرة
print('x address is:', id(x))
print('y address is:', id(y))
•سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
y address is: 1537266832
•نلاحظ أن عنوان المتغير x مختلف عن عنوان المتغير y و بالتالي هذا يعني أنه تم حجز مساحة خاصة لكل واحد منهما و أنهما يشيران لمكانين مختلفين في الذاكرة.
ملاحظة
في حال قمت بتعريف متغيران أو أكثر و أعطيتهم نفس القيمة, فإن مفسّر لغة بايثون سيحجز مكان واحد لهم و يضع فيه القيمة حتى يوّفر في استهلاك مساحة الذاكرة.
المثال الثاني
# هنا قمنا بتعريف متغيران عندهم قيم مختلفة
x = 5
y = 5
# هنا قمنا بطباعة عناوينهم في الذاكرة
print('x address is:', id(x))
print('y address is:', id(y))
•سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
y address is: 1833030700
•نلاحظ أن عنوان المتغير x هو نفسه عن عنوان المتغير y و بالتالي هذا يعني أنه تم حجز مساحة واحدة لكلا المتغيرين و أنهما يشيران إلى نفس المكان في الذاكرة.
العامل is (Is Operator)
العامل is يستخدم لمعرفة ما إذا كان الكائنين يشيران لكائن واحد في الذاكرة أم لا.
إذا كانا يشيران لنفس الكائن فإنه يرجع الجواب
True.إذا كانا لا يشيران لنفس الكائن فإنه يرجع الجواب
False.
مثال
# هنا قمنا بتعريف مصفوفتين عندهما نفس الحجم و وضعنا فيهما نفس القيم
A = [1, 2, 3]
B = [1, 2, 3]
# في الذاكرة B و A هنا قمنا بطباعة عنوان المصفوفتان
print('A address is:', id(A))
print('B address is:', id(B))
# يشيران لكائن واحد في الذاكرة ( أي لعنوان واحد ) سيتم تنفيذ أمر الطباعة B و A إذا كان
if A is B:
print('A and B have the same ID')
•سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
B address is: 36563624
•نلاحظ أن عنوان المصفوفة A مختلف عن عنوان المصفوفة B و بالتالي إنهما لا يشيران لمكان واحد في الذاكرة.
لهذا السبب لم يتم تنفيذ أمر الطباعة الأخير الموضوع داخل الشرط و الذي كان سيتنفذ في حال كان A و B يشيران لنفس المصفوفة في الذاكرة.
العامل is not (Is Not Operator)
العامل is not يستخدم لمعرفة ما إذا كان الكائنين لا يشيران لكائن واحد في الذاكرة أم لا.
إذا كانا لا يشيران لنفس الكائن فإنه يرجع الجواب
True.إذا كانا يشيران لنفس الكائن فإنه يرجع الجواب
False.
مثال
# هنا قمنا بتعريف مصفوفتين عندهما نفس الحجم و وضعنا فيهما نفس القيم
A = [1, 2, 3]
B = [1, 2, 3]
# في الذاكرة B و A هنا قمنا بطباعة عنوان المصفوفتان
print('A address is:', id(A))
print('B address is:', id(B))
# لا يشيران لكائن واحد في الذاكرة ( أي لعنوان واحد ) سيتم تنفيذ أمر الطباعة B و A إذا كان
if A is not B:
print('A and B have different IDs')
•سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
B address is: 5892776
A and B have different IDs
•نلاحظ أن عنوان المصفوفة A مختلف عن عنوان المصفوفة B و بالتالي إنهما لا يشيران لمكان واحد في الذاكرة.
لهذا السبب تم تنفيذ أمر الطباعة الأخير الموضوع داخل الشرط.