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

Kais Hasan

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

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

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

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

    24

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

  1. إن هذا العامل هو اختصار لعدة عمليات في عملية واحدة، فبواسطته يمكنك تحديد فيما إذا كان طرفاه متساويان أو أحدهما أكبر من الآخر. و هو يدلنا على ذلك من خلال قيمة معادة كما يلي: في حال كان الطرفان متساويان يعيد 0. في حال كان الطرف على اليمين أكبر من الطرف على اليسار يعيد -1. في حال كان الطرف على اليسار أكبر من الطرف على اليمين يعيد 1. و بالتالي يمكنك استعماله في حال احتجت لهذه العمليات في شرط واحد.
  2. من فضلك هل يمكنك تحديد أي تطبيق و المزيد من التفاصيل حتى نستطيع مساعدتك؟ في حال كان السؤال تابع لأحد الدروس فمن الأفضل نشر السؤال في قسم التعليقات أسفل الدرس. و في حال كنتي تقصدين سطر الأوامر فيمكن الوصول إليه بكتابة cmd في خانة البحث
  3. من غير الجيد تخزين هذه الملفات في قاعدة البيانات، من الأفضل أن يتم تخزينها في وسط تخزين خارجي و وضع المسار الخاص بها فقط. هذا أفضل من ناحية الأداء، بالإضافة إلى أنه أوفر، حيث أن تكلفة التخزين لقاعدة البيانات أكبر بكثير من تكلفة التخزين العادي. يمكنك التخزين على إحدى خدمات التخزين على السحاب التي توفرها الكثير من الشركات و منها AWS, Google و غيرها الكثير،و نقوم بوضع رابط الصورة أو الملف في قاعدة البيانات فقط.
  4. من فضلك قومي بمحاولة حل التمرين لوحدك في البداية،فإعطاءك الحل مباشرة لن يساعدك في تحسين مهاراتك البرمجية. يمكننا مساعدتك في الفكرة العامة و في حال حاولتي و ظهر لك أخطاء أيضاً يمكننا مساعدتك، لكن لا يمكننا إعطاءك الحل فوراً. هنا كما تلاحظين مرة نريد أن نجمع العدد و مرة نريد طرحه، و كما يمكن الملاحظة فإننا نريد جمع الأعداد الفردية و طرح الزوجية. بالتالي هنا لدينا عدة مكونات، حلقة للمرور على الأعداد يفترض أنك تستطيعين كتابة هذا الجزء، و إلا قومي بالتحقق من مقالات حسوب و تعلم ما يلزم لكتابة الحلقة. نريد أيضاً شرط للتحقق فيما إذا كان العدد فردي أم زوجي، سأترك لك وظيفة التفكير في كيفية التحقق من ذلك، و لكنه شرط بسيط و غير معقد. حسب الشرط السابق إما علينا أن نجمع أو نطرح، بالطبع سنجمع أو نطرح إلى متحول يمثل المجموع نكون قد عرفناه قبل الحلقة. لا فرق بين الحلقات بشكل يؤثر على الفكرة، أي الفكرة تبقى نفسها و لكن فقط علينا الانتباه إلى أين نحن في الحلقة و متى يجب أن تتوقف الحلقة.
  5. من الجيد أن تتطلع على موسوعة حسوب و لكن أعتقد أنه من الأفضل أن تقوم بتدوين ملاحظاتك فكل شخص لديه نقاط يحب التركيز عليها أكثر من نقاط أخرى، اكتب ملاحظاتك و قارنها مع ما هو موجود في موسوعة حسوب و في حال وجدت شيئاً لم تكتبه و يهمك التركيز عليه يمكنك نقله إلى دفترك. يفضل أن تقوم بتجريب ما قمت بتعلمه في كل درس قبل الانتقال إلى الدرس التالي، أي قم بمحاولة تنفيذ ما تم ذكره بشكل حرفي، ثم حاول التعديل قليلاً لرؤية ما الذي سيحدث. أما من أجل المشاريع فهذا يعتمد على الدرس، و لكن بشكل عام الأفكار الكبيرة التي تمكنك من عمل مشروع تحتاج أكثر من درس واحد. أي قم بتجارب صغيرة و محدودة بعد كل درس و المشاريع بعد مجموعة من الدروس.
  6. إن هذا الأمر طبيعي و يواجهه الكثير من المبرمجون، ما يهم هو أنك تستفيد من كل تجربة فاشلة، هذا يدل على أنك تتعلم و تتطور، بينما لو كان الأمر سهلاً بالنسبة لك فلا فائدة منه حيث أنك لن تتعلم الكثير. بشكل عام في حل المشاكل عندما نصل إلى نقطة لا نعلم عندها كيفية التقدم و حلها، نقوم بمحاولة تبسيط المسألة عن طريق إزالة أحد الشروط، و محاولة حل النسخة الأسهل، الأمر الذي قد يعطينا فكرة عن كيفية حل المشكلة الأصعب. طريقة أخرى هي تقسيم المسألة إلى مسائل جزئية و محاولة حل كل جزء على حدا و من ثم دمج الأجزاء، هذه الطريقة مفيدة كثيراً في حال كانت المشكلة التي تحاول حلها كبيرة و من الصعب حلها دفعة واحدة. في حال لم تستطع حلها رغم كل الطرق فلا مانع من طلب المساعدة من أحد، هذا لا يعني أنك لست جيد، و لكن أحياناً المسألة تكون صعبة جداً و تحتاج إلى مساعدة أحدهم، تذكر ما يهم هو ما تتعلمه و ليس حل المشكلة بحد ذاتها. يمكنك نشر سؤال جديد على أكاديمية حسوب موضحاً فيه المشكلة و محاولاتك لحلها و يمكننا مساعدتك.
  7. إن هذا يختلف حسب معلوماتك و معارفك المسبقة عن البرمجة، في حال كنت على معرفة بلغة برمجة أخرى فإن تعلم أي لغة جديدة و من ضمنها البايثون سوف يكون عبارة عن تعلم التعليمات فقط (لأنك على دراية بالمفاهيم العامة) بالإضافة إلى الطريقة التي يفضلها مبرمجو اللغة، أي مثلا في بايثون سوف تسمع بمصطلح pythonic و هو عبارة عن الطريقة المثلى التي تميز أكواد لغة البايثون، بالطبع يمكنك الكتابة بنفس الطريقة التي تكتب بها في لغات أخرى و لكن لن تستفيد من الكثير من الميزات التي توفرها لغة بايثون. في حال كانت هذه أول لغة برمجة لك فإنه عليك تعلم المفاهيم البرمجية مثل مفهوم الخوارزمية و المتغيرات و العبارات الشرطية و الحلقات و من ثم مفاهيم أكبر مثل ال oop و غيرها، من ثم يمكنك الإطلاع على توابع اللغة و ما قمت بذكره سابقاً. بالإضافة إلى كل ما سبق من الجيد دائماً أن تقوم بالتجريب، أي لا تدرس الموضوع من ناحية نظرية فقط، حاول أن تقوم بتطبيق ما تعلمته، حاول تغيير القليل في الكود و رؤية ماذا يحدث، و عندما تنهي تعلم الأساسيات حاول القيام بمشروع صغير، حتى لو كنت لا تعلم كل ما يلزم له، ستتعلم و أنت تقوم بإنشاءه.
  8. إن كل مسار يقدم لك ما تحتاجه لتعمل في هذا المسار، و بالتالي في حال أكملت مسار تطبيقات سطح المكتب يمكنك العمل في تطبيقات سطح المكتب و كذلك الأمر للمسارات الأخرى. لكن في بعض الأحيان يكون هناك بعض المفاهيم المتقدمة المتداخلة بين المسارات، و لكن يمكنك الآن البدء في العمل و إكمال الدورة في نفس الوقت، قم بتنظيم وقتك و ستستطيع القيام بذلك.
  9. إن حل التمرين لك لن يحسن من مهاراتك البرمجية و لن يعود عليك بالفائدة، من فضلك قم بمحاولة حل التمرين لوحدك و في حال واجهتك مشاكل يمكننا مساعدتك، لكن لا يمكننا إعطاءك الحل بشكل مباشر. كمساعدة بسيطة حاول البحث عما يدعى بال regex، من السهل حل التمرين باستعمالهم.
  10. هناك الكثير من الطرق لحذف الفراغات، أبسط طريقة هي المرور على الملف سطر سطر و من ثم التقسيم على أساس الفراغات و الجمع بدون فراغ، ما يلي مثال بسيط: with open('file_with_spaces.txt', 'r') as f1: with open('file_without_spaces.txt', 'w') as f2: for row in f1: tokens = row.split() new_row = ''.join(tokens) f2.write(new_row) من أجل ال comments يمكنك البحث أيضاً في كل سطر عن رمز التعليق # و حذف كل ما بعده، أي تظل تقرأ السطر الحالي حتى تصل إلى هذا الرمز فتتوقف، مثال بسيط: with open('file_with_spaces.txt', 'r') as f1: with open('file_without_spaces.txt', 'w') as f2: for row in f1: tokens = row.split() new_tokens = [] for token in tokens: if token[0] == '#': break new_tokens.append(token) new_row = ' '.join(new_tokens) f2.write(new_row) هذه أمثلة بسيطة يمكنك محاولة التعديل عليها لحل مشكلتك بالضبط.
  11. من فضلك هل يمكنك تزويدنا بملف الداتا مع ملف الكود حتى نستطيع مساعدتك بشكل أفضل.
  12. يمكنك دائماً البدء بالعمل بعد إنهاء بضع مسارات، و لكن قد تواجهك مشاكل معينة لن تجد حلها حتى مسارات أخرى، هذا يعتمد على ما تريد العمل به. سأعطيك مثال، لنفترض أنك تريد القيام ببناء صفحة شخصية بسيطة، عندها تكفيك بعض المعلومات عن ال html و ال css، بعض من ال java script قد ينفعك أيضاً، و لكن لن تحتاج إلى معلومات متقدمة في ال backend، كما أنك لن تستطيع بناء واجهات متقدمة ما لم تتعلم إحدى أطر العمل. يمكنك تحديد الدورة التي تقوم بأخذها و ما الذي تريد القيام به حتى يمكننا إجابتك بشكل أدق.
  13. يمكنك إضافة سؤال جديد منفصل عن هذا السؤال، توضح فيه المشكلة التي تظهر، عن طريق لقطة شاشة مثلاً لرسالة الخطأ، بالإضافة إلى إرفاق الطريقة التي قمت بها بمحاولة رفع المشروع. و سنكون سعيدين بمساعدتك.
  14. من أفضل الطرق لمعرفة ما الذي تقوم به، هو البحث عن بعض المواقع الشهيرة التي تم تصميمها باستعمال react. من أشهر هذه المواقع هو موقع فيسبوك، و من الجيد محاولة تقليد هذا الموقع، أو موقع مشابه له. طبعاً عليك تذكر بأنه لا يمكنك باستعمال react وحده بناء موقع متكامل فأنت تحتاج إلى backend للتعامل مع قواعد البيانات و ما إلى هنالك من مهام. و لكن يمكنك القيام بالبحث عن صديق لك يتعلم ال backend للقيام بمساعدتك به. و بالطبع يمكنك سؤالنا دائماً في حال واجهت أي مشكلة.
  15. يمكنك استعمال التابع join على thread1, thread2 و عندها سيتم الانتظار حتى نهاية تنفيذهما ليتم تنفيذ ما تبقى من الكود. أي يمكنك اعتبار join تقوم بدمج مساري التنفيذ في المسار الأساسي و بالتالي لن يتم تنفيذ أي شيء بعد حتى ينتهي تنفيذهما. بعدها يمكنك كتابة الكود الخاص بالدمج بشكل طبيعي ك thread3 و سيتم تنفيذها بعد نهاية تنفيذ ما سبق.
  16. من فضلك قومي بمحاولة حل التمارين و ذكر ما الذي قمت به، إعطاءك الحل مباشرة لن يساهم في تحسين مهاراتك البرمجية. إن التمارين تعتمد على معرفتك لبعض المفاهيم البسيطة في بايثون مثل الحلقات و العبارات الشرطية و اللوائح. في حال أن لم تتقني هذه المفاهيم يمكنك الاشتراك بدورة حسوب الخاصة بلغة البايثون، أو يمكنك الإطلاع على المقالات الموجودة في موقع حسوب.
  17. إعطاءك الكود بشكل مباشر لن يساهم في تطوير مهاراتك البرمجية، عوضاً عن ذلك سأقوم بشرح الفكرة لك. أبسط طريقة هي الطريقة المباشرة التي تتمثل بالبحث في كل عناصر المصفوفة، أي يمكننا استعمال حلقتي for لكي نقوم بالمرور على كافة العناصر من أجل كل عنصر و يمكننا التحقق من الشرط المعطى بسهولة عندها. إن تعقيد الخوارزمية يحسب بدلالة حجم الدخل، هنا حجم الدخل هو عدد عناصر المصفوفة، و بما أننا نقوم بالمرور على كل عنصر من أجل كل عنصر، فأعتقد أنك تستطيع معرفة التعقيد الآن، حاول ذلك و سأساعدك في حال لم تنجح، و لكن من فضلك ابذل جهداً و قم بمشاركة محاولاتك معنا.
  18. سأشرح لك الفكرة و يمكنك محاولة كتابة الكود مجدداً و إخباري في حال حدوث أخطاء. في البداية من الجيد أنك قمتي بتحويل الرقم إلى سلسلة نصية فهذا صحيح، بعد ذلك علينا تقسيم السلسلة، أسهل طريقة هي بوضع الأقسام ضمن list، بحيث نقوم بالمرور خانتين خانتين (يمكنك استعمال البارامتر الثالث في range للقيام بذلك، فهو يمثل مقدار الخطوة) و استعمال ال slice لأخذ محرفين كما يلي a[i:i+2] يمكن وضع ذلك كل مرة في ال list التي قمنا بتعريفها مسبقاً. و في النهاية يمكن استعمال التابع join على السلسلة النصية '*' ليقوم بجمع ما ضمن المصفوفة و وضع الرمز * بينها.
  19. ما قمتي بكتابته هو مجموعة من الدوال، و عندما لا نقوم بإرجاع قيمة من دالة في بايثون تكون القيمة المعادة بشكل افتراضي هي None. الطريقة المثلى هي استعمال ال return و لكن بما أنك لا تريدين استعمالها فكل ما عليكي هو القيام بتعريف المتغيرات في البداية و اعطاءها قيم افتراضية، ثم ضمن التابع نحدد أننا نريد استعمال المتغيرات ال global و نقوم بعملية الإسناد، بعد ذلك نستدعي التوابع قبل عملية الطباعة، ثم نقوم بعملية الطباعة باستعمال أسماء المتحولات التي قمنا بكتابتها، مثال على ذلك كما يلي: name = None def f(): global name name = "..." f() print(name)
  20. كل ما عليك القيام به هو تنزيل نسخ البايثون من الموقع الرسمي، لكن هناك خيار اسمه add to PATH عليك اختياره فقط لواحدة من النسختين. و بالتالي النسخة التي تختار لها هذا الخيار يمكن الوصول إليها مباشرة، و إلا عليك القيام بالبحث عن الموقع الذي قمت بتنزيل النسخة فيه و من ثم البحث عن python.exe، سيكون شيء كالتالي: c:\python\2.6\python.exe يمكن كتابة هذا المسار و من ثم ما تريد تنفيذه فسيتم التنفيذ باستعمال نسخة البايثون هذه.
  21. في البداية من الجيد أن تقوم بالتركيز على الأفكار البرمجية أكثر من تعليمات كل لغة، لذلك أنصحك بتعلم الأفكار العامة و البسيطة في البرمجة عن طريق المخططات التدفقية، بعض الأفكار التي يجب أن تبدأ بهاـ هي فكرة التخزين في متغيرات، التعليمات الشرطية، الحلقات، هذه أبسط المفاهيم لتبدأ بها، و يمكنك الإطلاع على مقالات حسوب سترى ما يناسبك بالتأكيد. بعد الإطلاع على ما سبق من الجيد أن تبدأ بلغة برمجة، في حال كنت تريد فعلاً أن تتقن المفاهيم البرمجية أنصحك بأن تبدأ بلغة ال c++ فهي تحوي على الكثير من المفاهيم التي تم استعمالها ضمنياً ضمن لغات أخرى و لكن بدون القدرة على استعمالها مباشرة، مثل المؤشرات و التي هي من أهم المفاهيم البرمجية التي لن تجدها في لغة مثل بايثون مثلاً بالرغم من أنه ضمنياً يتم استعمالها. بعد كل ذلك ستصبح عندك فكرة أكبر عن المجال، يمكنك الإطلاع على المجالات الكبرى بشكل سريع و سطحي لتقرر ما الذي ترغب تعلمه، هناك الكثير كما ذكر المدرب أسامة و الأمر ليس بالسهل، و لكن نصيحتي فقط اختر مجال و ابدأ، بعد ذلك في حال قررت لاحقاً الانتقال إلى مجال آخر فذلك لن يكون صعباً، ﻷن الأساس البرمجي واحد.
  22. أشهر الطرق للقيام بذلك هي كما ذكر المدرب أحمد، سأقوم بذكر بعض الطرق الأخرى كي تستطيع فهمها في حال صادفتها في أكواد أخرى. أول طريقة يمكن استعمالها فقط في حال كنا في التابع main و ذلك عن طريق القيام بعملية return و نقوم بعمل return 0 في حال عدم حدوث أخطاء. طرق أخرى تكون باستعمال quick_exit و abort بشكل مشابه لطريقة استعمال exit، و لكن الفرق أن التابع الأول يقوم بعمليات تنظيف (إغلاق الملفات،إفراغ مسارات الدخل و الخرج، الخ..) جزئية و الثاني لا يقوم بأي عملية تنظيف، و هذا ما يجعلهما أسرع و لكن أخطر. تبعاً لما سبق يمكنك أن ترى أن استعمال exit هو المفضل إلا في حالة كنت تدرك تماماً ما الذي تقوم به و على دراية بكيفية التعامل مع هكذا حالات خطرة.
  23. يمكن استبدال عددين أو أي متغيرين في بايثون بطريقة سهلة و هي كما يلي: x, y = y, x هنا بايثون يقوم بأخذ القيم في اليمين، ثم يقوم بإسناد القيم، و لذلك هذه العملية ممكنة. في حال كنت تريد جعل الرقمين متساويين عن طريق وضع أصفار إلى يسار الرقم الأقل، يمكنك ترك الأعداد كسلسلة نصية و كل ما عليك القيام به هو استعمال الدالة rjust كما يلي: max_len = max(len(x), len(y)) x = x.rjust(max_len, '0') y = y.rjust(max_len, '0')
  24. إن الكود من الناحية المنطقية صحيح، و لكنك لا تقومين بإرجاع القيمة التي حسبتيها و التي هي reversed_number. يجب علينا دائماً إما إرجاع قيمة من التابع أو طباعتها مباشرة في التابع (هذا يعتمد على المطلوب). يمكنك إرجاع قيمة من التابع باستعمال الكلمة return يليها اسم المتغير أو القيمة التي نريد إرجاعها. بالإضافة إلى ذلك فإنك لا تقومين باستدعاء التابع أصلاً، عليك استدعاء التابع عن طريق كتابة اسم التابع يليه بين قوسين ما نريد تمريره، هنا يجب تمرير الرقم المدخل و هو في المتغير number، أي يصبح الكود بعد التعديل كما يلي: def revers(number): reversed_number = 0 while number != 0: dig = number % 10; reversed_number = reversed_number*10 + dig number //= 10 return reversed_number number = int(input("enter the number")) reversed_number = revers(number) print(reversed_number)
  25. كما ذكر المدرب محمد في الجواب السابق، إن ترتيب الأحرف في لغة البرمجة يتبع ترتيب الأحرف في اللغة الانكليزية، هذا محقق من أجل أي لغة برمجة و ليس فقط في البايثون. ما هو خاص بالبايثون لوحده هو أنه لا وجود لنمط يدل على محرف فقط، لدينا نمط يدل على سلسلة نصية، و المحرف هنا نعتبره سلسلة نصية طولها 1، و بالتالي يمكنك المقارنة بين محرفين باستعمال معاملات المقارنة العادية ك < ، حيث أنه يقارن حسب ترتيب الاحرف. عليك الانتباه هنا من حالة الأحرف الكبيرة و الأحرف الصغيرة، في حال كانت حالة الأحرف لا تهمك و تريد فقط مقارنة الأحرف كترتيب في اللغة، فعليك تحويل الحرف إلى صغير باستعمال الطريقة lower ، طبعاً في حال كان الحرف صغير من الأصل فلا شيء سيتغير و لكن في حال كان كبير سيصبح صغير، و بالتالي تصبح المقارنة صحيحة و لا يحدث مشاكل.
×
×
  • أضف...