Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

بايثونأنواع المتغيرات

  • مفهوم المتغيرات
  • معرفة نوع المتغير
  • أنواع المتغيرات في بايثون
  • القيم العددية
  • القيم النصية
  • القيم المنطقية
  • تخزين البيانات في List
  • تخزين البيانات في Tuple
  • تخزين البيانات في Set
  • تخزين البيانات في Dictionary
  • هل كل شيء في بايثون عبارة عن كائن؟

مفهوم المتغيرات

المتغيرات ( variables ) عبارة عن أماكن يتم حجزها بشكل مؤقت في الذاكرة بهدف تخزين بيانات فيها أثناء تشغيل البرنامج.

في بايثون، المبرمج غير مسؤول عن تحديد أنواع المتغيرات فهي تتحد بشكل تلقائي بناءاً على أنواع القيم التي يتم إسنادها إليها وقت التشغيل.


تعريف متغير جديد

أي إسم تضعه و تجعله يساوي قيمة ما، فأنت بذلك تقوم بإنشاء متغير جديد و تحدد قيمته أيضاً.

مثال

Test.py
var = 5       # و قيمته 5 var هنا قمنا بتعريف متغير إسمه
print(var)    # var هنا قمنا بطباعة قيمة المتغير

النتيجة

5

في بايثون، لا تستطيع تعريف متغير بدون إسناد قيمة إليه أثناء تعريفه.


تعريف عدة متغيرات بذات القيمة

يمكن تعريف عدة متغيرات و إعطاءها القيمة نفسها في وقت واحد.

مثال

Test.py
x = y = z = 10      # 10 هنا قمنا بتعريف ثلاث متغيرات قيمتها

print('x = ', x)    # x هنا قمنا بطباعة قيمة المتغير
print('y = ', y)    # y هنا قمنا بطباعة قيمة المتغير
print('z = ', z)    # z هنا قمنا بطباعة قيمة المتغير

النتيجة

x = 10
y = 10
z = 10

معرفة نوع المتغير

لمعرفة نوع أي متغير يمكنك إستخدام الدالة type().

مثال

Test.py
var = 10           # var هنا وضعنا رقم في المتغير
print(type(var))   # لأنها عبارة عن رقم int لاحظ أن نوعها سيكون .var هنا طبعنا نوع قيمة المتغير

var = 'harmash'    # var هنا وضعنا نص في المتغير
print(type(var))   # لأنها عبارة عن نص str لاحظ أن نوعها سيكون .var هنا طبعنا نوع قيمة المتغير

النتيجة

<class 'int'>
<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

في المثال التالي قمنا بتعريف ثلاث متغيرات و كل متغير وضعنا فيه قيمة رقمية مختلفة في النوع و القيمة.
بعدها قمنا بعرض نوع كل متغير منهم.

مثال

Test.py
x = 3            # قيمته عبارة عن عدد صحيح ,x هنا قمنا بتعريف متغير إسمه
y = 1.5          #  قيمته عبارة عن عدد عشري ,y هنا قمنا بتعريف متغير إسمه
z = 4J           #   قيمته عبارة عن عدد مركب ,z هنا قمنا بتعريف متغير إسمه

print(type(x))   # x هنا طبعنا نوع قيمة المتغير
print(type(y))   # y هنا طبعنا نوع قيمة المتغير
print(type(z))   # z هنا طبعنا نوع قيمة المتغير

النتيجة

<class 'int'>
<class 'float'>
<class 'complex'>

صحيح أن مفسّر بايثون يقوم بتحديد أنواع القيم بشكل تلقائي عنك لكن هذا لا يعني أنك غير قادر على تحويل أنواع الأعداد إلى النوع الذي يناسبك. ستتعرف على دوال خاصة للتعامل مع الأعداد و ستتعلم طريقة تحويل أنواع الأعداد في درس خاص لاحقاً في هذه الدورة.

القيم النصية

لتعريف نص في بايثون يمكنك استخدام رمز التنصيص الفردي ' ' أو الزوجي " " و لا يوجد أي فارق بينهما.

  • إذا كان النص يتألف من سطر واحد يمكن استخدام الرمز ' ' أو الرمز " ".
  • إذا كان النص يتألف من عدة أسطر يمكن استخدام الرمز ''' ''' أو الرمز """ """.

في المثال التالي قمنا بتعريف ثلاث متغيرات تحتوي على قيم نصية.
لاحظ أننا قمنا بتعريف كل متغير بواسطة رمز مختلف.

المثال الأول

Test.py
# هنا قمنا بتعريف ثلاث متغيرات تحتوي على قيم نصية
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)

النتيجة

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.

في المثال التالي قمنا بتعريف نص يحتوي على نفس الرموز التي تستخدم لتعريف النصوص.

المثال الثاني

Test.py
# يحتوي على قيمة نصية text هنا قمنا بتعريف متغير إسمه
text = """In this line we print 'single quotations'
In this line we print "double quotations" """

# text هنا قمنا بعرض قيمة المتغير
print(text)

النتيجة

In this line we print 'single quotations'
In this line we print "double quotations"

هناك أساليب و دوال خاصة للتعامل مع النصوص سنشرحها في درس خاص لاحقاً في هذه الدورة.

القيم المنطقية

عند إسناد القيمة True أو القيمة False إلى المتغير فإنه يصبح من النوع bool.
النوع bool يستخدم في العادة عند وضع شروط منطقية أو لمعرفة ما إذا تم تنفيذ أمر معين بنجاح أم لا.

في الواقع القيمة True تساوي 1 و القيمة False تساوي 0 و في بايثون يفضل إستخدام الصفر و الواحد بدلاً من إستخدام القيم المحجوزة True و False عند التشييك على قيمة المتغير أو على ما سترجعه الدالة.


في المثال التالي قمنا بتعريف متغير إسمه check و أعطيناه القيمة True ثم إستخدمناه في وضع شرط.

مثال

Test.py
# True و قيمته check هنا قمنا بتعريف إسمه
check = True

# True تساوي check سيتم تنفيذ أمر الطباعة الموضوع هنا إذا كانت قيمة المتغير
if check == True:
    print('check = True')

# False أي إذا كانت تساوي True تساوي check سيتم تنفيذ أمر الطباعة الموضوع هنا إذا لم تكن قيمة المتغير
else:
    print('check = False')

النتيجة

check = True

الأمر if check == True: كان يمكن كتابته if check == 1: أو كتابة if check: فقط و الحصول على نفس النتيجة.

تخزين البيانات في List

النوع List عبارة عن مصفوفة حجمها غير ثابت و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز [ ] لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) ليس لها حجم ثابت.


في المثال التالي قمنا بتعريف 4 مصفوفات.

المثال الأول

Test.py
A = []                                 # هنا قمنا بتعريف مصفوفة فارغة
B = [10, 20, 30, 40, 50]               # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط
C = ['Mhamad', 'Samer', 'Abdullah']    # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط
D = [1, 'two', 'three', 4]             # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص

في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر، ثم قمنا بإعطائها قيم، ثم قمنا بإضافة عنصر جديد عليها و في النهاية عرضنا قيمها و عدد عناصرها.

المثال الثاني

Test.py
# هنا قمنا بتعريف مصفوفة من النصوص تتألف من 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))

النتيجة

Stored languages: ['Arabic', 'French', 'English', 'Spanish', 'German']
Number of stored languages is: 5

ستتعرف على دوال خاصة للتعامل مع النوع Lists و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.

تخزين البيانات في Tuple

النوع Tuple عبارة عن مصفوفة حجمها ثابت و قيمها غير قابلة للتغيير و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز ( ) لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) حجمها و قيمها ثابتة.


في المثال التالي قمنا بتعريف 4 مصفوفات.

المثال الأول

Test.py
A = ()                                 # هنا قمنا بتعريف مصفوفة فارغة
B = (10, 20, 30, 40, 50)               # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط
C = ('Mhamad', 'Samer', 'Abdullah')    # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط
D = (1, 'two', 'three', 4)             # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص

في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر ثابتة، ثم عرضنا قيمها و عدد عناصرها.

المثال الثاني

Test.py
# هنا قمنا بتعريف مصفوفة ليس لها نوع محدد و تتألف من 4 عناصر
languages = ('Arabic', 'French', 'English', 'Spanish')

# هنا قمنا بعرض قيم المصفوفة و عدد عناصرها
print('Stored languages:', languages)
print('Number of stored languages is:', len(languages))

النتيجة

Stored languages: ('Arabic', 'English', 'French', 'Spanish')
Number of stored languages is: 4

ستتعرف على دوال خاصة للتعامل مع المصفوفات التي نوعها Tuples و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.

تخزين البيانات في Set

النوع Set عبارة عن مصفوفة ليس لها حجم ثابت و قيمها غير قابلة للتغيير و يمكنها تخزين قيم من مختلف الأنواع في وقت واحد.
في بايثون نستخدم الرمز { } لتعريف مصفوفة أحادية ( أي ذات بعد واحد ) ليس لها حجم ثابت و قيمها غير قابلة للتغيير.

في هذا النوع من المصفوفات يتم تخزين البيانات بشكل عشوائي و ليس بالترتيب كما تم إدخالهم، و السبب أنه لا يتم إعطاء رقم Index خاص لكل عنصر. و لهذا السبب أيضاً لا يمكنك الوصول لعنصر محدد في Set بشكل مباشر لأنه في الأساس لا يملك رقم Index.


في المثال التالي قمنا بتعريف 4 مصفوفات.

المثال الأول

Test.py
A = {}                                 # هنا قمنا بتعريف مصفوفة فارغة
B = {10, 20, 30, 40, 50}               # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة فقط
C = {'Mhamad', 'Samer', 'Abdullah'}    # هنا قمنا بتعريف مصفوفة تحتوي على نصوص فقط
D = {1, 'two', 'three', 4}             # هنا قمنا بتعريف مصفوفة تحتوي على أعداد صحيحة و نصوص

في المثال التالي قمنا بتعريف مصفوفة تتألف من 4 عناصر، ثم عرضنا قيمها و عدد عناصرها.

المثال الثاني

Test.py
# هنا قمنا بتعريف مصفوفة ليس لها نوع محدد و تتألف من 4 عناصر
languages = {'Arabic', 'French', 'English', 'Spanish'}

# هنا قمنا بعرض قيم المصفوفة و عدد عناصرها
print('Stored languages:', languages)
print('Number of stored languages is:', len(languages))

النتيجة

Stored languages: ('Arabic', 'English', 'French', 'Spanish')
Number of stored languages is: 4

ستتعرف على دوال خاصة للتعامل مع المصفوفات التي نوعها Sets و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.

تخزين البيانات في Dictionary

عند إستخدام النوع List أو النوع Tuple فإنك تتعامل مع عناصرهم من خلال أرقام الـ Indices.
فكرة النوع Dictionary هي وضع مفتاح لكل قيمة، عندها تصل لقيمة كل عنصر موجود من خلال المفتاح الخاص فيه.

يمكنك تصور النوع Dictionary على أنه جدول تتخزن فيه البيانات بطريقة مفاتيح ( Keys ) و قيم ( Values ).
بالنسبة لنوع البيانات التي تخزنها بداخله، فعندك الحرية في تخزين مفاتيح و قيم من أي نوع تريد.

في بايثون نستخدم الرمز { } لتعريف Dictionary.

في المثال التالي قمنا بتعريف Dictionary يتألف من 5 عناصر, ثم عرضنا قيمة العنصر الثالث من خلال المفتاح الخاص فيه.

مثال

Test.py
# يتألف من 5 عناصر dictionary هنا قمنا بتعريف
dictionary = {
    1: 'One',
    2: 'Tow',
    3: 'Three',
    4: 'Four',
    5: 'Five'
}

# هنا قمنا بعرض قيمة العنصر الذي يحمل المفتاح رقم 3
print(dictionary[3])

النتيجة

Three

ستتعرف على دوال خاصة للتعامل مع الـ Dictionaries و سبب إستخدامهم و ستتعلم طرق كثيرة للتعامل معهم في درس خاص لاحقاً في هذه الدورة.

هل كل شيء في بايثون عبارة عن كائن؟

الجواب هو نعم.
رغم أننا نقول عن الكائن الذي يحتوي على قيمة رقمية أو نصية أنه متغير، إلا أنه في الواقع عبارة عن كائن و ليس متغير عادي كما يوجد في لغات البرمجة الأخرى.

في حال كنت تستخدم برنامج PyCharm تلاحظ أنه عند كتابة إسم أي متغير و وضع نقطة مباشرةً بعده، فإنه يظهر لك أنه يمكن إستدعاء دوال أو خصائص موجودة فيه كما في الصورة التالية.

هل كل شيء في بايثون عبارة عن كائن

لو لم تكن هذه المتغيرات في الحقيقة عبارة عن كائنات لما ظهر لنا أي شيء عند وضع النقطة.