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

El Sayed El Tohamy

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

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

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

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

    1

كل منشورات العضو El Sayed El Tohamy

  1. يمكن استخدام الشيفرة التالية، ولكن هناك ملاحظة: بخصوص عنوان الموضوع، يفضل أن يكون العنوان معبرًا عن المحتوى حتى يمكنك الرجوع إليه فيما بعد، وحتى تعم الفائدة للجميع. # وضع قيم مبدئية للمتغيرات uppercase = False symbol = False length = False # تعريف الرموز التي يجب أن يحتوي واحدًا منها، بالتأكيد يمكننا الإضافة إليها symbols = "!@#$%&*" # نختبر طول كلمة المرور if len(password) >= 8: length = True # حلقة تكرارية على كل حرف for char in password: # نختبر إذا كان الحرف كبيرًا if char.isupper(): uppercase = True # نقوم بتغيير قيمة المتغير لأن هذا الشرط تم استيفاؤه # نختبر إذا الحرف رمز if char in symbols: symbol = True # تم استيفاء الشرط if not uppercase: print("Should include at least one lowercase character") if not symbol: print("Should include at least one of these symboles !@#$%&* ") if not length: print("Length should be at least 8 characters") يتبقي اختبار الأحرف الصغيرة والأرقام، أتركها لك للتدريب. إرشاد: ستتم بنفس الطريق، ولكن يجب إيجاد الوظيفة المناسبة من وظائف str
  2. سأرسل لك الشيفرة كاملة import tkinter as tk from tkinter import ttk root = tk.Tk() tree = ttk.Treeview(root) tree.pack() tree.insert("", "end", text="Item 1") tree.insert("", "end", text="Item 2") tree.insert("", "end", text="Item 3") popup = tk.Menu(tree, tearoff=0) popup.add_command(label="Copy", command=lambda: copy_item()) popup.add_command(label="Paste", command=lambda: paste_item()) def copy_item(): item = tree.selection()[0] # تنظيف الذاكرة root.clipboard_clear() # نسخ عنوان العنصر إلى الذكرة root.clipboard_append(tree.item(item, option="text")) # تعريف وظيفة لعملية اللصق def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) # تعريف وظيفة لإظهار القائمة def show_popup(event): # تحديد الصف تحت مؤشر الفأرة row = tree.identify_row(event.y) # في حالة أن الصف ليس فارغًا if row: # نقوم باختيار الصف من الشجرة tree.selection_set(row) # إظهار القائمة popup.post(event.x_root, event.y_root) tree.bind("<Button-3>", show_popup) root.mainloop() يمكنك استخدام الشيفرة كما هي أو وضعها داخل تصنيف class
  3. ربما تحتاج استبدال هذه الأسطر self.popup_menu.add_command(label="Cut", command=lambda: self.entry1.event_generate("<<Cut>>")) self.popup_menu.add_command(label="Copy", command=lambda : self.entry1.event_generate("<<Copy>>")) self.popup_menu.add_command(label="Paste", command=lambda: self.entry1.event_generate("<<Paste>>")) بهذه self.popup_menu.add_command(label="Cut", command=lambda: self.cut_item()) self.popup_menu.add_command(label="Copy", command=lambda: self.copy_item()) self.popup_menu.add_command(label="Paste", command=lambda: self.paste_item()) def cut_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) tree.delete(item) def copy_item(): item = tree.selection()[0] root.clipboard_clear() root.clipboard_append(tree.item(item, option="text")) def paste_item(): text = root.clipboard_get() tree.insert("", "end", text=text) بالتأكيد يمكننا تحسين الكود عن طريق دمج الوظيفتين copy_item و cut_item ووضع معامل لتحديد المطلوب هل هو قص أو نسخ، ولكن فضلت كتابتها بهذا الشكل لتكون الصورة واضحة. مع استخدام def show_popup_menu(self,event): self.popup_menu.post(event.x_root, event.y_root)
  4. السطر الأخير يقوم بحذف الكائن draw الذي تم تعريفه مسبقًا، وذلك لتحسين الأداء وتفريغ الذاكرة، بعدما قام بمهمته، وهو يستخدم لرسم أشكال بسيطة وكتابة نص بسيط على الصور.
  5. كما توقعنا، الجزء التالي مفترض يكون المقارنة بين الوجه المعروف والأوجه الغير معروفة. الآن لدينا تشفير لصورة Malan، ولدينا قائمة بأماكن وتشفيرات الصورة الموجودة بصورة Harvard الحلقة التكرارية تقوم بالدوران على كل صورة بالقائمة Harvard وتقوم بمقارنتها مع صورة Malan عن طريق الوظيفة compare_faces التي تعود بقيمة True or false في الحقيقة يجب أن نوضح الوظيفة compare_faces بشكل أعمق حتى نفهمها ونستطيع استخدامها بشكل صحيح، هذه الوظيفة تحتاج معاملين: الأول عبارة عن قائمة list تحتوي على تشفيرات الأوجه المعروفة (في حالتنا هذه تحتوي على عنصر واحد فقط وهو تشفير وجه Malan) الثاني عبارة عن تشفير للوجه المراد اختباره مقابل القائمة المعروفة وتعود هذه الوظيفة بقائمة من القيم المنطقية True/False التي تعبر عن تطابق أو عدم تطابق الوجه المختبر مع كل وجه من القائمة المعروفة، في حالتنا ستحتوي هذه القائمة على عنصر واحد فقط، ولكن إذا افترضنا أن لدينا ثلاثة أوجه معروفة، ففي هذه الحالة ستعود الوظيفة بقائمة تحتوي على ثلاثة عناصر. أما الوظيفة face_distance فهي تعمل بشكل مشابه للوظيفة face_compare ولكنها تعود بقائمة تحتوي على قيم عددية بين 0 و 1، هذه القيم تعبر عن البعد بين الصور المعروفة والصورة المختبرة، كلما قلّت القيمة كلما كان أكثر تشابهًا، لذلك القيمة 0 تعني لا توجد مسافة (أي تطابق تام). في حالتنا بالتأكيد ستعود بقيمة واحدة لأن لدينا صورة واحدة معروفة، أما لو كان هناك أكثر من صورة فستعود بقائمة بها عدد عناصر يساوي عدد الصور ويعبر عن مدى بعد الصورة المختبرة عن كل صورة معروفة. السطر الثالث يعود برقم العنصر الأقل مسافة (أي الأكثر تشابهًا)
  6. هي سهلة جدًا، يمكن أن أقولها لك، ولكن أريدك البحث عنها بنفسك، لتنمية مهارة التعليم الذاتي، وإليك إرشاد: سيتم تغيير الوظيفة contains بوظيفة أخرى. بالتوفيق والسداد،
  7. السطر المستخدم في تشفير صورة Malan يقوم بتشفير وجهًا واحدًا فقط، الذي هو صورة Malan ولكنه يقوم بالبحث عن جميع أماكن الأوجه بالصورة الثانية ويقوم بتشفيرها جميعًا هذا السيناريو يستخدم عندما تكون صورة Malan تحتوي على وجهٍ واحد (الذي هو وجه Malan)، لذلك لا نحتاج للبحث عن أماكن الأوجه حيث لا يوجد إلا وجه واحد نعرفه، والمفترض الذي سنستخدمه فيما بعد للتعرف عليه واستخراجه من الصورة الثانية Harvard باختصار، نستخدم صورة Malan لمعرفة تشفير وجهه، ثم نستخدم الصورة الثانية Harvard لاستخراج Malan من بين أصدقائه. # encodings # البحث عن جميع الأماكن التي يوجد بها أوجه harvard_locations = face_recognition.face_locations(harvard) # تشفير كل الأوجه الموجودة في هذه الأماكن harvard_encodings = face_recognition.face_encodings(harvard , harvard_locations) # تشغير وجهًا واحدًا وهو يعبر عن وجه مولان # (الذي في الغالب لن يوجد غيره بهذه الصورة، أو قد يكون هناك عدة أوجه ولكن كلها له) # تم استخدام [0] لأن الوظفية تعود بقائمة من المصفوفات، # list of arrays # فنحن نريد المصفوفة الأولى malan_encodings = face_recognition.face_encodings(malan)[0] لاحظ أن هذه الطريقة قد تسبب مشكلة إذا احتوت الصورة Malan على أوجه لأناس مختلفين، لأنه في هذه الحالة سيقوم بتشفير أول وجه بالصورة، وقد لا يكون وجه Malan.
  8. قبل الإجابة على السؤال، يجب توضيح شيئًا هامًا جدًا، وهو أنه لا يوجد إجابة مطلقة للأسئلة مثل: - ما أفضل لغة برمجة - هل لغة البايثون أفضل من PHP السؤال الصحيح هو: ما الأنسب للحالة الحالية؟ لأن كل حالة لها الأدوات الأنسب لها، ففي بعض الأحيان قد يكون استخدام مكتبة مثل الريأكت عائقًا وليس مُشهلًا، في حالة كان المطلوب مثلًا صفحة بسيطة جدًا، أما بخصوص استخدام المكتبات وأُطر العمل، فبالتأكيد لها فوائد كثيرة جدًا، منها: - تسهيل العمل وتسريع الإنتاجية - الشيفرات المستخدمة موثوقة وتم اختبارها والتأكد من كفاءتها - تقديم إمكانيات غير موجودة بالأدوات الأصلية - تقديم خطوات أو أوامر تثبيت توفر الكثير جدًا من الوقت لذلك يُنصح بإتقان إحدى هذه المكتبات، حيث أنه ليس من المنطقي أن يتم تطوير موقع الويب من البداية وباستخدام الأدوات الأصلية HTML, CSS, JavaScript
  9. وعليكم السلام ورحمة الله وبركاته. في البداية يجب أن نعرف معلومة هامة جدًا، أن لغات التنصيص مثل HTML, CSS, JavaScript هي اللغات الأساسية التي تعتمد عليها جميع المكتبات مثل البوتستراب Bootstrap، وجميع أدوات صناعة المحتوى CMS Content Management System مثل الووردبريس، وأيضًا مكتبات الصفحة الواحدة مثل React, Vue وذلك لأن المتصفح لا يفهم إلا هذه اللغات. إذن فلماذا تم تطوير هذه المكتبات وأُطر العمل وأدوات صناعة المحتوى؟ - أولاً: لتسهيل إنشاء صفحات الويب - ثانيًا: هذه المكتبات تم اختبارها جيدًا وبالتالي فهي تضمن الكثير من الخصائص مثل توافقها مع معظم المتصفحات، ومعالجة المشاكل الأمنية، والتعامل مع الواجهات البرمجية بسهولة api - ثالثًا: أدوات إدارة المحتوى تمكن الغير مبرمجين من إنشاء محتواهم بأنفهسم مثل المواقع الشخصية، أو المدونات، أو موقع تجاري بسيط - رابعًا: إضافة خصائص التجاوب مع جميع أحجام الشاشات مثل البوتسترات Bootstrap - خامسًا: مكتبات مثل ريأكت React وفيو Vue إضافة إلى إطار العمل أنجولار Angular التي تعمل بنظام الصفحة الواحدة SPA أو Single Page Application لا تحتاج الذهاب للخادم لعرض المحتوى، وإنما تقوم بتحميله مرة واحدة ثم تظهر المحتوى المطلوب مما تم تحميله، وبالتالي سرعة ملحوظة جدًا في الأداء باختصار، لغات التنصيص هي الأدوات الأساسية التي يفهمها المتصفح، أما المكتبات وأدوات صناعة المحتوى لتسهيل المهمة سواء للمبرمجين أو لغير المبرمجين.
  10. وعليكم السلام ورحمة الله، المطلوب هو جمع عمودين في DataFrame ولكن مع شرط معين، بمعنى آخر نريد اختبار شرط معين على كل صف والحصول على قيمة بناء على نتيجة هذا الشرط، لذلك نقوم أولًا بإنشاء الوظيفة التي سنطبقها على كل صف، ثم نستخدم الوظيفة apply ونعطيها الوظيفة التي أنشأناها import pandas as pd df = pd.DataFrame({'A': [10, 20, 50, 60, None, 80], 'B': [5, 10, 15, 20, 25, 30]}) # إنشاء وظيفة الاختبار المطلوب تطبيقه على كل صف # يجب ملاحظة أن هذه الوظيفة سيتم استدعاؤها مع كل صف def sum_with_condition(row): # نختبر إذا كانت قيمة الخانة الأولى تحتوي على بيانات وأيضًا قيمتها أكبر من 50 if pd.notnull(row['A']) and row['A'] >= 50: # إذا تحقق الشرط نقوم بجمع الخانة بالعمود الأول مع الخانة بالعمود الثاني return row['A'] + row['B'] else: return 0 # إنشاء عمود جديد وتكون قيمته هو الناتج العائد من الوظيفة # sum_with_condition # التي يتم تطبيقها على كل صف df['C'] = df.apply(sum_with_condition, axis=1) print(df)
  11. الفكرة أن (a-1) * ((a-1) + 1) = (a-1) * (a - 1 + 1) = (a-1) * (a) = (a-1) * a
  12. بارك الله فيك، الحل مضبوط إن شاء الله، ويمكن تحسين المعادلة لتصبح كالتالي # sum = (b * (b + 1) / 2) - ((a - 1) * ((a - 1) + 1) / 2) sum = (b * (b + 1) / 2) - ((a - 1) * a / 2)
  13. بداية شكرًا لك على استخدام القوانين الرياضية التي بكل تأكيد تساهم في تسريع ودقة العمليات الحسابية بشكل خرافي، القانون المقصود - لمن لا يعرفه - قانون رياضي يُستخدم لجمع الأعداد الصحيحة ابتداءًا من 1 حتى قيمة معينة ولتكن n وهو n(n+1)/2 على سبيل المثال لمعرفة مجموع الأعداد من 1 حتى 7 نستخدم القانون 7(7+1)\2 = 7 * 8 \ 2 = 28 ولمعرفة مجموع الأعداد ابتداءًا من قيمة غير 1 وليكن مجموع الأعداد من 5 إلى 7: هنا تتضح مهارة حل المشاكل Problem Solving التي يجب أن يتقنها المبرمج، فيتم بالخطوات التالية: 1- نقوم بحساب مجموع الأعداد من 1 إلى 7 2- نقوم بحساب مجموع الأعداد من 1 إلى ( 5 - 1 ) (أي من 1 إلى 4) 3- نطرح القيمة الصغرى من القيمة الكبرى فتكون المعادلة [ 7 (7+1) \ 2 ] - [ 4 (4 + 1) \ 2 ] = 28 - 10 = 18 إذن مجموع الأعداد 5 + 6 + 7 = 18 الآن التمرين المطلوب من المبرمجين لتقوية مهاراتهم البرمجية: هو كتابة شيفرات برمجية بلغة البايثون لجمع الأعداد من 5 إلى 7 بناء على التحليل السابق. بالتوفيق،
  14. يمكن تنفيذ هذه المهمة بعدة طرق أولها استخدام الحلقات التكرارية، وسنستخدم هذا الأسلوب الذي يناسب ذوي الخبرة البسيطة # تعريف المتغيرات A = 1867 B = 9814 sum = 0 # إنشاء حلقة تكرارية تظل تعمل طالما المتغير الأول أصغر من أو يساوي المتغير الثاني # نلاحظ هنا ان علامة = هامة حتى تم جمع قيمة المتغير # B while A <= B: sum = sum + A A = A + 1 print(sum) ملحوظة هامة: تم كتابة الشيفرات لمساعدتك في بداية المشوار البرمجي، والآن إليك تمرين حاولي حله بنفسك للتدريب على حل المشاكل. المطلوب: التعديل في الشيفرات السابقة بحيث لا يشمل قيمة المتغيرين A, B في عملية الجمع.
  15. وعليكم السلام ورحمة الله وبركاته، إذا كنت تقصد أن الـ Cross-Platform يسحب من حصة لغة سويفت وكوتلن، فبالتأكيد تؤثر عليهم وتسحب من حصتهم ومن طلب التطبيقات عليهم. ولكن دائمًا وأبدًا، لكل أداة أو لغة إيجابيات وسلبيات، ولكل منتج زبائنه فما تراه أنت غير ضروري يحتاجه غيرك. في السنوات الأخيرة بدأت اللغات متعددة المنصات Cross-Platform في الانتشار بسبب ارتفاع تكلفة التطوير لكل نظام، فأصبح العملاء يبحثون عن تطبيق واحد يستطيع العمل على كل المنصات، ومن الناحية التقنية سيكون لديك كود برمجي واحد وهذا في حد ذاته ميزة كبيرة جدًا، إلا أنه في بعض الأحيان تقف اللغات متعددة المنصات عاجزة عن بعض المهام لذلك يتوجب استخدام اللغات المحلية native. أما كيف تواجه الشركات الكبيرة هذا التطور، فلديها عدة استراتيجيات، أول وأهم هذه الاستراتيجيات: هو محاولة جعل لغاتها متعددة المنصات، كما رأينا في الإصدارات الأخيرة لميكروسوفت، وكذلك بالنسبة لجولج التي أنتجت Kotlin Multiplatform والتي من خلاله يمكن إنتاج تطيبقات متعددة المنصات. الاستراتيجية الثانية: محاولة تسهيل التعامل مع لغاتها لجذب المبرمجين الاستراتيجية الثالثة: إمكانيات حصرية تتمتع بها اللغات المحلية مثل الوصول لبيانات شديدة الحساسية في نظام التشغيل وخصوصًا ios بالطبع المنافسة شرسة، لذلك من المهم جدًا على المبرمج أن يتعلم تقنية ولا يتقوقع في لغة معينة بحيث إذا اختفت لا يختفي معها، فالمبرمج يجب أن يتقن حل المشاكل Problem Solving، أفضل الممارسات Best Practices، اتباع المعايير Standards وبالتالي يستطيع التحول من لغة إلى أخرى بسهولة، لأن العالم الآن متقلب جدًا.
  16. وعليكم السلام ورحمة الله، في البداية لابد أن نوضح شيئًا هامًا، وهو أن tuple و list في البايثون ليست مصفوفة بالمعنى المعروف في لغات البرمجة الأخرى، حيث أن المصفوفة تكون عناصرها كلها من نوع واحد one data type أما tuple و list يمكن أن تقبل عناصر من أنواع بيانات مختلفة، لذلك فهي أنواع مركبة تشبه المصفوفة. بخصوص tuple فهو نوع مركب غير قابل للطفرة Immutable بمعني لا يمكنك إضافة عناصر عليه أو حذف عناصر منه أو حتى تغيير قيمة عنصر فيه، لذلك فهو سريع في عملية الاستعلام. بعكس list التي تقبل الإضافة والحذف والتعديل، بالمقابل هي أبطأ في عملية الاستعلام. السؤال الذي يتبادر للذهن: متى استخدم tuple ومتى استخدم list ببساطة شديدة لو عندك بيانات تحتاج عمل استعلامات عليها، مثل المجموع/المتوسط/الأكبر/الأصغر ولكنك لن تضيف أو تعدل فيها فهنا استخدم tuple. أما لو احتجت لإضافة عناصر أو حذفها أو تعديلها فهنا لابد من استخدام list، على سبيل المثال عناصر الفاتورة يجب أن توضع في list حتى تتمكن من إضافة عنصر جديد، أو حذف عنصر وهكذا.
  17. نعم يمكن ترتيب الأعمدة برقم العمود فهذه الشيفرات تقوم بإعادة ترتيب الأعمدة بناء على رقم العمود هل هذا سؤالك؟
  18. قم بتغيير عناوين الأعمدة لتمييزها عن بعضها، ثم قم بعملية إعادة الترتيب، ثم إرجاع أسماء الأعمدة مرة لأخرى لأصلها. ولكن منطقيًا، يجب أن يكون لكل عمود اسمًا مميزًا له.
  19. وعليكم السلام ورحمة الله وبركاته هذه هي الشيفرة الصحيحة from numpy import arange a=arange(12).reshape(3,4) b=a.size#لمعرفه عدد عناصر المصفوفه كلها c=a.ndim#لمعرفه عدد ابعادها d=a.shape print(a) print(b) print(c) print(d) # المخرجات ''' [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 12 2 (3, 4) ''' لاحظ أن size و shape ليست وظائف لذلك لا نكتب بعدها أقواس ()، وإنما هي خصائص property لذلك تعامل مثل المتغيرات.
  20. نعم الشيفرة صحيحة، المفترض تعمل بشكل صحيح، هذا بفرض أن Table1عبارة عن DataFrame
  21. إذن ستكون هناك قيم فارغة في العمود الذي نقفر فيه، فإذا كان لدينا عشرون صفًا، فسيظهروا جميعًا مع كل الأعمدة، ما عدا العمود الأول يظهر به عشرة صفوف فقط لأننا، فكيف تريد عرضها؟ أعط مثالًا حتى تكون الصورة واضحة.
  22. وماذا عن القيم الفارغة؟ لأنك ستحصل على عدد غير متساوٍ من الصفوف؟ هل تقصد أن الصفوف التي لا يقرأها يجعلها فارغة؟ إذا كان كذلك، يمكنك تنفيذه عن طريق: قراءة كل الملف، ثم تحديد الصفوف المراد إخفاؤها وجعلها فارغة df.iloc[1::2, :] = np.nan
  23. يفضل عرض الشيفرات في مستعرض الشيفرات، على كل حال، الشيفرات المكتوبة بها بعض الأخطاء إليك الشيفرة الصحيحة from tkinter import * from ctypes import windll windll.shcore.SetProcessDpiAwareness(1) # my calculator = TK() mycalculator = Tk() mycalculator.geometry("685x960") mycalculator.mainloop() لاحظ ألا يكون هناك مسافات بادئة، يجب أن تكون جميع الأسطر محاذية لبعضها البعض، كذلك لا يمكن وضع مسافات في اسم المتغيرات، كذلك مكتبة Tk ليست كلها حروف كبيرة. ماذا تريد أن تفعل في السطر miscalculation("آلة حاسبة ")
  24. هذه شيفرات كاملة import face_recognition import cv2 obama_image = face_recognition.load_image_file("obama.jpg") biden_image = face_recognition.load_image_file("biden.jpg") obama_encoding = face_recognition.face_encodings(obama_image)[0] biden_encoding = face_recognition.face_encodings(biden_image)[0] known_face_encodings = [obama_encoding, biden_encoding] known_face_names = ["obama", "biden"] video_capture = cv2.VideoCapture(0) # حلقة تكرارية مستمرة لحين المستخدم يضغط على حرف # q while True: # قراءة إطار واحد من الكاميرا ret, frame = video_capture.read() # التحويل إلى نظام # RGB rgb_frame = frame[:, :, ::-1] face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # حلقة تكرارية على كل الأوجه الموجودة بالإطار for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): matches = face_recognition.compare_faces(known_face_encodings, face_encoding) # وضع قيمة مبدئية name = "Unknown" # في حالة وجود مطابقة واحدة على الأقل، نستخدم أو واحدة if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # رسم إطار والاسم حول الوجه cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1) # إظهار الصورة cv2.imshow("Face Recognition", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows() لاحظ التحويل من نظام BGR إلى نظام RGB في السطر التالي باستخدام القيمة السالبة (-1)، وذلك لأن مكتبة cv2 تلتقط الصورة بتنسيق GBR بينما مكتبة face_recognition تتعامل بنظام RGB rgb_frame = frame[:, :, ::-1]
  25. هل تقصد البحث في الأسماء عن أي اسم يحتوي كلمة "أحمد" سواء بأولها أو وسطها أو آخرها؟ إذا كان كذلك يمكنك استخدام الوظيفة contains import re import pandas as pd names = pd.DataFrame({ 'Name': ['Ahmed Yousof', 'Abdullah Mohammed', 'Ashraf Ali', 'Fatema El Zahraa'], 'Arabic': [90, 80, 70, 95], 'Math': [100, 99, 95, 90] }) result = names[names['Name'].str.contains('ahmed')] print(result)
×
×
  • أضف...