pages = 900
speed = 50
finish_time = pages / speed
if finish_time < 14:
print('الوقت كافٍ')
else:
print('داهمنا الوقت')
داهمنا الوقت
يتألف البرنامج المكتوب بلغة البرمجة من قِطَع هي عبارة عن سلسلة من الجُمَل البسيطة والمركبة المكونة من مُفْرَدات للتعبير عن الأوامِر بطريقة يَسْهُلة على المبرمج كتابتها ، وفي نفس الوقت تَتَّبِعُ قَواعِدَ نَحْوِيَّة صارمة حتى لا تشتبه على المترجم عند تحويلها لتعليمات مفصَّلة على لغة المنطق الرقمي لآلة التي تنفذها.
وفي هذا المثال عرضٌ لقطع برمجية في بايثون وشرحٌ لعملها، وليس المطلوب أي شيء منها أو تأمُّلَه ومحاولة فهمه بل هذه نظرة عامَّة لتكوين تصوُّر مُجْمَل عمّا سيأتي إن شاء الله.
تُنَفَّذُ القطعة بحسب ترتيب جُمَلِها نزولاً من الأعلى.
pages = 900
speed = 50
finish_time = pages / speed
if finish_time < 14:
print('الوقت كافٍ')
else:
print('داهمنا الوقت')
داهمنا الوقت
في هذه القطعة مجموعة جُمل، نشرحها سطرًا سطرًا:
900
و 50
) لمتغير (pages
و speed
).finish_time
يستعمل الشرطة السفلية بدلاً من المسافة (وهذا ضروري)if
(بمعنى إن كان)
finish_time < 14
else
(بمعنى فإن لم يكن) جملة معلَّقة بانتفاء الشرطفهذه أربعة أنواع من الجُمل في قطعة واحدة. والجملة في بايثون لها أنواعُ كثيرة، وتنقسم إلى قسمين: بسيطة ومركبة:
x + y
x = y
assert condition
pass
del x
return y
yield y
raise Exception
break
continue
import module
global x
nonlocal x
type(x)
if ...
while ...
for ...
try ...
with ...
match ...
def ...
class ...
async def ...
[T1[, T2, ...]]
أول أنواع الكلمة هو المفردات الأصلية في لغة بايثون التي لها معنىً خاصّ مفهوم لدى بايثون وتستعمل في جُمَل محددة. وهي:
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
ومنها كذلك: match
, case
, type
و _
.
وما عدا ذلك
فقد تبني الحروف كلمةً تكونُ متغيِّرًا، نحو: x
أو price
أو body_weight
فكلها أسماء مقبولة للمتغيرات؛ لا كما في الرياضيات التي عادةً ما تستعمل الحرف الواحد.
وقت تبني الحروف كلمة تكون حرفيٍّا، نحو: 44
أو 3.14
أو "كيف حالك؟"
ويُسمَّى قيمة.
ومن الحروف علامات الابتداء والوَقف، نحو: ( )
و [ ]
و { }
والفصل، نحو: ,
(الفاصلة اللاتينية) و :
(النقطتان الرأسِيَّتان) و =
(علامة التعيين) ، وتُسمى جميعًا المحددات.
()
في العبارة: (y + z) * (a + b)
لتحديد ترتيب العمليات()
في العبارة: print(x, y, z)
لتحديد عوامل الفعل: أي: المتغيرات التي نمررها له()
في العبارة: (10, 20, 30)
لتحديد صف من الأرقامومن الحروف المعاملات، نحو: +
و *
و /
و **
و ==
فمثلاً: معامل الجمع +
يفسَّر بحسب السياق: x + y
x = 5
و y = 10
فهما من نوع الرقم (number
) فهي للجمعx = "Ahmad"
و y = "Belal"
فهما من نوع النص (str
) فهي للدمج بينهماx = 5
و y = "Belal"
فهما من نوع الرقم و النص فليسَ بمعرَّفومن الأنواع والأفعال ما هو مبنيُّ في لغة بايثون:
الأنواع المبنية مثل:
int
, float
, complex
للحسابstr
للتعامل مع الكلام المكتوبlist
, tuple
, range
, set
, dict
لغير المفردوسيأتي تفصيلها في أبوابها إن شاء الله.
الأفعال المبنية مثل: print
, sum
, max
, min
, len
الفعل | Function |
---|---|
الطباعة | print |
الجمع | sum |
الأكبر | max |
الأصغر | min |
الطول | len |
إدخال | input |
نوع | type |
أي | any |
كل | all |
التالي | next |
تطبيق | map |
تجميع | zip |
تقريب | round |
وغيرها كثير لا يفيد حصره هنا. ولا تزال اللغة تتطوَّر ويُزادُ فيها من هذه الأنواع والأفعال.
ومن خواص لغة البرمجة: إنشاء مركبات لغوية جديدة، وذلك بشيئين:
class
def
فأضاف مطوروا بايثون أنفسهم إلى اللغة ما يسمى بالمكتبة الأساسية، ومن أقسامها:
math
التي تضم مجموعة أفعال تعنى بالعمليات الرياضية على الأعدادstatistics
التي تضم مجموعة أفعال تعنى بالإحصاءdatetime
التي تضم مجموعة أنواع وأفعال تعنى بالوقت والتاريخفي هذا المثال نعرف نقطتين ثم نحسب المسافة بينهما. والمسافة الإقليدية بين نقطتين \((x_1, y_1)\) و \((x_2, y_2)\) تتبع معادلة فيثاغورس:
\[ \text{distance} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]
القطعة:
import math
x1, y1 = 0, 0
x2, y2 = 3, 4
distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
print(distance)
5.0
تفصيل هذه القطعة كالتالي:
import math
x1, y1 = 0, 0
و x2, y2 = 3, 4
distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
وفيه:
x2 - x1
هو الفرق بين الإحداثيات السينيةy2 - y1
هو الفرق بين الإحداثيات الصادية**
هي عملية تربيع العددmath.sqrt
هي فعل حساب الجذر التربيعيprint(distance)
وفيه:وتسمى المكتبات الخارجية وهي مكتبات يساهم بها الناس، ويضيفونها إلى اللغة، نجدها في موقع قاعدة بيانات PyPI الذي يضم أكثر من 580 ألف مشروع، أو غيرها من المواقع. وهذه يتم تنزيلها وتثبيتها للاستفادة من لغتها المزيدة.
على سبيل المثال، تختص حزمة pandas
المتخصصة في تفكيك وتركيب الجداول والتحليلات الإحصائية عليها؛ فهي أقوى من أي نسخة من إكسل (Excel) أو غيره.
لتثبيتها نستعمل pip
هكذا في سطر الأوامر (النافذة السوداء):
ثم نستعملها بعد جملة الاستيراد، لنجرب عملية الضربالنقطي بين مصفوفتين:
Name | Age | Grade | Gender | |
---|---|---|---|---|
0 | Mohammed | 19 | 88 | M |
1 | Abdullah | 20 | 95 | M |
2 | Ahmed | 21 | 87 | M |
3 | Khalid | 19 | 92 | M |
4 | Sara | 20 | 94 | F |
5 | Fatima | 22 | 89 | F |
6 | Omar | 21 | 91 | M |
7 | Norah | 20 | 93 | F |
8 | Turki | 19 | 86 | M |
9 | Reem | 21 | 90 | F |
ثم لعرض ملخصات إحصائية:
Age | Grade | |
---|---|---|
count | 10.000000 | 10.00000 |
mean | 20.200000 | 90.50000 |
std | 1.032796 | 3.02765 |
min | 19.000000 | 86.00000 |
25% | 19.250000 | 88.25000 |
50% | 20.000000 | 90.50000 |
75% | 21.000000 | 92.75000 |
max | 22.000000 | 95.00000 |
أو تصوير البيانات:
هكذا بكل بساطة.
فإذًا .. هنا دور المجتمع ليبني باللغة: بمفرداتها وجملها ومكتبتها الأساسية والخارجية، ليبني فوق ذلك ما يخدم أغراضه. فلكل فئة من الناس تركيب حزمة جديدة مكونة من أنواع وأفعال مركبة مبنية على غيرها ، ثم يوفرونها لغيرهم. وهكذا تنمو اللغة ، حزمةً تِلو الأخرى بحسب إسهامات كل مجتمع برمجي بما يهتم به.
ومن مكامن القوة في لغة بايثون: أنها متوافقة مع لغتي C/C++ إذْ يُمكن كتابة برمجيات عالية الأداء والكفاءة بهما مستفيدين من الحزم الموجودة فيهما، ثم توفيق ذلك ليكون كمكتبة في لغة بايثون.
فالمجتمعات البرمجية في بايثون كثيرة ومتعددة في اهتماماتها. منها على سبيل المثال: