اذهب إلى المحتوى

عبدالله عبدالرحمن11

الأعضاء
  • المساهمات

    526
  • تاريخ الانضمام

  • تاريخ آخر زيارة

إجابات الأسئلة

  1. إجابة عبدالله عبدالرحمن11 سؤال في خطأ Key Error: Age في بايثون كانت الإجابة المقبولة   
    هناك عدة لطرق لعمل ذلك ، مثل
    كتابة الأقواس المعكوفة مرتين
    x = "{{Age}}{0} ".format(23) print(x) أو يمكنك عمل ذلك بصيغة %
    x = " {Age}%s" print (x%(23)) أو إستخدام قوالب السلاسل النصية template string
    from string import Template x = Template("$open Age $close") x = x.substitute(open='{',close='}') print('{} {}'.format(x,23))  
  2. إجابة عبدالله عبدالرحمن11 سؤال في إستخدام إصدارات بايثون مختلفة مع virtualenv كانت الإجابة المقبولة   
    يمكنك إستخدام الطرق المذكورة مسبقاً ، ولكن هناك طريقة أسهل لعمل ذلك وهي كالآتي
    virtualenv venv --python=python2.7 ولكن هذه الطريقة تعمل إذا كنت مثبت ل python2.7 في مستوى النظام ، أي أن يكون المسار كالآتي
    /usr/bin/python2.7 أما إذا استخدمت homebrew لتثبيت بايثون أو إستخدمت أي طريقة أخرى لتثبيت بايثون ويكون المسار مختلف عن المذكور في الأعلى ، فيجب عليك تحديد المسار كالآتي
    virtualenv venv --python=المسار virtualenv venv --python=/usr/local/bin/python يمكنك معرفة مسار بايثون بإستخدام الأمر التالي
    which python أو إذا كنت تريد بايثون 3 كالآتي
    which python3  
  3. إجابة عبدالله عبدالرحمن11 سؤال في خطأ IndentationError يحدث دائمًا في ملفات بايثون كانت الإجابة المقبولة   
    بما أنك تستخدم VSCode والذي يعتبر محرر أكواد عام general purpose code editor ، بمعنى أنه يستخدم لأي لغة برمجة بشكل عام ، ولكن هناك متجر الإضافات الخاص ب VSCode والذي ستجد فيه الكثير من الإضافات الذي ستساعدك في البرمجة بأي لغة
    ويوجد ايضاً إضافات مخصصة لبايثون وأول إضافة يجب عليك تثبيتها هي python ويوجد فيها العديد من الميزات الذي ستساعدك بالتطوير ببايثون ، بالإكمال التلقائي وإظهار الأخطاء والإقتراحات
    وبما أن بايثون يعتمد بشكل أساسي على المسافات indentation فيمكنك تثبيت autopep8 بإستخدام pip
    pip install pep8 pip install --upgrade autopep8  
  4. إجابة عبدالله عبدالرحمن11 سؤال في كيفية تحويل byte type إلى string في بايثون؟ كانت الإجابة المقبولة   
    عندما تقوم بسحب البيانات من الويب فانت تحصل عليها على شكل خام ثنائي binary أو byte type 
    وعندما تقوم بحفظها في ملف بإستخدام الدالة المخصصة لذلك تحصل على هذا الخطأ
    TypeError: string argument expected, got 'bytes ومعناه أن دالة الحفظ تتوقع المدخل أن يكون من نوع سلسلة نصية string لحفظها في الملف ولكن حصلت على نوع byte type
    لهذا يجب عليك أولاً تحويل البيانات الذي تريد حفظها من نوع byte الى نوع string
    وإذا أردت تحويل من نوع byte
    b = b"content" type(b) # <class 'bytes'> الى نوع string فيمكنك إستخدام هذا الكود
    bytes = b'content' bytes.decode("utf-8") او يمكنك إستخدام هذا الكود ايضاً
    b = b'content' str(b, 'UTF-8')  
  5. إجابة عبدالله عبدالرحمن11 سؤال في خطأ RecursionError: maximum recursion depth exceeded in comparison كانت الإجابة المقبولة   
    هناك منطقة في الذاكرة memory تسمى بالتكدس Stack وهي خاصة بمتابعة سجل إستدعاء الدوال function calls ، فعلى سبيل المثال في دالتك التكرارية عند إستدعائها يتم تسجيلها في التكديس stack وعندما تقوم بإستدعائها مرة أخرى يتم تسجيل بشكل مكّدس يعني فوق الاستدعاء السابق function call وهكذا عند إستدعاء أي دالة يتم تكديسها فوق السابق وعندما الدالة تنتهي من عملها يتم إزالتها من التكديس والعودة الى الدالة الآخرى الذي قبلها وهكذا
    لكن الذاكرة memory محدودة ولها سجل تكديس محدود فعندما تتجاوز هذا الحد فإن هذا يؤدي الى فشل البرنامج وتسمى هذه المشكلة ب stack overflow لهذا لغة python قامت بوضع حد إفتراضي وهو 997 لكي لا تصل الى stack overflow ويمكنك تجاوز الحد الإفتراضي ولكن هذا خطر لأنك قد تتجاوز الحد النهائي ، وهذا الكود لتجاوز الحد الإفتراضي
    import sys sys.setrecursionlimit(1200) # هنا تقوم بتغيير الحد الإفتراضي لهذا إذا كانت الدالة تتجاوز الحد النهائي فيمكنك إستخدام الحلقات loops بدلاً من الدوال التكرارية recursive functions
  6. إجابة عبدالله عبدالرحمن11 سؤال في مشكلة: إستدعاء أي دالة على نص لا تعمل في بايثون كانت الإجابة المقبولة   
    دالة replace. تعتبر دالة نقية pure function
    والدالة النقية pure function لديها ميزتين هما
    دائماً تحصل على نفس المُخرجات return value لنفس المُدخلات arguments الدوال النقية ليس لديها آثار جانبية side effects بمعنى أنها لاتقوم بتعديل أي شيء خارج هذه الدالة فدالة replace لم تقم بتعديل المتغير name لانه خارج الدالة ، لهذا قامت بعمل نسخة معدلة من المتغير name وقامت بإرجاع المتغير الجديد ولم تقم بتعديل المتغير الأصلي
    لهذا يجب عليك تعيين المتغير name بالمتغير الجديد الراجع من دالة replace
    name = 'Adam' name = name.replace('am', 'd')  
  7. إجابة عبدالله عبدالرحمن11 سؤال في ربط دومين فرعي بـ سيرفر ubuntu خاص لايوجد عليه موقع كانت الإجابة المقبولة   
    في البداية يجب عليك شراء اسم نطاق domain ومن إعدادت التحكم الخاصه بهذا domain تستطيع ربطه بال public IP الخاص بهذا السيرفر
    ويمكن; الحصول على عنوان ال public IP الخاص بهذا السيرفر عن طريق إستخدام أي أمر من الأمور التالية
    dig +short myip.opendns.com @resolver1.opendns.com او هذا
    host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}' او هذا
    wget -qO- http://ipecho.net/plain | xargs echo او هذا
    wget -qO - icanhazip.com اما الأوامر التالية سيجب عليك تثبيت curl بإستخدام هذا الأمر
    sudo apt install curl ومن ثم يمكنك إستخدام أحد الأوامر الآتية
    curl ifconfig.co او هذا
    curl ifconfig.me && echo او هذا
    curl icanhazip.com وبعد الحصول على ال public IP address او عنوان IP العام ، يمكنك ربط اسم النطاق domain name او حتى الاسم الفرعي من لوحة التحكم الخاصة بإسم النطاق وربطها بالعنوان الذي حصلت عليه من أحد الأوامر السابقة
  8. إجابة عبدالله عبدالرحمن11 سؤال في كيفية إستدعاء ملف بايثون في مجلد آخر؟ كانت الإجابة المقبولة   
    هناك عدة طرق لعمل ذلك منها: إستدعاء الوحدة module الذي تسمى ب sys بإستخدام إحدى الوظيفتين
    ويتم تحديد المسار على حالتين إما يكون المسار كامل absolute أو يكون المسار نسبي أو ذو صلة relative
    فالمسار المطلق أو الكامل absolute نبداء بالجذر root أي بهذه الإشارة / مثل
    /projects/blog/helpers إذا كان المجلد projects في الجذر وهنا تكمن مشكلة بحيث يجب علينا أن نقوم بتحديد المسار كاملاً
    أما المسار النسبي relative فهو تحديد المسار نسبياً للمكان الذي نحن فيه ولا يجب أن نعرف المسار الكامل absolute ، فإذا أردنا الوصول الى مسار files.py من مسار all.py بإستخدام المسار النسبي فيمكننا كتابة المسار هكذا
    ../../blog/helpers أما كيفية إستدعائه في بايثون فهناك عدة طرق وسنستخدم المسار النسبي لأنه أفضل عندما لايكون لدينا المسار الكامل
    1- sys.path.append كما في الكود
    import sys sys.path.append('../../blog/helpers') import files 2- sys.path.insert كما في الكود
    import sys sys.path.insert(1,'../../blog/helpers') import files  
  9. إجابة عبدالله عبدالرحمن11 سؤال في كيفية تطبيق الضرب الديكارتي في قوائم بايثون؟ كانت الإجابة المقبولة   
    يمكنك إستدعاء هذه الحزمة itertools.product و هي متاحة في بايثون من إصدار 2.6
    import itertools sections = [ [1, 2, 3], [4, 5], [6, 7] ] for element in itertools.product(*sections): print(element) وهذا الكود مشابه للكود السابق
    for element in itertools.product([1, 2, 3], [4, 5], [6, 7]): print(element)  
  10. إجابة عبدالله عبدالرحمن11 سؤال في كيفية تمرير البيانات للأوبجكت عند انشائه في بايثون كانت الإجابة المقبولة   
    عند إنشاء الكائنات Objects يتم إستدعاء دالة البناء Constructor في بايثون تعرف بإسم دالة التهئية __init__
    class Person: def __init__(self, name): # دالة التهيئة أو دالة البناء self.name = name من خلال هذه الدالة يمكنك تمرير البيانات عند إنشاء الكائنات objects 
    في الكود السابق أضفنا المُدخل name لتمرير بيانات بإسم هذا المتغير أما self فهي ضرورية لأنها تشير الى الكائن الذي تم إستدعاء دالة البناء عليه
    والآن يمكن إنشاء كائن وتمرير البيانات هكذا
    test = Person('Ali') عندما يتم تشغيل هذا الكود فإنه سيتم إستدعاء دالة البناء أو دالة التهيئة وتمرير Ali الى دالة التهيئة
  11. إجابة عبدالله عبدالرحمن11 سؤال في لماذا نستخدم كلمة self في كل دالة في بايثون؟ كانت الإجابة المقبولة   
    self تشير لنفس الكائن ويتم إضافتها للوصول الى بيانات نفس الكائن وهذه أمثلة للتوضيح أكثر
    إذا استخدمنا الكود خاصتك بدون تمرير self
    class MyClass: def myMethod(name): self.name = name فلن يحصل أي خطأ وايضا عند إنشاء كائن من هذا الصنف
    test = MyClass() فلن يحصل أي خطأ ولكن عندما نقوم بإستدعاء name من هذا الكائن
    test.name('ali') هنا ستظهر لك مشكلة بأن الكائن test ليس لديه name ، لماذا؟
    لأنها عند إستدعاء أي دالة على الكائن وتمرير self فإنه في الخلفية يتم تمرير هذا الكائن تلقائياً
    والآن الدالة التي تم إستدعائها لديها الوصول الى هذا الكائن
    class MyClass: def myMethod(self, name): self.name = name والآن عند إستخدام هذا الكود فإن الدالة myMethod عند إستدعائها سيتم تمرير هذا الكائن تلقائياً والآن لديها الوصول الى هذا الكائن
  12. إجابة عبدالله عبدالرحمن11 سؤال في تعديل قائمة في بايثون يعدل على قائمة أخرى كانت الإجابة المقبولة   
    في الحقيقة التعيين Assignment بإستخدام إشارة = لا يقوم بالنسخ للكائنات objects وليس المتغيرات العادية مثل هذا الكود
    a = 5 b = a b += 1 print(a) # 5 طبع print(b) # 6 طبع ففي هذا الكود تم النسخ لأنها متغيرات عادية وليست كائنات objects
    أما في الكود الخاص بك عندما قمت 
    newList = Arr هنا لم تقم بالنسخ بل قمت بإنشاء متغير جديد يشير الى مكان المتغير الأول في الذاكرة
    الآن لديك متغيرين مختلفين بالاسم يشيران الى نفس المكان في الذاكرة
    أما إذا أردت عمل نسخ للكائنات Object فهناك العديد من الطرق ومنها عمل وظيفة تحتوي على حلقة التكرار بFor وهذا الأمر يأخذ وقت غير ضروري لأن هناك وظائف مدمجة مع بايثون لعمل النسخ
    لعمل نسخ سطحي Shallow Copy فيمكنك إستخدمه لنسخ الكائنات الذي لا تحتوي على كائنات داخلها كما في الكود
    import copy Arr = [1, 2, 3] newList = copy.copy(Arr) أما إذا أردت عمل نسخ عميق Deep copy وتستخدمه للكائنات الذي تحتوي على كائنات
    import copy Arr = [1, 2, 3] newList = copy.deepcopy(Arr)  
  13. إجابة عبدالله عبدالرحمن11 سؤال في تعديل متغير عام من داخل دالة في بايثون كانت الإجابة المقبولة   
    عندما قمت بإعادة تعيين المتغير x من داخل الوظيفة فانت قمت بإعادة تعيين متغير محلي x نسخة من المتغير الأصلي
    ومن ثم قمت بطباعة المتغير المحلي المعدل وليس الرئيسي
    أما إذا أردت الوصول الى المتغير الأصلي وتعديله فيجب عليك كتابة الكلمة global واسم المتغير داخل الوظيفة مثل
    x = 5 def printX(): global x ومن ثم يمكنك التعديل على المتغير الأصلي كما هو موضح في الكود
    x = 5 def printX(): global x # يجب كتابة هذه الكلمة للوصول للمتغير x = 6 print(x) printX() print(x)  
  14. إجابة عبدالله عبدالرحمن11 سؤال في كيف اعالج هذا الخطأ .. Heroku كانت الإجابة المقبولة   
    إذا تستطيع إرسال الكود لأنه يبدوا أن هناك مشكلة في الكود الخاص بك ليس مضبوط للتوافق مع Heroku
  15. إجابة عبدالله عبدالرحمن11 سؤال في لماذا تنقص مساحة القرص C تلقائيا دون اضافة اى ملفات لها .. وكيف اقوم بحذف الملفات الموقتة من الجزء C من القرص دون حذف ملفات هامة خاصة بالعمل ؟؟ -- React native , Node js كانت الإجابة المقبولة   
    يمكنك تنزيل برنامج everything من هنا وتثبيته في جهازك
    ومن ثم قم بضبط الإعدادت كما في الصور
    ومن ثم اضغط على الزر الأيمن على القرص C واضغط على الأيقونة الخاصة ببرنامج everything
    ومن ثم اضغط على Search ثم اضغط على folders لكي تكون النتائج مجلدات فقط والآن يمكنك الفرز حسب الحجم والإطلاع الكامل على كل المجلدات في القرص C مع أحجامها وتسطيع معرفة ماهو الذي يملئ القرص C بكل سهولة



  16. إجابة عبدالله عبدالرحمن11 سؤال في طرق استخدام css مع صفحة html كانت الإجابة المقبولة   
    هناك ثلاث طرق لاستخدام الCSS مع صفحات HTML
    1- طريقة inline يعني اختر أي عنصر html ثم اضف style وضع داخلها نص ال CSS الذي تريده
    <h1 style="color:blue;">عنوان</h1> 2- عن طريق كتابة العنصر style ووضع  نص ال CSS الذي تريده داخلها
    <style> h1 {color:blue;} </style> 3- الطريقة الأخيرة هي عبر وضع كود CSS في ملف نصي منفصل ينتهي الملف ب css بدلاً من txt ويتم استدعائه في ملف html هكذا
    الملف الخارجي بإسم styles.css وهذا مثال لكود css داخله
    h1 {color:blue;} وهذا ملف html وفيه كيفية إستدعاء الملف الخارجي
    <head> <link rel="stylesheet" href="styles.css"> </head> ويكون الإستدعاء داخل عنصر ال head
×
×
  • أضف...