= 900
pages = 50
speed = pages / speed
finish_time
if finish_time < 14:
print('الوقت كافٍ')
else:
print('داهمنا الوقت')
داهمنا الوقت
يتألف البرنامج المكتوب بلغة البرمجة من قِطَع 📄📄📄 هي عبارة عن سلسلة من الجُمَل البسيطة والمركبة المكونة من مُفْرَدات للتعبير عن أوامر يكتبها المبرمج ويقرأها الحاسب 💻️، تَتَّبِعُ قَواعِدَ نَحْوِيَّة صارمة حتى لا يشتبه عليه تفسيرها عند تحويلها لتعليمات مفصَّلة على لغة المنطق الرقمي للآلات المكون منها الحاسب لتنفذها.
وفي هذا المثال عرضٌ لقطع برمجية في بايثون وشرحٌ لعملها، وليس المطلوب أي شيء منها أو تأمُّلَه ومحاولة فهمه بل هذه نظرة عامَّة لتكوين تصوُّر مُجْمَل عمّا سيأتي إن شاء الله.
تُنَفَّذُ القطعة (Snippet) بحسب ترتيب جُمَلِها نزولاً من الأعلى.
= 900
pages = 50
speed = pages / speed
finish_time
if finish_time < 14:
print('الوقت كافٍ')
else:
print('داهمنا الوقت')
داهمنا الوقت
في هذه القطعة مجموعة جُمل، نشرحها سطرًا سطرًا:
900
و 50
) لمتغير (pages
و speed
).finish_time
يستعمل الشرطة السفلية بدلاً من المسافة (وهذا ضروري)if
(بمعنى إن كان)
finish_time < 14
else
(بمعنى فإن لم يكن) جملة معلَّقة بانتفاء الشرطفهذه أربعة أنواع من الجُمل في قطعة واحدة. والجملة في بايثون لها أنواعُ كثيرة، وتنقسم إلى قسمين: بسيطة ومركبة:
جملة بسيطة وهي 14 جملة:
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)
جملة مركبة وهي 10 جمل:
if ...
while ...
for ...
try ...
with ...
match ...
def ...
class ...
async def ...
[T1[, T2, ...]]
أول أنواع الكلمة هو الكلمات الأصلية (Keywords) التي لها معنىً خاصّ مفهوم لدى بايثون وتستعمل في جُمَل محددة. وهي 35 كلمة:
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
ومنها كذلك 4 كلمات: match
, case
, type
و _
(الشرطة السفلية).
وما عدا ذلك؛ فإما مُتَغَيِّر أو قيمته.
فالمُتَغَيِّر (Variable)، فنحو: x
أو price
أو body_weight
فكلها أسماء مقبولة للمتغيرات؛ لا كما في الرياضيات التي عادةً ما تستعمل الحرف الواحد.
والقِيمَة (Value)، فنحو: 44
أو 3.14
أو "كيف حالك؟"
، ويسمَّى حرفيًّا (Literal).
ومنها المحددات (Delimiters)، نحو: ( )
و [ ]
و { }
والفواصل، نحو: ,
(الفاصلة اللاتينية) و :
(النقطتان الرأسِيَّتان) و =
(علامة التعيين).
()
في العبارة: (y + z) * (a + b)
لتحديد ترتيب العمليات()
في العبارة: (10, 20, 30)
لتحديد صف من الأرقامومن الحروف العوامل (Operators)، نحو: +
و *
و /
و **
و ==
فمثلاً: العامل +
يفسَّر بحسب السياق: x + y
x = 5
و y = 10
فهما من نوع الرقم (Number) فهي للجمعx = "Ahmad"
و y = "Belal"
فهما من نوع النص (String) فهي للدمج بينهماx = 5
و y = "Belal"
فهما من نوع الرقم و النص فليسَ بمعرَّف (خطأ)ومن الأنواع والإجراءات ما هو مبنيُّ (Built-in) في لغة بايثون:
الأنواع المبنية مثل:
int
, float
, complex
للحسابstr
للتعامل مع الكلام المكتوبlist
, tuple
, range
, set
, dict
لغير المفردgraph TD A[<b>شيء</b> <br> <code>Object</code>] --> B[<b>رقم</b> <br> <code>Number</code>] B --> E[<b>صحيح</b> <br> <code>int</code>] B --> F[<b>عشري</b> <br> <code>float</code>] B --> G[<b>مركب</b> <br> <code>Complex</code>] A --> D[<b>جمع</b> <br> <code>Collection</code>] D --> M[<b>تسلسل</b> <br> <code>Sequence</code>] M --> C[<b>نص</b> <br> <code>str</code>] M --> H[<b>قائمة</b> <br> <code>list</code>] M --> I[<b>صف</b> <br> <code>tuple</code>] M --> J[<b>نطاق</b> <br> <code>range</code>] D --> K[<b>مجموعة</b> <br> <code>set</code>] D --> L[<b>قاموس</b> <br> <code>dict</code>]
وسيأتي تفصيلها في أبوابها إن شاء الله.
الإجراءات المبنية مثل: print
, sum
, max
, min
, len
الإجراء | Function |
---|---|
الطباعة | print |
الجمع | sum |
الأكبر | max |
الأصغر | min |
الطول | len |
إدخال | input |
نوع | type |
أي | any |
كل | all |
التالي | next |
تطبيق | map |
تجميع | zip |
تقريب | round |
وغيرها كثير لا يفيد حصره هنا. ولا تزال اللغة تتطوَّر ويُزادُ فيها من هذه الأنواع والإجراءات.
ومن خواص لغة البرمجة: إنشاء مركبات لغوية جديدة، وذلك بشيئين:
def
وسيأتي في باب البرمجة الإجرائيةclass
وسيأتي في باب البرمجة الشيئيةفأضاف مطوروا بايثون أنفسهم إلى اللغة ما يسمى بالمكتبة الأساسية (Standard Library)، ومن أقسامها:
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
= 0, 0
x1, y1 = 3, 4
x2, y2 = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
distance 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)
وتسمى المكتبات الخارجية (External Libraries) وهي مكتبات يساهم بها الناس، ويضيفونها إلى اللغة، نجدها في موقع قاعدة بيانات PyPI الذي يضم أكثر من 580 ألف مشروع، أو غيرها من المواقع. وهذه يتم تنزيلها وتثبيتها للاستفادة من لغتها المزيدة.
على سبيل المثال، تختص حزمة pandas
المتخصصة في تفكيك وتركيب الجداول والتحليلات الإحصائية عليها؛ فهي أقوى من أي نسخة من إكسل (Excel) أو غيره.
لتثبيتها نستعمل uv
هكذا في سطر الأوامر (النافذة السوداء):
uv add pandas
ثم نستطيع استعمال المكتبة لقراءة بيانات الطلاب -مثلاً- من ملف CSV:
import pandas as pd
= pd.read_csv('../../datasets/students.csv')
df df
Name | Age | Grade | Done | |
---|---|---|---|---|
0 | Adam | 22 | 90 | F |
1 | Belal | 23 | 92 | F |
2 | Camal | 24 | 91 | T |
3 | Dawod | 8 | 99 | F |
4 | Emad | 9 | 98 | F |
ثم لعرض ملخصات إحصائية:
=['number']) df.describe(include
Age | Grade | |
---|---|---|
count | 5.000000 | 5.0000 |
mean | 17.200000 | 94.0000 |
std | 7.981228 | 4.1833 |
min | 8.000000 | 90.0000 |
25% | 9.000000 | 91.0000 |
50% | 22.000000 | 92.0000 |
75% | 23.000000 | 98.0000 |
max | 24.000000 | 99.0000 |
أو تصوير البيانات:
هكذا بكل بساطة.
فإذًا .. هنا دور المجتمع (Community) ليبني باللغة: بمفرداتها وجملها ومكتبتها الأساسية والخارجية، ليبني فوق ذلك ما يخدم أغراضه. فلكل فئة من الناس تركيب حزمة جديدة مكونة من أنواع وإجراءات مركبة مبنية على غيرها ، ثم يوفرونها لغيرهم. وهكذا تنمو اللغة ، حزمةً تِلو الأخرى بحسب إسهامات كل مجتمع برمجي بما يهتم به.