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

Wael Aljamal

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

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

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

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

    218

كل منشورات العضو Wael Aljamal

  1. يوجد شيفرة مضافة في هذا السطر (شيفرة تشغيل البرنامج) يمكنك حذفها لأنها ليست جزء منه. يمكنك تشغيل المشروع في cmd وهو يعمل :
  2. عند تشغيل مدير تنظيف الملفات في ويندوز يقوم بحذفه، أي يمكنك حذفه. يفضل تشغيل البرنامج cleanmgr.exe أو بالبحث في start عن Disk cleanup. ربما المساحة التي نفذت تشكلت من تحميل ويندوز للتحديثات أو بناء مشروع قام بتوليد عدد كبير من الملفات أو تحديث برنامج لديك أو تحميل android sdk أو نقطة استعادة الوصول كما تشغيل المحاكي أو حتى ذاكرة الوصول الافتراضية.. كلها أسباب واردة في حجز جزء من القرص الصلب. حذف الملفات المؤقتة ليس حل نهائي لأنها ستتولد من جديد،
  3. العملية الأساسية هي تخزين كل عنصر في الخانة التي قبلها، مع الاحتفاظ بالعنصر الأول ثم تخزينه في آخر خانة.: int temp = arrOriginal[0]; for (int i=1; i<arrOriginal.length; i++){ // نبدأ الحلقة من العنصر الأول ^^^^^^ arrRotated[i-1] = arrOriginal[i]; تخزين العنصر الحالي في العنصر السابق ^^^^^^^^^^^^^ } // بعد الانتهاء من نقل العناصر نقوم بتخزين العنصر الأول في آخر خانة arrRotated [ arrOriginal.length - 1 ] = temp;
  4. بعد التعديلات التي أخبرك بها عبد المجيد، ظهر خطأ: "snake.py", line 57, in <module> w.addch(tial[0],tial[1]," ") TypeError: integer argument expected, got float أي أن القيمة التي قرأها من snake هي float ويجب أن تكون integer لإصلاح المشكلة نعدل السطر التالي لنجعل ناتج القسمة integer: // بدل / snk_x =sw//4 snk_y =sh//2 عندها سيعمل البرنامج و يرسم الأفعى الشيفرة النهائية: import random import curses s = curses.initscr() curses.curs_set(0) sh,sw = s.getmaxyx() w = curses.newwin(sh,sw,0,0) w.keypad(1) w.timeout(100) snk_x =sw//4 snk_y =sh//2 snake = [ [snk_y,snk_x], [snk_y,snk_x-1], [snk_y,snk_x-2] ] food =[sh//2,sw//2] w.addch(food[0],food[1],curses.ACS_PI) key = curses.KEY_RIGHT while True: next_key = w.getch() key = key if next_key == -1 else next_key if snake[0][0] in [0,sh] or snake [0][1] in [0,sw] or snake[0] in snake [1:]: curses.endwin() quit() new_head =[snake[0][0], snake[0][1]] if key == curses.KEY_DOWN: new_head[0] += 1 if key == curses.KEY_UP: new_head[1] -= 1 if key == curses.KEY_RIGHT: new_head[0] -= 1 if key == curses.KEY_LEFT: new_head[1] += 1 snake.insert(0,new_head) if snake[0] == food : food = None while food is None: nf = [ random.randint(1,sh-1), random.randint(1,sw-1) ] food =nf if nf not in snake else None w.addch(food[0],food[1].curses.ACS_PI) else: tial = snake.pop() w.addch(tial[0],tial[1]," ") w.addch(snake[0][0],snake[0][1],curses.ACS_CKBOARD)
  5. أحسنت عملا، إن تقديم الحل النهائي لن يفيدك، بل أفضل إعطاء رؤوس الخيط و أنت تكمل الباقي، لأن كل مساعدة خارجية ستفقد مقابلها عدة خطوات في التعلم التي ستحل المشكلة. بالتوفيق
  6. هل يمكنك عمل التالي: Delete your browser's cookies Clear your browser's cache
  7. صورة الخطأ لاتظهر. هل قمت بتضمين ملف الاتصال بالمخدم؟ في شيفرة المدرب عدنان require_once 'con.php';
  8. يمكننا تعريف حقل جديد C بالخصائص التالية: df['c'] = pd.Categorical.from_array(df.b).labels حيث سيأخذ قيمة أسماء عناصر b ويعمل منهم تصنيف: absent -> 0 no -> 1 yes -> 2 نلاحظ أنهم بترتيب أبجدي.
  9. أولا تحتاج لمخدم ويب يستطيع تشغيل PHP مثل XAMPP - WAMP - LARAGON. شيفرة PHP للاتصال بقاعدة بيانات عن طريق mySQLi: <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?> الإعدادت الأولى خاصة بالمستخدم الذي أنشأته، مثل PHP myAdmin. وهكذا تتم أول مرحلة وهي الاتصال مع قاعدة البيانات. بتعديلات على المثال السابق ولنفرض وجود جدول في القاعدة خاص بالمستخدمين، يمكننا استخدام الشيفرة التالية لعرض بياناتهم: حيث يتم استخدام SQL بهذه الجزئية: $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); لجلب بيانات، وتخزينها في متغير في PHP. ثم تتم طباعة النتائج. <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?> مصادر للتعلم: hsoub.com/PHP - php_mysql_connect
  10. الشيفرة السابقة تقوم بتشكيل list من ناتج الاستعلام (نفذه للمنتجات العادية)، ثم نكرر الموضوع للاستعلام الثاني الذي يجلب المنتجات المميزة. أخيرا نقوم بدمج القائمتين بنفس خطوات الشرح السابق فينتج قائمة جديدة نعرضها في list view.
  11. في تطبيق Flutter نقوم باستعلامين على SQL أحدهما استعلام عادي و الآخر مميز و نحفظ البيانات في التطبيق (استعلامين أسهل بالتعامل) ضمن فلاتر و أثناء تعبئة القائمة list view بالبيانات القادمة من SQL نستخدم مثلا حلقة for و عند الوصول لعدد يقبل القسمة على 10 نقوم بإضافة العناصر المميزة من الاستعلام الثاتي. $normal-data $special-data $list-view for i = 0 ; i<$normal-data.length ; i++ if i % 10 == 0 $list-view.addAll($special-data) // حسب مثال نضيف عدة عناصر $list-view.add $normal-data[i] // نصيف عنصر واحد
  12. يمكن تطبيق مفهوم التصنيف Categorical على حقل معين ومن ثم ترتيب إطار البيانات على أساسه: df['m'] = pd.Categorical(df['m'], ["March", "April", "Dec"]) df.sort_values("m") out: = a b m 0 1 2 March 2 3 4 April 1 5 6 Dec Categoricals : هو نمط بيانات يستخدم في العمليات الإحصائية، ويكون له مجموعة ثابتة من الخيارات. يمكن التعلم أكثر عن نمط البيانات هذا من هنا: Categoricals
  13. مرحبا عمر، نحن نهتم بالتعلم و التطبيق أكثر من الوقت الذي نقضيه في التعلم لأنه علينا تنمية مهاراتنا و إن التعلم غير محدود وكل يوم سوف تكتشف مواضيع جديدة و طرق أفضل لتصميم الصفحات و كتابة تعليمات بطريقة سليمة أكثر، وحل المشكلات البرمجية المتنوعة. يمكنك ملاحظة أن مطوري التقنيات يضيفون تحديثات كل فترة و هذا يتطلب منا دوما الإطلاع عليها و فهمها و محاولة الاستفادة منها لتحسين تطبيقاتنا، لذلك أنصحك بتغيير مفهوم حصر التعلم بمدة معينة لإنهاء موضوع ما فهي لاتحتسب هكذا. لنحاول حساب مدة تقديرة لوقت التعلم بحدود الدورة. إن الدورة توفر تقريبا 50 ساعة فيديو، وهذا الوقت ستقضيه فقط في المشاهدة على الأقل. حسنا، لكل ساعة فيديو سوف تقضي تقريبا ضعف الوقت أي ساعتين للتطبيق و مراجعة الدروس ثم فتح مواقع مختلفة و محاولة التوسع في بعض الأفكار و المفاهيم التي تكون جديدة بالنسبة لك لتجميع أكبر قدر متنوع من الأفكار لها. ستعترضك بعض المشاكل أثناء التعلم، والمشروع لا يعمل مثلا، سوف تطرح أسئلة و يجيبك المدربون و تحاول تعديل الشيفرات البرمجية لديك، أيضا هذا يأخذ بعض الوقت. بعد إنهاء مشاهدة الدورة، سوف تقوم بالتحضير للامتحان ومراجعة سريعة لكل شئ تعلمته… ومن ثم تقديم الامتحان. كمحصلة، ستحتاج ل 200 ساعة تعلٌّم يتم تقسيمها كما تريده أنت بتخصيص أيام أو ساعات للدراسة.. أي ستقضي بين ثلاثة لأربعة أشهر، واكرر نريد فهم كل المعلومات و التطبيق عليها لضمان الاستفادة منها. أتمنى لك التوفيق
  14. يمكننا تحقيق المرور على قائمتين في بايثون سويا من خلال عمل zip لهما (يأخذ طول القائمة الأقصر) : for f, b in zip(foo, bar): print(f, b) تعمل هذه الطريقة لأن zip يعيد iterator of tuples
  15. حاولي تبديل exit مع raise SystemExit
  16. في حال نستعمل while يفضل استخدام break. سبب عدم عمل exit هو أن الشيفرة هذه ليست الدالة الأساسية main. إن وضعت while في أول البرنامج أرجو عمل إزاحة لكل سطر بعدها.
  17. صورة للخطأ؟ تأكدي من الفراغات و أن التعليمات تابعة لجملة if
  18. يمكننا استخدام الدالة ()exit في اللحظة التي نريدها بكتابتها بعد آخر تعليمة نريد تنفيذها. حاولي حل المشكلة .. . elif mySelection == 4: print("**Good Buy**") exit()
  19. صحيح، أنا ذكرت مثال لكيفية ترتيب الشيفرة وانت يمكنك تعديلها كما ترينه مناسبا. أنا اختصرت البرنامج ووضعت قيمة ثابتة هي 4. في برنامجك تطلبين من المستخدم إدخال X و من ثم تضيفينها للقائمة وهو صحيح: if mySelection == 1: print('list1: 1 , 3 , 2') x = input('\nadd to list:') list1.append(x) print(list1)
  20. إن تعريف القائمة فيه مشكلة، يجب أن تكون بهذا الشكل: سوف تحوي سلاسل نصية: list1 = ["1" , "3" , "2"] حيث أن كل قيمة نحددها باقتباس منفصل، وبين العناصر نضع فاصلة. لنجعلها تحوي أرقام مثلا تصبح هكذا: list1=[1 , 3 , 2] ** سوف نأخذ الشكل الأول** لطباعة القائمة نستخدم print ونمرر له اسم المتحول: print(list1) بدون اشارات الاقتباس " أو '. حتى نرة نتيجة التعديل يجب أن نستدعي تعليمة الطباعة بعد تغيير القيمة في list1 أي تكرار التعليمة السابقة. مثلا: list1 =[1 , 3 , 2] print(list1) # => [1, 3, 2] list1.append(4) print(list1) # => [1, 3, 2, 4] يمكن وضع تعليمة طباعة واحدة بعد البرنامج: if mySelection == 1: print('list1: 1 , 3 , 2') x = input('\nadd to list:') list1.append(x) elif mySelection == 2: print('list1: 1 , 3 , 2') list1.sort() #sort the list elif mySelection == 3: print('list1: 1 , 3 , 2') list1.reverse() #reverse the list elif mySelection == 4: print("**Good Buy**") print('new list' , list1)
  21. يمكن تطبيق مفهوم debounce بحيث ننتظر توقف المستخدم عن الكتابة لبضع أجزاء الثانية قبل تنفيذ الاستعلام ستكون الشيفرة بهذا الشكل: حيث سننتظر مرور الوقت wait حتى ننفذ الطلبية function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } يمكن أن تجد مثال كامل من هنا كما يمكن استعمال awesome-debounce-promise كالتالي: حيث تأخذ معاملين الأول هو دالة الاتصال مع API والثاني هو الوقت المنتظر.. const searchAPI = text => fetch('/search?text=' + encodeURIComponent(text)); const searchAPIDebounced = AwesomeDebouncePromise(searchAPI, 500); class SearchInputAndResults extends React.Component { state = { text: '', results: null, }; handleTextChange = async text => { this.setState({ text, results: null }); const result = await searchAPIDebounced(text); this.setState({ result }); }; } حل آخر هو useCallback' react hook': نفس المبدأ import React, { useCallback } from "react"; import { debounce } from "lodash"; const handler = useCallback(debounce(someFunction, 2000), []); const onChange = (event) => { // perform any event related action here handler(); };
  22. أرجو الانتباه للمحاذاة، أي وضع فراغ للتعليمات البرمجية حسب طريقة كتابة بايثون. قراءة المتغير و شروط if تتبع للحلقة أي يجب أن يكون هنالك فراغ على اليسار، لاحظي الشيفرة السابقة
  23. while true: myOption = int(input("Your option is?")) if myOption == 0: break if myOption == 1: print(.... elif myOption == 2: print(... elif myOption == 3: print(.. elif myOption == 4: print(... هكذا سيستمر البرنامج بإدخال قيم و معالجتها حتى ندخل القيمة 0
  24. هنا علينا استخدام مفهوم الحلقة التكرارية، نستخدم مثلا while و في ضمنها نضع الشيفرة المسؤولة عن قراءة دخل المستخدم و اختبار الشرط. لنجعل الحلقة تتكر باستمرار نستخدم :while true. لكي نوقف الحلقة نضع شرط إضافي مثلا يختبر قيمة myOption == 0 و نعمل break.
  25. حسنا، myOption = int(input("Your option is?")) if myOption == 1: print('Option1') elif myOption == 2: print('Option2') elif myOption == 3: print('Option3') elif myOption == 4: print('Option4') القيمة المدخلة هي أساس الاختيار هنا، علينا حفظها في متحول ومن ثم الاختيار بناءأ عليها. الطريقة التي ذكرتها أبسط. في الشيفرة لديك، طالما أن option1 يحوي قيمة ونحن نختبره مباشرة ضمن if بدون مقارنة مع 1 مثلا فيعطي تقييم الشرط true دوما. الآن أدخلي فقط رقم الخيار مثلا 2 وسوف يتم تخزين 2 في myOption ثم عند المقارنة الأولى لن يتحقق الشرط فينتقل للثانية و يتحقق. وهكذا..
×
×
  • أضف...