توسيع برنامج ArcGIS برمجيا – ComboBox and Histogram

في هذا الدرس ستتعلم:

  • كيفية إضافة ComboBox ضمن toolbar في ArcGIS، وكيفية برمجة ComboBox.
  • إنشاء مخطط تواتر Histogram وتخزينه عن طريق مكتبة MatPlotLib في Python.

في هذا الدرس سنقوم بإضافة قائمتين منسدلتين ComboBox إحداهما لاختيار متابعة القراءة “توسيع برنامج ArcGIS برمجيا – ComboBox and Histogram”

مراقبة تغيرات منسوب مياه نهر النيل عبر تحليل صور القمر سينتينيل 1

بعد التعرف على طريقة تحميل صورة القمر سينتينيل 1 سنبدأ بأول مشروع مراقبة عملي باستخدام هذه البيانات وسنقوم بابسط انواع المراقبة بمراقبة تغيرات منسوب الماء. حيث أن اكتشاف الماء سهل وبسيط جدا من خلال صور الرادار وسنقوم باعادة دراسة فيضان نهر النيل الذي سبق وقمت بدراستها عن طريق القمر سينتيل 2 رابط المقالة.

حتى تستطيع ان تقارن النتائج وتكتشف فعالية كل قمر

المهارات المكتسبة من الدرس

    • التعرف على برنامج سناب

 

    • تعلم على افضل طريقة لقص الصورة أثناء مشاريع المراقبة للحصول على نفس المشهد

 

    • الخطوات الأساسية لمعالجة الصورة

 

  • التعامل مع البيانات التي تمت معالجتها في برامج متنوعة

متابعة القراءة “مراقبة تغيرات منسوب مياه نهر النيل عبر تحليل صور القمر سينتينيل 1”

الإقصاء الاجتماعي Social Exclusion

أن تكون عضواً في المجتمع يحمل في طياته العديد من المزايا، فكل فرد من المجتمع يجب أن توفر له إمكانية الوصول إلى البنية التحتية، الإسكان، التعليم، وإلى كل الموارد التي توفرها المدينة، ومع توفر هذه الموارد تتوفر العديد من الفرص.

لكن ما يمكن أن يحصل هو أن يجد بعض الأفراد أنفسهم مدفوعين ومطرودين متابعة القراءة “الإقصاء الاجتماعي Social Exclusion”

صور قمر سينتينيل كيف نحصل عليها وماهي أهم مميزاتها

في هذا الدرس سأقوم بإعطاء لمحة سريعة عن بيانات الرادار ومنتجات القمر سينتينيل واحد وطريقة تحميلها حيث خطوات التحميل

 القمر سينتينيل واحد يتألف من قمرين

 Sentinel 1a تم اطلاقة 13 أبريل 2014

والقمر Sentinel 1b تم اطلاقه 25 ابريل 2016

اللذين يدوران في مدار شبه قطبي على ارتفاع 693 وتكرار 12 يوم لكل قمر مما يعطي دقة زمانية عالية لمجموع القمرين تصل الى 6 ايام

وهذه الدقة الزمانية العالية مترافقة مع سرعة توصيل النتائج حيث يتم توصيل بيانات القمر خلال 24 ساعة للاستخدام العادي وفي حالات الطوارئ من 10 دقائق حتى 3 ساعات

يستخدم قمري سينتيل واحد الحزمة C -Band ذات التواتر 5.405 جيغا هرتز ذات الطول الموجي

لذلك سأعطي لمحة سريعة عن الأطوال الموجية المستخدمة في الأقمار الصناعية التي تعتمد على مبدأ الرادار

حيث الموجات المستخدمة للاستخدامات المدنية هي band -X ,band- C ,band-L اما الأطوال الأخرى فهي للاستخدامات العسكرية وكل طول موجي يفيد في اكتشاف عناصر محددة وهذا ما تظهره الصورة التالية

حيث نلاحظ أن الموجة x تنعكس من على سطح الأوراق تعطي صورة واضحة للسطح الخارجي للنسيج بينما c تنفذ ونستطيع النفاذ عبر الأوراق وتنعكس من افرع وساق الشحر بينما الموجة L تستطيع ان تخترق الأشجار وتصل إلى الأرض

فنستطيع من خلالها تميز رطوبة التربة بشكل جيدة

وقد يكون السؤال لماذا نستخدم بيانات الرادار حيث صور الرادار لا تتأثر بظروف الرؤية (تغطية الغيوم أو الليل فتمكن من الحصول على بيانات في كافة الظروف )

حيث تظهر الصورة التالية نفاذية الغلاف الجوي للاشعاعات المختلفة ونرى كيف أن أشعة الرادار لها نفاذية عالية

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

  • بخشونة السطح
  • العزل الكهربائي للسطح الذي يتأثر بمحتوى الماء والرطوبة

استخدام بيانات الرادار :

  • مراقبة حركة سطح الأرض
  • رسم وانتاج خرائط الجليد القطبي
  • كشف مواقع السفن
  • خرائط الغابات والمياه والتربة
  • خرائط في حالات الكوارث

وهي المصدر الأساسي للمعلومات البحرية ومراقبة البحار وتعطي معلومات مهمة في حالات الانزلاق الأرضي ومعلومات عن الجيولوجيا وحركة الأرض وكذلك مسارات السفن و أخطار التلوث البحري

لفهم الية تسجيل الصورة يجب التميز بين اتجاه الطيران azimuth واتجاه المسح الأفقي range حيث يتم مسح الصورة بهذين الاتجاهين

مما يؤدي إلى تشكيل صورة الرادار والصورة التالية تبين آلية المسح

صور الرادار هي عبارة عن استشعار موجب مائل حيث يتم التقاط الصور من جانب الصورة فتظهر التضاريس المقابلة لجهة التقاط الصورة بلون ساطع بينما الجهة المقابلة تظهر باللون الأسود وهذا يجعل تفسير صور الرادار في المناطق الوعرة أمر صعب لحد ما

وهذا ما تبينه الصورة التالية

تحميل صورة القمر سينتينيل واحد

نذهب الى المنصة كوبرنيكوس وهي المنصة التي يتم تحميل منها بيانات الأقمار سينتينيل ( سينتيل واحد واثنين وثلاثة )

في الرابط التالي

https://scihub.copernicus.eu/

نضغط على open Hub

ونقوم اولا بالتسجيل في حال لم تكن مسجل

وقم بادخال بياناتك كما تظهر الصورة التالية

بعد التسجيل نقوم بتحديد المنطقة التي سيتم تحميل البيانات لها من خلال الماوس وتستطيع اما عن طريق مضلع او عن طريق اختياري او صندوق حول المنطقة وهذا ما تظهره الخيارات في الزاوية اليسرى السفلية من الخريطة

ونضغط علي زر القائمة لتظهر قائمة معايير البحث

قائمة التاريخ : حيث يتم إدخال المجال الزمني الذي سيتم البحث ضمنه علي المرئية

يتم بعدها تحديد اتجاه طيران القمر مسار صاعد او هابط وعند اختيار صور للمراقبة يجب ان تكون المرئية على نفس المسار وبنفس اتجاه التحليق

وكذلك نستطيع تحديد القمر S1A أو S1B

وفي حال عدم اختيار قمر محدد سيتم البحث باستخدام منتجات القمرين

اتجاه التحليق

حيث لدينا قمرين يدورون بمجال شبه قطبي وعندما يتحرك القمر من الاعلى الي الاسفل يعتبر مسار هابط descending

وعندما يحلق من الاسفل نحو الاعلى يعتبر مسار صاعد Ascending

وعند أعمال المراقبة يتم اختيار الصور بحيث تكون بنفس الاتجاه

إدخال تاريخ البحث

حيث يتم ادخال التاريخ الذي يتم البحث فيه ضمن أرشيف سينتينيل 1 ويتمتع القمر بتغطية زمنية عالية

نمط البيانات

حيث لدينا 3 أنماط من البيانات ويجب اختيار النمط الذي يناسب المشروع

حيث يتم تمثيل كل بيكسل بطريقة عقدية يحتوي علي فرق الطور والسعة ويتم اختيار هذا النمط عند دراسة تشوهات الأرض وحركتها حيث يتضمن معلومات اكثر من النمط grund rage detection

معالجة هذا النمط من البيانات اسهل من البيانات السابقة ولا تحتوي على فرق الطور ولها دقة مكانية مربعا تقريبا وتغطية بيكسل مربعة والقليل من الضجيج و حاول استخدم هذا النمط من البيانات بالبداية فهي اسهل للمعالجة

  • OSN data

وهي بيانات جيوفيزيائية جغرافية لدراسة سطح البحار والمحيطات وتتضمن 3 أنواع من البيانات

  1. Ocean Wind field (OWI)
  2. Ocean Swell spectra (OSW)
  3. Surface Radial Velocity (RVL)

حيث تستخدم لمعرفة سرعة الرياح وسرعة الأمواج وطول الأمواج واتجاهها

الاستقطاب

وهي تمثل اتجاه الموجات عند تمثيلها تمثيل خطي في مستويين حيث يرسل القمر الصناعي موجة شاقولية ويستقبل موجة شاقولية هذا يعني لدينا التمثيل VV

وعندما يرسل شاقولي ويستقبل افقي لدينا الثنائية VH

وتظهر الصورة الحركية الموجة الاصلية في الوسط بتمثيلها باستقطاب شاقولي وافقي

والاستقطابات المتاحة لنا اثناء التحميل هي VV , VH

وعند تحميل الصور نلاحظ ان البيكسل له قيم انعكاسية مختلفة استقطابات مختلفة وكلما زادت الاستقطابات أمكن تمييز مزيد من التفاصيل في الصورة

نمط الحساس

وهو نمط نمط اكتساب البيانات ولدينا أربعة أنماط

  • Stripmap

حيث يتم أخذ هذه البيانات على شريط عرض ضيق 80 كيلومتر

وتستخدم في حالات الطوارئ

  • Interferometric wide swath

ويتم الحصول علي البيانات بشريط بعرض 250 كيلومتر وبدقة من 5 إلى عشرين متر

وتقنية topsar تضمن صورة متجانسة علي طول الشريط وهي النمط الشائع الذي ستقوم بتحميله للمشاريع اللاحقة

  • Extra wide swath EW .

وتستخدم أيضا في الحالات الطارئة حيث تتطلب تغطية واسعة خلال زمن قصير تستخدم للأعمال الملاحية واكتشاف الجبال الجليدية ويتم الحصول عليها من خلال 5 لقطات بشريط تغطية 400 كيلو متر

Wave mode

يستخدم لدراسة سطح المحيطات حيث تكون صورة بتغطية 20*20 كيلومتر ويتم الحصول على هذه الصورة من زاويتين مختلفتين

وهذه البيانات الثلاثة يمكن الحصول عليها باربع انواع استحواذ

حيث الدقة تعتمد على نمط الاستحواذ ويتم توفير هذا النمط من البيانات بأنماط الاستحواذ الثلاث (

SM,IW,EW)

ولدينا هنا مصطلحين هما الدقة المكانية وتغطية البيكسل

ويتم تعريف الدقة المكانية بانها اقل مسافة يمكن تميزها تفصل بين عنصرين علي الصورة

تغطية البيكسل مايمثله بيكسل من الصورة في العالم الحقيقي وفي النمط SLC تغطية البيكسل لاتساوي الدقة وكذلك الدقة المكانية تختلف باتجاه التحليق (azimut ) واتجاه المسح العرضي RANGE

ونلاحظ أن الدقة تتعلق بنمط الاستحواذ ونوع البيانات والروابط التالية توضح الدقة على شكل جداول حسب نمط الاستحواذ ونوع البيانات

  1. Level-1 Single Look Complex

https://earth.esa.int/web/sentinel/user-guides/sentinel-1-sar/resolutions/level-1-single-look-complex

  1. Level-1 Ground Range Detected

https://earth.esa.int/web/sentinel/user-guides/sentinel-1-sar/resolutions/level-1-ground-range-detected

رقم المدار

حيث يتم الحصول على رقم المدار من Metadata

كما تم شرحه في الخطوات السابقة وهوي يسهل عملية البحث حيث يتم البحث بالصور على طول مدار محدد

ويتم ادخال رقم المدار رسم مضلع على المنطقة المطلوبة

وفي نهاية الأمر قمنا بإدخال معايير البحث كما في الصورة

و

ونقوم بالضغط على اشارة البحث فتظهر نتائج البحث

نقوم بالضغط على أثر الصورة في الخريطة فيتم تعليم عنوان الصورة باللون الرمادي الفاتح

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

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

ومن ثم من القائمة المنسدلة Product نحصل على كافة بيانات الصورة

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

بعدها نقوم بتحميل الصورة بالضغط على أيقونة التحميل

بعد الانتهاء من التحميل نلاحظ ان اسم الصورة يتضمن كافة معلومات الصورة

وهذا ما توضحه الصورة التالية التالية والرابط التالي

https://earth.esa.int/web/sentinel/technical-guides/sentinel-1-sar/products-algorithms/level-1-product-formatting

بعد تحميل البيانات تصبح البيانات جاهزة للمعالجة من خلال برنامج ال snao tools الذي يتم تحميله من خلال الرابط التالي

Download

بعد الانتهاء من التحميل

قم بتحميل صورة رادار للمنطقة التي تعيش فيها لنتعرف في الدرس القادم على خطوات معالجة الصور

وعمل خريطة للمسطحات المائية

حاولت تقديم لمحة مختصرة وسريعة عن تحميل صور الرادار وتستطيع التسجيل بموقع

SAR-EDU حيث هناك الكثير من المحاضرات والدورات التجريبية المجانية تحت الرابط التالي

https://saredu.dlr.de/

المصادر

https://saredu.dlr.de/

https://earth.esa.int/web/sentinel/user-guides/sentinel-1-sar

الكاتب:المهندس مارتن إيليا

توسيع برنامج ArcGIS برمجيا بواسطة Arcpy

في هذا الدرس ستتعلم:

  • إضافة خصائص Python API في برنامج ArcGIS .
  • كيفية إضافة toolbar في ArcGIS وإضافة أزرار يمكن برمجتها في الـ toolbar.
  • كيفية تصدير البيانات إلى اكسل عن طريق تصميم زر مخصص مبرمج بواسطة ArcPy.

تتيح إضافة Python API تعديل واجهة المستخدم في برنامج ArcMap، هذه الإضافة تسمح للمستخدم بإضافة تطبيقات يمكن برمجتها باستخدام لغة البرمجة Python على شكل أزرار يمكن وضعها في قوائم وشرائط أدوات متابعة القراءة “توسيع برنامج ArcGIS برمجيا بواسطة Arcpy”

تعلم البرمجة في برنامج ArcGIS – الدرس الثاني

الدرس الثاني:

في هذا الدرس ستتعلم:

  • استخدام arcpy خارج بيئة ArcGIS، من تطبيق IDLE الخاص ب Python27
  • قراءة البيانات الوصفية attribute
  • انشاء حلقات for بالاعتماد على البيانات الوصفية.

بإمكانك استخدام arcpy لجميع المهام التي تستطيع إنجازها في ArcGIS Desktop، لكن ما يميز استخدام arcpy عن انشاء toolbox في برنامج ArcGIS هو إمكانية تكرار الأوامر بشكل آلي It متابعة القراءة “تعلم البرمجة في برنامج ArcGIS – الدرس الثاني”

دراسة لتوسع مدينة القاهرة بواسطة صور الأقمار الصناعية وبرنامج QGIS

في هذا الدرس سنقوم بعملية تصنيف باستخدام خوارزميات مختلفة باستخدام بيانات مختلفة باستخدام اداة تصنيف جديدة باستخدام برنامج الـ QGIS باستخدام الإضافة Semi-Automatic Classification تحت الرابط التالي

وهو ملحق ل Qgis يسمح بالتصنيف شبه التلقائي لصور الاستشعار عن بعد. كما أنه يوفر العديد من الأدوات لتحميل الصور المجانية (لاندسات، سنتينل-2، سنتينل-3، أستير، موديس)، والمعالجة المسبقة للصور(انشاء موزاييك وعرض الصور انشاء تراكيب من القنوات ، المعالجة اللاحقة للتصنيفات،

وسأقوم في هذا الدرس بعمل مشروع مراقبة لمدينة القاهرة ودراسة توسع المدينة من عام 1984 حتى عام 2017 باستخدام أرشيف القمر لاند سات متابعة القراءة “دراسة لتوسع مدينة القاهرة بواسطة صور الأقمار الصناعية وبرنامج QGIS”

الحق في المدينة Right to the City

لقد تم غالباً فهم مصطلح الحرية بإطار معين ألا وهو الحريات السياسية والإعلامية والاجتماعية ويترافق هذا المصطلح غالباً مع مصطلح الديمقراطية الذي يضمن الحرية والعدالة للجميع وفق معايير معينة تضمنها الحكومات غالبا بما يتوافق مع المجتمع. ما سأطرحه حالياً لن يكون بعيداً كل البعد عن تلك الحريات والديمقراطيات ولكن بعد وضعه في سياق آخر نعيشه في حياتنا اليومية. متابعة القراءة “الحق في المدينة Right to the City”

تعلم البرمجة في برنامج ArcGIS – الدرس الأول

في هذا الدرس ستتعلم

  • استخدام بايثون من داخل برنامج ArcGIS
  • اختيار Layer موجودة ضمن ملف mxd
  • إنشاء Layer جديدة حسب معيار معين.
  • أوامر الـخاصة بقائمة الـ geoprocessing مثل Merge، Dissolve، clip، buffer.
  • اجراء عملية اختيار بناء على البيانات الوصفية Selection by attributes.

متابعة القراءة “تعلم البرمجة في برنامج ArcGIS – الدرس الأول”

الدرس الثالث – تعلم البرمجة للمبتدئين – PYTHON

المشروع الأول

في حال كنت من القادمين الجدد الى الموقع يمكنك بدأ هذه الدورة من هذا الرابط

مهمتك الحالية

المدير سعيد جدا بالكود الذي كتبته ويريدك الان تخزين معلومات اضافية عن الموظفين

  • العنوان: عبارة عن احداثيات مكانية X,Y
  • الوظيفة: مدير, عامل, مهندس …. الخ
  • الراتب: رقم معين
  • الرقم التسلسلي: غير مرتبط بالـ Index في القائمة
  • واسترجاعها عند الحاجة كالتالي. عنوان الموظف ذو الـ Index 0 مثلا

لاتتردد في اضافة أي سؤال الى التعليقات. حيث أن التفاعل يعطيك نتائج أفضل في التعلم ويساعدنا على تصميم محتوى أفضل.

الكود الذي انتهينا من كتابته في الدرس الثاني:

employee1 = "Ahmad"
employee2 = "Mazen"
employee3 = "Noor"
employee4 = "Samira"
employeeList = [employee1 ,employee2, employee3, employee4]
def printEmp(name):
 print("Name of employee is :" + name)

for emp in employeeList:
 printEmp(emp)

نود تخزين العديد من المعلومات الخاصة بكل موظف ونعطي كل معلومة مفتاح خاص بها العنوان, الوظيفة,.. الخ. لنتعرف على مفهوم الـ Dictionaries والذي يساعدنا على تجاوز هذه المهمة.

القواميس Dictionaries

لننظر الى هذا المثال

person1 = {'id':23123,'Job':'Surveyor'}
print(person1['id'])
print(person1['Job'])
#النتيجة
#23123
#Surveyor

في هذا المثال نلاحظ أن البيانات مخزنة كأزواج. (Key,value) أزواج مفاتيح وقيم. مثلا

  • المفتاح id وقيمته 23123.
  • المفتاح Job وقيمته Surveyor

السؤال هل نستطيع تخزين القواميس ضمن قوائم؟ والجواب نعم والعكس صحيح أيضا نستطيع تخزين القوائم ضمن القواميس. لننظر الى هذه الأمثلة:

person1 = {'id':23123,'Job':'Surveyor'}
person2 = {'id':23124,'Job':'Manager', 'Name':'Ahmad'}
workers = [person1, person2]
#استدعاء العامل الأول
print(workers[0])
#استدعاء العامل الثاني
print(workers[1])
#النتيجة
#{'id': 23123, 'Job': 'Surveyor'}
#{'id': 23124, 'Job': 'Manager', 'Name': 'Ahmad'}

نلاحظ أنه بالامكان تخزين القواميس ضمن قوائم. وعند استدعاء العنصر بحسب الـ Index من القائمة فالنتيجة تكون القاموس نفسه. اذا يمكننا القيام بالعمليات السابقة كاستدعاء عنصر من القاموس بحسب المفتاح كالتالي:

person1 = {'id':23123,'Job':'Surveyor'}
person2 = {'id':23124,'Job':'Manager', 'Name':'Ahmad'}
workers = [person1, person2]
print(workers[0]['Job'])
#النتيجة
#Surveyor

اذا [workers[0 مكافئ لـ person1 ونستطيع القيام بنفس العمليات عليه. نحن الان جاهزون للعودة الى المثال السابق لمواجهة المهمة المطلوبة.

كتابة تابع يقوم بطباعة المعلومات لكل موظف:

لنقم بكتابة تابع كما تعلمنا في الدرس السابق

def print_info(emp):
    print('Name of employee is:',emp['Name'])
    print('id',emp['Id'])
    print('Name',emp['Job'])
    print('Address',emp['Address'])

person1 = {'Id':23123,'Name':'Ahmad','Job':'Surveyor', 'Address':[3,2]}
print_info(person1)

تخزين البيانات:

لنقم هذه المرة بتخزين البيانات ضمن القائمة بطريقة جديدة وذلك عبر استخدام الأمر Append كما يلي:


def print_info(emp):
    print('Name of employee is:',emp['Name'])
    print('id',emp['Id'])
    print('Name',emp['Job'])
    print('Address',emp['Address'])

person1 = {'Id':23123,'Name':'Ahmad','Job':'GIS expert', 'Address':[3,2]}
person2 = {'Id':23123,'Name':'Mazen','Job':'Surveyor', 'Address':[5,6]}
person3 = {'Id':23123,'Name':'Noor','Job':'Manager', 'Address':[3,1]}
person4 = {'Id':23123,'Name':'Samira','Job':'programer', 'Address':[2,1]}
workers =[]
workers.append(person1)
workers.append(person2)
workers.append(person3)
workers.append(person4)

print_info(workers[0])
print_info(workers[1])
print_info(workers[2])
print_info(workers[3])

استدعاء التابع ضمن حلقة:


def print_info(emp):
    print('Name of employee is:',emp['Name'])
    print('id',emp['Id'])
    print('Name',emp['Job'])
    print('Address',emp['Address'])

person1 = {'Id':23123,'Name':'Ahmad','Job':'GIS expert', 'Address':[3,2]}
person2 = {'Id':23123,'Name':'Mazen','Job':'Surveyor', 'Address':[5,6]}
person3 = {'Id':23123,'Name':'Noor','Job':'Manager', 'Address':[3,1]}
person4 = {'Id':23123,'Name':'Samira','Job':'programer', 'Address':[2,1]}
workers =[]
workers.append(person1)
workers.append(person2)
workers.append(person3)
workers.append(person4)

for x in workers:
    print_info(x)

مهمة جديدة

الان يطلب منك المدير اضافة قسم لطباعة رواتب الموظفين بحسب مهماتهم. الشركة راتب أساسي قدره 2000:

  • المدير يحصل على نسبة 1.5 من الراتب الأساسي
  • المساح يحصل على نسبة 1.2 من الراتب الأساسي
  • خبير نظم المعلومات الجغرافية يحصل على نسبة 1.3 من الراتب الأساسي
  • المبرمج يحصل على نسبة 1.4 من الراتب الأساسي

اذا علينا اضافة شرط للطباعة. لنتعرف على كيفية كتابة الشروط المنطقية في بايثون

الشروط المنطقية

تساعدنا على توجيه البرنامج حسب بعض الشروط. يمكن التعبير عنها بهذه الجملة مثلا:

اذا كان الشرط محقق True اطبع 5. اذا كان الشرط محقق True اطبع 6

condition= True
if(condition):
 print(5)

condition= False
if (condition):
 print(6)

#النتيجة
#5

نلاحظ أن البرنامج يطبع 5 فقط. كون الشرط لم يتحقق في الخطوة الثانية.

لنأخذ هذا المثال الجانبي لفهم الشروط المنطقية. لدينا رقم ما مخزن في متحول x ونريد طباعة موجب “Positive” في حال كان الرقم أكبر من الصفر ونتحقق بذلك عن طريق الرمز . وسالب “Negative” في حال كان الرقم أصغر من الصفر. أكبر وأصغر يتم التعبير عنها عن طريق هذه الرموز < >. وفي حال كان الرقم مساوي للصفر Zero. انتبه التحقق من المساواة مختلف عن المساواة ويتم التعبير عنه بهذا الرمز ==

#حاول أن تختبر عدة احتمالات
x = 14.2
if (x > 0):
  print('Postive')
if (x < 0):
  print('Negative')
if (x == 0):
  print("Zero")

نستطيع ومن الأفضل اختصار الكود السابق باستخدام كلمة elif وهي اختصار لـ Else if كالتالي:


x = 14.2
if (x > 0):
  print('Postive')
elif (x < 0):
  print('Negative')
elif (x == 0):
  print("Zero")

نلاحظ أنه في حال كان العدد غير موجب أو سالب فهو بالتأكيد صفر. فلا داعي للتحقق من الشرط الأخير وبالتالي يمكن اختصار الكود أكثر كالتالي:


x = 0
if (x > 0):
  print('Postive')
elif (x < 0):
  print('Negative')
else:
  print("Zero")

لنعرف تابعا يقوم باعادة قيمة الراتب:

نستخدم هنا كلمة جديدة وهي Return والتي تقوم باعادة قيمة معينة بعد تنفيذ التابع. في هذا المثال ضعفي الراتب الأساسي:

def calculate_salary():
 basicSalary = 2000
 calcuatedSalary = 2* basicSalary
 return calcuatedSalary

print(calculate_salary())

لنقم باضافة نوع العمل كمدخل على هذا التابع. و الشروط المنطقية:


def calculate_salary(job):
    basicSalary = 2000
    if (job == 'Manager'):
        return  1.5 * basicSalary
    elif (job == 'programer'):
        return  1.4 * basicSalary
    elif (job == 'GIS expert'):
        return  1.3 * basicSalary
    elif (job == 'Surveyor'):
        return  1.2 * basicSalary

print(calculate_salary('programer'))

مهمتك للدرس القادم دمج الكود الأخير بالكود الرئيسي هنا لتنجز المهمة:


def print_info(emp):
    print('Name of employee is:',emp['Name'])
    print('id',emp['Id'])
    print('Name',emp['Job'])
    print('Address',emp['Address'])

person1 = {'Id':23123,'Name':'Ahmad','Job':'GIS expert', 'Address':[3,2]}
person2 = {'Id':23123,'Name':'Mazen','Job':'Surveyor', 'Address':[5,6]}
person3 = {'Id':23123,'Name':'Noor','Job':'Manager', 'Address':[3,1]}
person4 = {'Id':23123,'Name':'Samira','Job':'programer', 'Address':[2,1]}
workers =[]
workers.append(person1)
workers.append(person2)
workers.append(person3)
workers.append(person4)

for x in workers:
    print_info(x)

الان نصيحة من That GIS Guy لك:

أنت الان مستعد لكتابة برامج أكثر تعقيدا وقد تتضمن المشاريع التي تعمل بها العديد من الأشخاص. لذلك من المهم مراعاة بعض النقط الجمالية لدى كتابة الكود بطريقة محترفة وجميلة, مثلا (المرجع):

  • حافظ على استخدام 4 مسافات بيضاء Space بدلا من استخدام زر Tab
  • لا تتجاوز 79 محرفا في كل سطر
  • استخدم أسطر فارغة لفصل الـ (Function, Classes)عن بقية الكود
  • وثق عن طريق docstring
  • استخدم مسافات حول المعاملات operators

لاتنسى مشاركة هذه الدورة مع أصدقائك المهتمين