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

Kais Hasan

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

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

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

  • عدد الأيام التي تصدر بها

    24

كل منشورات العضو Kais Hasan

  1. بعض أهم التمارين المتعلقة بالحلقات و التي يجب أن تتعلمها هي ما يلي: اكتب حلقة تقوم بالطلب من المستخدم إدخال رقم في كل مرة و تتوقف عندما يدخل -1، و تقوم بطباعة أكبر عدد أدخله المستخدم. حساب العاملي لعدد مدخل. حساب الرفع إلى قوة، أي مثلاً 3 للقوة (للأس) 4. برنامج يقوم باختيار رقم بشكل عشوائي و يطلب من المستخدم أي يحزر هذا الرقم، في كل مرة يخبر البرنامج المستخدم فيما إذا كان رقمه أصغر أو أكبر من العدد الذي خمنه، و بالطبع يتوقف عندما يدخل الرقم نفسه و يفوز المستخدم، أو يخسر المستخدم بعد عدد محدد من التوقعات.
  2. بشكل عام نستعمل lambda عندما نريد تابع بسيط يقوم بعملية بسيطة و نريد تمريره إلى تابع ما. في بايثون خصوصاً دالة lambda لا يمكن أن تكون معقدة، و بالتالي في حال أردت القيام بعملية معقدة عليك إنشاء تابع عادي لها. أيضاً في حال كنت تريد استعمال هذه العملية كثيراً فمن غير الجيد في كل مرة أن نقوم بتعريف lambda بل من الأفضل تعريف تابع واحد يتم استدعاءه في مختلف الأماكن في الكود، و بالتالي نستعمل lambda غالباً للتوابع التي لن نستعملها كثيراً أو في أكثر من مكان في الكود. أما بالنسبة لسؤالك ف key هو معطى تتوقع الدالة أن تعطيها إياه، و لذلك لا يمكنك تغييره، و لكنك بالطبع يمكنك إنشاء متغير خارجي قيمته تساوي ال lambda و لكن بشكل عام هذا الأمر غير منصوح به، فأنت كأنك تعطي اسم لهذه الدالة، و في تلك الحالة من الأفضل كتابة تابع عادي.
  3. هناك طريقة أفضل لكتابة هذا الكود بدلاً من كل ال if..else، و هي أن نقوم بوضع النتائج الخاصة بكل 10 علامات في لائحة و من ثم بعملية تقسيم بسيطة يمكننا إيجاد النتيجة، أي يمكننا كتابة ما يلي: marks = ['F-', 'F-', 'F-', 'F-', 'F-', 'E', 'D', 'C', 'B', 'A', 'A'] def print_result(grade): if grade > 100 or grade < 0: print("...") return mark = marks[grade // 10] print(mark)
  4. بالطبع يمكنك تسجيل الدخول بنفس الحساب من أي جهاز تريده. أنا شخصياً أفتح حسابي على لابتوبين و موبايل.
  5. هي عبارة عن لوحة إدارة مصممة بشكل جميل و صنعت خصيصاً للارافيل من قبل مطوري لارافيل. يمكنك الإطلاع أكثر عليها من الرابط التالي: https://nova.laravel.com/
  6. لا يوجد شرح لها في الدورة، تم استعمال قالب bootstrap من أجل صفحة الإدارة الخاصة بالموقع. يمكنك بعد إنهاء الدورة محاولة تغيير ذلك ليصبح المشروع يستعمل laravel nova و دائماً يمكنك السؤال و سنكون سعيدين بالإجابة و مساعدتك في تحقيق ذلك.
  7. يبدو أنك بحثت بشكل خاطئ، أحياناً لا يتم ذكر بايثون بشكل مباشر في تاغات الموقع بل يتم ذكر إطار عمل يستعمله مثلاً django، أنا شخصياً قمت بالعديد من الأعمال على مستقل بلغة البايثون. إنها ليست لغة ميتة بالعكس تماماً، إنها من أكثر اللغات المطلوبة حالياً. كما أن الكثير من العروض لا يحدد تماماً ما الذي ستستعمله، أي مثلاً يطلب منك بناء تطبيق لسطح المكتب، و أنت حر في إطار العمل و اللغة التي ستستعملها.
  8. يمكنك تعلم لغة البايثون بدون معرفة مسبقة بأي لغة أخرى، بالطبع من المفيد في حال كنت تعرف لغة أخرى و لكن هذا غير ضروري. لكن بما أن هذه هي اللغة الأولى لك فنصيحتي لك هو أن تركز على تطوير مهاراتك و تفكيرك المنطقي أكثر من محاولة بناء تطبيقات كبيرة، ﻷنه عندما تمتلك هذه المهارات سيصبح أمر تعلم لغة ما أكثر سهولة و سرعة. لتطوير هذه المهارات و أهمها مهارة حل المشكلات يمكنك الإطلاع على المسائل البرمجية التي تقدمها بعض المواقع مثل CodeForces و HackerRank. هذه المواقع أيضاً تحوي مسائل متعلقة ببعض الخوارزميات و بنى المعطيات و التي هي أيضاً من أهم الأمور في البرمجة.
  9. لدي خبرة 3 سنين في العمل الحر، يمكنني مساعدتك في ذلك. من ناحية الخبرة فإن هذا الأمر يختلف بين شخص و آخر و لكن بشكل عام يلزم على الأقل سنة حتى تستطيع بناء تطبيقات جيدة و القيام بأعمال متوسطة إلى كبيرة الحجم، أما في حال صادفك الحظ في إيجاد أعمال صغيرة فقد تكون 6 أشهر كافية لذلك و لكن لا تعتمد على ذلك. من المهم جداً أن يكون لديك مشاريع جيدة لعرضها في معرض أعمالك، فهذا هو المعيار الحقيقي لما تعرفه، حاول أيضاً أن تكون المشاريع ليست مكررة كثيراً و إلا قد يعتقد من يرى مشروعك أنك نسخته من مشروع آخر على github. من الجيد أن قمت بالاشتراك بدورة بايثون، الاشتراك بدورة تم وضعها من قبل خبراء سيساعدك في تسريع عملية الحصول على المعلومة، و قد تصبح قادراً على العمل خلال 6 أشهر فقط، و لكن هذا يعتمد على أن تقوم أيضاً بمشاريع بعد الدورة و ذلك لعرضها بالإضافة للمشروع الذي ستقوم به في هذه الدورة، كما أن وجود فريق من المدربين لمساعدتك سيكون لصالحك في هذا. كنصيحة أخيرة، لقد رأيت الكثير من الناس يقعون في خطأ أنهم يبحثون عن كيفية العمل بشكل حر أكثر مما يقضونه من الوقت في التعلم لتحقيق ذلك، ابدأ بالدراسة و التدريب المكثف في حال كنت تريد تحقيق ذلك، و كن واثقاً بأنك ستجد عمل إن شاء الله في حال كنت مجتهداً فلا تيأس إذا تم رفض عروضك في البداية.
  10. المقصود أي برنامج لديه وظيفة محددة يقوم بها، مثلاً تطبيق لتنظيم الأمور المالية، من ناحية طريقة العمل فهي واحدة بغض النظر عن الجهاز الذي تستعمله للتواصل مع هذا التطبيق، و لكن تختلف الواجهة، و التي هنا عبارة عن موقع تستعرضه عبر المتصفح.
  11. تطبيقات الويب هي عبارة عن تطبيقات مثل أي تطبيق عادي، و لكنها تعمل على سيرفر و يتم التعامل معها عن طريق المتصفح، أي يمكنك اعتبارها بشكل مبسط تشبه مواقع الويب. نعم يمكن تطوير تطبيقات جوال باستعمالها.
  12. هذا غريب، لا يظهر نفس الخطأ، حتى أن محتوى الشرط فارغ، من فضلك قم مشاركة الكود بعد التعديل حتى أتأكد أنك قمت بتعديله بالشكل الصحيح.
  13. لقد قمت بذكر الكود في تعليقي.
  14. من فضلك قم بطباعة تعليمة ال SQL كما ذكرت حتى يمكننا تحديد الخطأ.
  15. للتأكد دائماً من صحة أي عبارة SQL تكتبها من الجيد طباعتها. أي قم بتعريف متحول يحمل العبارة و قم بطباعته ثم تنفيذه. مثلاً كما يلي: query = "SELECT * FROM employee WHERE " + self.se_by.get() + " like '%" + self.se_var.get() + "%'" print(query) cur.execute(query) يمكنك مشاركة الخرج معنا في حال لم تستطع حل المشكلة بعد رؤية العبارة. أيضاً يمكنك تسهيل الأمور عن طريق كتابة العبارة كما يلي: query = f"SELECT * FROM employee WHERE {self.se_by.get()} like '%{self.se_var.get()}%'" print(query) cur.execute(query) هذه تدعى f-string و تستعمل لوضع متغيرات داخل ال string، هذه هي الطريقة الحديثة الأفضل للقيام بذلك.
  16. هذا يعتمد على ما تقومين باستعماله، من فضلك اذكري بعض التفاصيل الإضافية للتقنيات التي تقومين باستعمالها حتى يمكننا المساعدة بشكل دقيق. في حال كنت تقومين بالإضافة على جدول في قاعدة البيانات فيمكن الحصول على معرف آخر سطر تمت إضافته في sqlite كما يلي: select last_insert_rowid();
  17. يجب أن تكتب Number و ليس number، حالة الحرف مهمة جداً في لغات البرمجة.
  18. من فضلك شارك الكود بعد التعديل حتى أتأكد أنه تم بالشكل الصحيح.
  19. السبب في ذلك أن prompt تقوم بإرجاع القيمة المدخلة على شكل string، و بالتالي عليك تحويلها قبل ذلك عن طريق تمريرها إلى Number كما يلي: x = Number(prompt("..."));
  20. إن دورة تطوير واجهات المستخدم أفضل بالنسبة لما ذكرته، فهي ترتكز على تطوير الواجهات لمواقع الويب، على عكس الدوة الثانية التي تحوي على تطوير تطبيقات أندرويد و غير ذلك أيضاً. كما أنه من غير الجيد أن تبدأ بتعلم إطار عمل بلغة ما بدون أن تكون لديك معلومات جيدة حول هذه اللغة، و هذا ينطبق على أي لغة من اللغات بما فيها الجافا سكربت، و بالتالي من المفيد أن تتعلم الأساسيات قبل أن تتعلم إطار عمل ما. كما أن الدورة الأولى و التي هي دورة تطوير واجهات المستخدم مخصصة لمن ليس لديهم معلومات في الويب و يريدون تطوير مهاراتهم في هذا المجال. بالإضافة إلى كل ما سبق، إن تطوير الواجهات الأمامية ليس فقط جافا سكربت، حيث ستحتاج إلى htmlو css و هذا مشروح في الدورة الأولى.
  21. لا يوجد أنواع من المصفوفات في بايثون، في بايثون لدينا ما يدعى باللائحة list، هذه اللائحة يمكنها أن تحوي أي غرض كان، سواء رقم، سلسلة نصية، لائحة أخرى، أو حتى تابع. بالتالي لا فكرة من التفريق بين لائحة أحادية و لائحة ثنائية، ﻷن اللائحة الثنائية ما هي إلا لائحة أحادية عناصرها لوائح، و بالتالي أصبح لدينا العمق اثنان و لهذا دعوناها بالثنائية و لكنها في النهاية مجرد لائحة. نفس الأمر ينطبق على اللوائح الثلاثية، يمكنك حتى الحصول على لوائح رباعية أو أكثر.
  22. بما أنك لا تعرف شيئاً عن البرمجة فمن الأفضل أن تبدأ بتعلم أساسيتها و أساسيات علوم الحاسب قبل أن تتخصص في مجال ما، حيث أن أي مجال يتطلب منك معرفة الأساسيات حتى تصبح جيداً فيه. يمكنك الإطلاع على دورة اساسيات علوم الحاسب التي تقدمها الأكاديمية فهي مناسبة جداً لحالتك، حيث من خلالها يمكنك تعلم أساسيات البرمجة و الحاسوب بشكل عام، بالإضافة إلى مهارات مثل التفكير المنطقي و الذي ستلزمك كثيراً في أي مجال. من ناحية العمل فمن الصعب قليلاً إيجاد أعمال حرة في هذا المجال، أي أن أغلب الأعمال تكون في شركات و الشركات تتطلب أن يكون عمرك على الأقل 18 سنة، كما أن أغلب الشركات تطلب أن يكون لديك شهادة بكالوريوس في مجال علوم الحاسب لذلك نصيحتي لك أن تكمل تعليمك الجامعي، و لكن يمكنك طبعاً القيام ببعض الأعمال و في حال كانت جيدة جداً قد يتم قبولك بلا شهادة جامعية، و لكن لا تعتمد على ذلك و احصل على الشهادة.
  23. يبدو أن السؤال خاص بأحد الدروس من أحد الدورات، من فضلك قم بطرح الأسئلة الخاصة بدرس ما أسفل ذلك الدرس. و لكن كجواب على سؤالك بشكل عام فإن عملية التحقق يمكن وضعها في 3 أماكن و ذلك حسب أهمية هذا التحقق و هذه الأماكن بالترتيب من الأضعف إلى الأقوى: لدى المستخدم، هذا يتم مثلاً عندما تقوم بإدخال بريد الكتروني ليس له النمط العام لأي بريد الكتروني، أو عندما تحاول إدخال نص في مربع إدخال يقبل أعداد فقط. هذا النوع من التحقق جيد لتخفيف العبء على السيرفر من ناحية الطلبات الخاطئة و يساعد المستخدم على معرفة ما الذي عليه إدخاله بشكل أسرع و بالتالي يعطي تجربة جيدة للمستخدم. لكن هذا النوع يمكن تجاوزه بسهولة عن طريق إرسال طلب بشكل مباشر بدلاً من استعمال المتصفح و الكثير من الطرق الأخرى و بالتالي من غير الجيد استعماله للأمور الحساسة. في السيرفر، هذا يتم بعد إرسال المستخدم لبياناته يقوم السيرفر بالتحقق من هذه البيانات و من أنها تراعي الشروط المطلوبة. هذا أكثر أماناً من الطريقة السابقة و دائماً يمكن استعماله للأمور الحساسة و لكن الخطأ البرمجي هنا قد يسبب مشاكل غير ملحوظة. في قاعدة البيانات، هذا النوع مهم جداً لضمان أنه حتى في حال حدوث خطأ برمجي لن يتم إدخال بيانات غير مناسبة إلى قاعدة البيانات و هو مهم جداً كما في المثال الذي ذكرته. طبعاً يمكن استعمال الطرق الثلاث السابقة معاً، و لكن هذا يعتمد على حساسية التطبيق الذي تقوم ببناءه و متطلباته، بالتالي في حالتك من الجيد إضافة الشرط إلى قاعدة البيانات و لكن قد يكون ليس هذا هو الغرض من الدرس و لذلك لم يتم إضافته، و لكن عندما تقوم ببناء تطبيق حقيقي فمن الأفضل أن تضيف الأنواع الثلاث من التحققات.
  24. هناك طريقتان لحل هذا التمرين. أول طريقة تتمثل في أن تستعمل مقارنة المحارف مباشرة، و هنا سينجح الأمر لأن ترتيب المحارف الخاصة بالخانات موافق لترتيب الأرقام، أي المحرف '1' أصغر من المحرف '2' ، في هذه الحالة يمكنك فقط استعمال ما يدعى list comprehension للقيام بذلك بالإضافة إلى الدالة join، كما يلي: s = "41345491294358" res = ''.join(['1' if x >= '5' else '0' for x in s]) print(res) هذا هو الحل الأمثل بالنسبة للغة البايثون، حيث أن هذه هي الطريقة المفضلة للكتابة في هذه اللغة، بالطبع يمكنك القيام بكتابة حلقة عادية و الإضافة إلى لائحة و من ثم الدمج و لكن ذلك سيكون أسلوب اللغات الاخرى مثل c++ و ليس بايثون. الطريقة الثانية لحل هذه المسألة تكون ببناء الحل مباشرة إلى سلسلة نصية، أي بدلاً من التخزين في مصفوفة و من ثم التحويل إلى سلسلة نصية نقوم فوراً بالإضافة إلى سلسلة نصية، كما يلي: s = "41345491294358" res = '' for x in s: res += '1' if x >= '5' else '0' print(res)
  25. نقوم باستعمال البحث الثنائي لتسريع عملية البحث، أي بدلاً من أن نبحث بشكل خطي عن عنصر يمكنك استعمال البحث الثنائي، و هذا له شرطان، أولاً أن تكون العناصر مخزنة بشكل خطي (سأشرح ذلك فيما يلي) ثانياً أن تكون العناصر مرتبة. و بالتالي في حال لم تكن العناصر مخزنة بشكل خطي لا معنى من البحث الثنائي، لأنه في تلك الحالة ستكون العناصر مخزنة بشكل يسرع البحث تلقائياً. مثلاً في القواميس بلغة البايثون يمكن الوصول إلى مفتاح بشكل مباشر و بسرعة كبيرة و ذلك لأن عناصر القاموس ليست مخزنة بشكل خطي و بالتالي لا فكرة من البحث الثنائي. كذلك الأمر بالنسبة للمجموعات set فالبحث فيها سريع جداً. بالطبع يمكنك استخراج عناصر القاموس و من ثم القيام بعملية بحث ثنائي و لكن ليس من ذلك أي فائدة.
×
×
  • أضف...