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

Mustafa Suleiman

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

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

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

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

    365

كل منشورات العضو Mustafa Suleiman

  1. لديك مشكلة في استدعاء الدالة mysqli_connect() في السطر 9 من ملف db_conn.php في مشروعك، وتلك الدالة تستخدم لإنشاء اتصال بقاعدة بيانات MySQL باستخدام امتداد MySQLi. تأكد من أن امتداد MySQLi مفعل في تكوين PHP لديك، عن طريق فتح ملف php.ini والتأكد من أن السطر التالي غير معلق (أزل الفاصلة المنقوطة إذا كانت موجودة): extension=mysqli بعد إجراء التغييرات، أعد تشغيل خادم الويب لتطبيق التكوين. أيضًا عليك كتابة بيانات الاتصال بقاعدة البيانات (المضيف، اسم المستخدم، كلمة المرور، إلخ) التي قدمتها في دالة mysqli_connect() بشكل صحيح كالتالي: $conn = mysqli_connect("localhost", "اسم_المستخدم", "كلمة_المرور", "اسم_قاعدة_البيانات"); إن استمرت المشكلة جرب الاتصال بقاعدة البيانات باستخدام سكريبت PHP بسيط يحتوي على كود الاتصال فقط، وذلك يساعد في عزل المشكلة والتحقق مما إذا كانت المشكلة تتعلق بالكود نفسه أم بتكوين الخادم. <?php $conn = mysqli_connect("localhost", "اسم_المستخدم", "كلمة_المرور", "اسم_قاعدة_البيانات"); if (!$conn) { die("فشل الاتصال: " . mysqli_connect_error()); } echo "تم الاتصال بنجاح"; mysqli_close($conn); ?>
  2. بخصوص دورة تطوير واجهة المستخدم، في حال كنت مطور واجهة أمامية فهي دورة أساسية لك، حيث أنك كمطور واجهات أمامية مطلوب منك أن تكون مُلم باللغات الأساسية للويب وهي HTML, CSS, JS وأن تكون متعمق بها وقادر على إنشاء مشاريع بواسطتها. أيضًا المكتبات الخاصة بالواجهة الأمامية مثل Bootstrap وjQuery، وكل ذلك ستتعلمه في دورة تطوير واجهة المستخدم. لكن هل ذلك يكفي للعمل على منصات العمل الحر أو التوظيف في الشركة؟ ستحتاج إلى قراءة التالي لتفهم الأمر بشكل مفصل:
  3. بالطبع يمكنك ذلك، وأنت حاليًا في سن صغير مثالي وهو سن 11 عام الذي يعتبر السن المناسب لتعلم البرمجة في حال أردت ذلك فقبل ذلك الأمر معقد لتفهمه . والحد الأدنى لتعلم البرمجة يختلف من شخص لآخر، وذلك يعتمد على مدى الاستعداد والقدرة على التعلم والتفاعل مع المواد التعليمية، ولكن الحد الأدنى الموصى به للبدء في تعلم البرمجة هو حوالي 8-10 سنوات، ويمكن للأطفال في هذا العمر أن يتعلموا البرمجة باستخدام لغات البرمجة المناسبة لهذا العمر مثل Scratch و Blockly وغيرها. ولا تشغل بالك بموضوع الوظيفة أو العمل، بل ركز اهتمامك على تنمية مهاراتك والاستمتاع بتعلم البرمجة فأنت أمامك الوقت لكي تتعلم ما تريد وتجربة أي شيء، وإن التزمت حقًا ستصل لمستوى ممتاز جدًا في مرحلة مبكرة وستبدأ حياتك العملية مبكرًا أيضًا. وستجد هنا نقاش مفصل:
  4. أرفق الملفات التي تعمل عليها لإختبار الكود عليها.
  5. حاول استبدال محتويات ورقة العمل الحالية من خلال: with pd.ExcelWriter("AAA.xlsx", mode='a') as writer: Table.to_excel(writer, sheet_name='Sheet1', index=False, if_sheet_exists='replace') أو الإَضافة إلى نهاية ورقة العمل الحالية من خلال: with pd.ExcelWriter("AAA.xlsx", mode='a') as writer: Table.to_excel(writer, sheet_name='Sheet1', startrow=writer.sheets['Sheet1'].max_row, index=False)
  6. من الأفضل إرفاق مجلد المشروع لكي يتم مساعدتك فحاليًا الأمر مبهم ومن الصعب تحديد سبب المشكلة بدون تفقد كامل كود المشروع.
  7. لكي تتمكن من الوصول إلى المتغير Table خارج الدالة، عليك إرجاعه من الدالة كالتالي: import pandas as pd def Subject_One(cl1, cl2, cl3, cl4): df = pd.read_excel("AAA.xlsx", header=None) selected_column_1 = df.iloc[8::2, [0, 1, 2, cl1, cl2, cl3, cl4]] selected_column_1.reset_index(drop=True, inplace=True) selected_column_2 = df.iloc[9::2, [2, cl1, cl2, cl3, cl4]] selected_column_2.reset_index(drop=True, inplace=True) A = pd.DataFrame(selected_column_1) B = pd.DataFrame(selected_column_2) Table = pd.concat([A, B], axis=1) repeated_values1 = [df.iloc[6, 3]] * len(Table) repeated_values2 = [df.iloc[3, 4]] * len(Table) Table['الإسم'] = repeated_values1 Table['الرقم'] = repeated_values2 Table.fillna(0, inplace=True) Table["مرحلة الأولى"] = Table.iloc[:, [5, 6]].max(axis=1) Table["مرحلة ثانية"] = Table.iloc[:, [10, 11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['القيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] <= 50 else None, axis=1) return Table # استدعاء الدالة وحفظ النتائج في متغير result1 = Subject_One(3, 4, 5, 6) result2 = Subject_One(7, 8, 9, 10) # دمج النتائج final_result = pd.concat([result1, result2]) # حفظ النتائج في نفس الملف final_result.to_excel("AAA.xlsx", index=False) أو يمكن كتابة الكود كالتالي أيضًا: def Subject_One(cl1,cl2,cl3,cl4): df = pd.read_excel("AAA.xlsx",header=None) selected_column_1 = df.iloc[8::2, [0,1,2,cl1,cl2,cl3,cl4]] selected_column_1.reset_index(drop=True, inplace=True) selected_column_2 = df.iloc[9::2, [2,cl1,cl2,cl3,cl4]] selected_column_2.reset_index(drop=True, inplace=True) A = pd.DataFrame(selected_column_1) B = pd.DataFrame(selected_column_2) Table=pd.concat([A,B],axis=1) repeated_values1 = [] repeated_values2 = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['الإسم'] = repeated_values1 Table['الرقم'] = repeated_values2 Table.fillna(0, inplace=True) Table["مرحلة الأولى"] = Table.iloc[:, [5,6]].max(axis=1) Table["مرحلة ثانية"] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['القيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] <= 50 else None, axis=1) # Write the data to the file with pd.ExcelWriter("AAA.xlsx", mode='a') as writer: Table.to_excel(writer, sheet_name='Sheet1', index=False) Subject_One(3,4,5,6) Subject_One(7,8,9,10)
  8. يتوفر الخيار append=True في الدالة to_excel()، وذلك هذا سيؤدي إلى إضافة البيانات الجديدة إلى نهاية الملف الموجود، دون استبدال البيانات الموجودة. كالتالي: Table2.to_excel("123456.xlsx", index=False, append=True) والنتيجة هي إضافة البيانات في Table2 إلى نهاية ملف 123456.xlsx.
  9. طريقة الاستدعاء الذاتي هي طريقة لجعل الدالة تستدعي نفسها بشكل متكرر حتى تتحقق حالة معينة/ ونستخدم يمكن تلك الطريقة لإنشاء خوارزميات تكرارية، مثل خوارزمية فيبوناتشي. def fibonacci(n): if n == 0 or n == 1: return n return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(10)) أو دالة لحساب عاملي العدد المدخل لها: def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n-1) result = factorial(5) print("عاملين الثنائي لعدد 5 هو:", result) أما بخصوص الدوال المتداخلة فهي دوال يتم تعريفها داخل دوال أخرى، ونستخدم تلك الدوال لتنظيم الكود أو لإنشاء دوال أكثر تعقيدًا. مثل جمع عددين بطريقة متداخلة: def add(x): def add_inner(y): return x + y return add_inner add_5 = add(5) result = add_5(3) print("جمع 5 و 3 هو:", result) أو دالة متداخلة لحساب المربع والتكعيب: def power(x): def square(y): return y ** 2 def cube(y): return y ** 3 return square(x), cube(x) result_square, result_cube = power(4) print("المربع هو:", result_square) print("التكعيب هو:", result_cube) أو حساب مساحة الدائرة: def calculate_area(radius): def area_of_circle(radius): return 3.14 * radius * radius return area_of_circle(radius) print(calculate_area(5)) وكما ذكرت نستخدم الدوال المتداخلة لإنشاء دوال أكثر تعقيدًا، ولكن يمكن أن تجعل الكود أكثر صعوبة في القراءة والفهم، ويجب استخدام الدوال المتداخلة فقط عندما يكون ذلك ضروريًا.
  10. ما الذي يوجد في ملفي router وroute لديك؟ من الأفضل إرفاق مجلد المشروع لتفقد المشكلة.
  11. من الأفضل حذف نسخة Node.js القديمة تمامًا uninstall ثم تثبيت النسخة الجديدة والتي يمكنك تحميلها من هنا: https://nodejs.org/en ودائمًا اختر النسخة المستقرة وهي LTS وهي إصدار 20 حاليًا. لكن هناك طريقة أفضل والتي يستخدمها مطوري Node.js لكن البعض قد يجدها معقدة قليلاً، وهي استخدام مدير إصدارات وهو NVM بمعنى أنه يمكنك تحميل أكثر من إصدار لـ Node والتنقل بينهم بكل سهولة باستخدام أمر بسيط. والأمر يتم كالتالي حذف أي إصدار Node.js لديك على حاسوبك من لوحة التحكم Control panel ثم تحميل وتثبيت NVM من: https://github.com/coreybutler/nvm-windows/releases/download/1.1.12/nvm-setup.exe وبعد التثبيت قم بتنفيذ الأمر التالي في منفذ الأوامر: nvm install lts وذلك من أجل تثبيت أحدث إصدار مستقر متوفر. أو يمكنك تحميل إصدار معين من خلال: nvm install 18 ثم قم بعرض الإصدارات الذي تم تثبيتها من خلال: nvm ls ولتفعيل إصدار معين اكتب رقمه فقط كالتالي: nvm use 18 والآن أنت على إصدار 18 وتستطيع التأكد من خلال: node --version وإذا أردت التنقل إلى أي إصدار اكتب nvm use ورقم الإصدار بجانبه.
  12. من الصعب تحديد المشكلة، لكن: هل يتم إرسال بيانات المستخدم إلى صفحة البروفايل بشكل صحيح؟ هل يتم تخزين بيانات المستخدم بشكل صحيح في قاعدة البيانات؟ تأكدي من ذلك من خلال استعلام قاعدة البيانات للحصول على بيانات المستخدم. هل يتم عرض بيانات المستخدم بشكل صحيح في صفحة البروفايل؟ عليك تفقد البيانات لمعرفة أين تكمن المشكلة.
  13. تفقد الدورة من خلال تبويب دوراتي كالتالي: وستجد شرح شامل هنا: كيف أصل للدورات التي اشتركت بها في حال لم تجدها أرجو التواصل مع مركز المساعدة وشرح المشكلة.
  14. الأمر يعتمد على إتجاه الشرح في الكتاب، وستحتاج إلى معرفة بلغة جافا قبل قراءته حيث أنه مذكور التالي: "ينبغي أن تكون على معرفة جيدة بلغة البرمجة جافا قبل أن تبدأ بقراءة هذا الكتاب. وبالتحديد، لابُدّ أن تَعرِف كيف تُعرِّف صنفًا class جديدًا يمتدّ extend أو يرث من صنف آخر موجود، إلى جانب إمكانية تعريف صنف يُنفِّذ واجهة interface. إذا لم تكن لديك تلك المعرفة، فيُمكِنك البدء بسلسلة مدخل إلى جافا فهي مترجمة عن كتاب شهير يشرح لغة البرمجة جافا." مدخل إلى جافا
  15. أولاً هنا مشكلة في تبعية مكتبة androidx.activity:activity:1.8.0 في مشروعك، وهناك سببان محتملان لظهور تلك الرسالة: نسخة compileSdk في مشروعك حاليًا مضبوطة على 33، بينما تتطلب مكتبة androidx.activity:activity:1.8.0 استخدام نسخة 34 أو أعلى من واجهة برمجة تطبيقات أندرويد. من الممكن أن تكون قد استخدمت نسخة خاطئة من المكتبة غير متوافقة مع نسخة compileSdk الحالية. ولذا عليك القيام بتحديث compileSdk: افتح ملف build.gradle.kts الخاص بوحدة التطبيق (app module). ابحث عن قسم android داخل الملف. غيّر قيمة الخاصية compileSdk إلى 34 على الأقل. تأكد من حفظ الملف وإعادة مزامنة بالضغط على Gradle (Sync Now).
  16. المحاكي هو لنظام ويندوز وتستطيع تجربة تشغيل البرنامج عليه، لكن لا تنتظر من محاكي أن يقدم لك أداء مماثل للويندوز كما أن بعض البرامج أو الألعاب قد لا تعمل عليه.
  17. تحقق من المسار الرئيسي في ملف المسارات لديك، هل يوجد مسار كالتالي؟ على إفتراض أنك تستخدم express.js app.get('/', (req, res) => { // قم بمعالجة المسار "/" هنا }); فالخادم يعمل لكن ويخبرك أنه لا يوجد المسار الذي طلبته.
  18. ليس مجلد public بل يوجد ملف باسم app.blade.php أو layout.blade.php أيًا كان الملف الرئيسي للمشروع لديك، وستجد بالضغط على مجلد resources ثم ستجد بداخله مجلد views والذي يحوي قوالب blade.
  19. عليك تثبيت حزمة ODBC على جهاز الكمبيوتر لديك. إنشاء مصدر بيانات ODBC جديد لقاعدة بيانات أوراكل. افتح لوحة التحكم. انقر فوق "الأنظمة والأدوات". انقر فوق "إدارة مصادر البيانات". انقر فوق "إضافة". حدد "مصادر البيانات ODBC". انقر فوق "التالي". حدد "إنشاء مصدر بيانات جديد". انقر فوق "التالي". حدد "Oracle". انقر فوق "التالي". أدخل اسمًا لمصدر البيانات. أدخل معلومات الاتصال بقاعدة بيانات أوراكل. انقر فوق "التالي". حدد قواعد البيانات التي تريد استخدامها. انقر فوق "التالي". حدد خيارات الاتصال. انقر فوق "التالي". راجع معلومات مصدر البيانات. انقر فوق "إنهاء". أضف مرجعًا إلى مكتبة ODBC.NET إلى مشروع C#. افتح مشروع C# الخاص بك في Visual Studio. انقر بزر الماوس الأيمن فوق مشروعك في نافذة "المستكشف". حدد "إضافة مرجع". حدد "مكتبات". حدد "مكتبات البرامج المثبتة". حدد "ODBC.NET". انقر فوق "إضافة". إنشاء كائن OdbcConnection جديد للاتصال بقاعدة بيانات أوراكل. OdbcConnection connection = new OdbcConnection("DSN=OracleDB"); حيث "DSN=OracleDB" هو اسم مصدر البيانات الذي أنشأته في الخطوة 2. استخدم الكائن OdbcCommand لإنشاء استعلام SQL. ثم استخدم الكائن OdbcDataReader لقراءة البيانات من استعلام SQL. مثال لتوضيح الأمر: using System; using System.Data.Odbc; namespace OdbcDemo { class Program { static void Main(string[] args) { // Create an ODBC connection object. OdbcConnection connection = new OdbcConnection("DSN=OracleDB"); // Open the connection. connection.Open(); // Create an ODBC command object. OdbcCommand command = new OdbcCommand("SELECT * FROM Customers", connection); // Execute the command. OdbcDataReader reader = command.ExecuteReader(); // Read the data from the reader. while (reader.Read()) { Console.WriteLine("{0} {1}", reader["CustomerID"], reader["CustomerName"]); } // Close the connection. connection.Close(); } } } أولا يقوم الكود بإنشاء اتصال بقاعدة بيانات أوراكل المسماة "OracleDB"، ثم سينشئ استعلام SQL لتحديد جميع البيانات من جدول "العملاء"، ثم سيقرأ البيانات من الاستعلام ويطبعها على وحدة التحكم.
  20. أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. أولاً سأوضح لك فكرة الوعود Promises. يمكنك التفكير في الوعود Promises في JavaScript على أنّها الوعود في الحياة الحقيقية. لنفرض أنّ طفلًا صغيرًا طلب من والده أن يشتري له لُعبةً ما و أخبره والده أنه يعده بأن يصنع له اللعبة إذا وجد مواد صنعها في الأسواق. و ذهب الأب للبحث عن هذه المواد أي أنّ الوعد الآن قيد التنفيذ (Pending) ، فإذا وجد الأب المواد سيشتريها و يصنع اللعبة للطفل و بذلك يكون قد وفّى بوعده أي تكون حالة الوعد الآن هي fulfilled أو resolved، أمّا إذا لم يجد هذه المواد فلن يشتريها و بالتالي لن يتمكن من صنع اللعبة أي لا يكون قد وفى بوعده أي تكون حالته rejected. نفس هذا الأمر ينطبق على الوعود Promise برمجيًا. مثال لما يشبه الأمور التي نفعلها في الحياة الواقعية - في الحياة البرمجية: ”شيفرة مُنتِجة“ أي أنّها تُنفّذ أمرًا ما وتأخذ وقت. مثل الأكواد التي تقوم بتحميل البيانات عبر الشبكة. هذا الأب "في المثال السابق". ”شيفرة مُستهلِكة“ أي أنّها تطلب ناتج ”الشيفرة المُنتِجة“ ما إن يُصبح جاهزًا. وهناك عديد من الدوال تحتاج إلى هذا الناتج. هذا الطفل ”في المثال السابق ينتظر اللعبة“. الوعد (Promise) هو كائن في جافاسكربت يقوم بالربط بين ”الشيفرة المُنتِجة“ و”الشيفرة المُستهلِكة“. في الحياة العملية، الوعد هو ”انتظار صنع اللعبة“. يمكن أن تأخذ ”الشيفرة المُنتِجة“ ما تلزم من وقت لتُقدّم لنا النتيجة التي وعدتنا بها، وسيقوم الوعد بتجهيزها لنا لأيّة شيفرة طلبتها متى جهزت. و صيغة الباني لكائنات الوعود تكون كما يلي: let promise = new Promise(function(resolve, reject) { // ‫المُنفِّذ (الشيفرة المُنتجة، مثل ”الأب“) }); تُسمى الدالة التي يتم تمريرها إلى new Promise ”بالمُنفِّذ“. فمتى صُنع الوعد new Promise تعمل الدالة تلقائيًا. يحتوي هذا المُنفِّذ على الشيفرة المُنتجِة، ويمكن أن تُقدّم لنا في النهاية ناتجًا. في مثالنا، فالمُنفِّذ هذا هو ”الأب“. و تُقدّم جافاسكربت الوسيطين resolve و reject وهما ردود نداء. لا نضع الشيفرة التي نريد تنفيذها إلا داخل المُنفِّذ. و عليه مهمّة استدعاء resolve أو reject أي عليه أن يقوم بنداء/استدعاء أحد ردود النداء resolve أو reject: resolve(value)‎: لو اكتملت المهمّة بنجاح. reject(error)‎: لو حدث خطأ. و كائن الوعد promise الذي أعاده الباني new Promise له خاصيتين داخليتين، و هما: الحالة state: و تبدأ حالة الوعد بالقيمة "pending" وبعدها تنتقل إلى "fulfilled" متى تم استدعاء resolve، أو إلى "rejected" متى تم استدعاء reject. الناتج result: و يبدأ أولًا غير معرّف undefined، وبعدها يتغيّر إلى value متى تم استدعاء resolve(value)‎ أو يتغيّر إلى error متى تم استدعاء reject(error)‎. هذا الموضوع معقد بعض الشئ و يحتاج إلى وقت حتى تتمكن من فهمه بشكل جيد خذ وقتك، أيضًا أنصحك بأن تقوم بالبحث عن Promise في أكاديمة حسوب أو موسوعة حسوب و قراءة بعض المقالات التي تظهر لك حتى تتمكن من الفهم بشكل أفضل. و set time out هي دالة تقوم بتنفيذ دالة معينة بعد مرور زمن محدد، وهي مفيدة لعمل جدولة مزمنية مثلا، ومثلها الدالة set interval التي تكرر نفسها اي تستدعي الدالة كل X ثانية مثلا.. يمكننا استخدام هتين الدالتين عندما نستطيع التحكم بالزمن وعمل جدولة زمنية. هنا نستخدمها لتحديث الرسائل أو الاشعارات مثلا كل 5 ثواني.. أما promise هي غرض برمجي، ينفذ مهمة ما وهذه المهمة غير متزامنة اي لانعرف قيود زمنية لها، وتكون بشكل دالة، مثل جلب بيانات من المخدم، او تحميل صورة أو ملف..، وهنا لا نعلم بالضبط الزمن اللازم لانتهاء هذه العملية، أي ممكن تأخذ 1 ميلي ثانية، أو حتى 100 ثانية، هنا لايمكننا توقع متى تنتهي من التنفيذ. ثم بعد انتهاء المهمة الاساسية بنجاح، يقوم promise باستدعاء دالة resolve والتي مثلا تعرض لنا نتيجة مفادها نجاح تحميل او رفع بيانات أو عرض البيانات نفسها.. وإن حدث فشل في الاتصال أو في أي جزء، تستدعي promise دالة reject التي تعطينا رسالة خطأ وتشرح مالذي حصل..
  21. لا مشكلة في استخدام المحاكي، وهناك محاكيات أفضل من حيث الأداء مثل box64droid و exagear. لكن قم بتثبيت المحاكي من المصدر الرسمي أي الموقع الرسمي وهو التالي: https://winlator.com/download/
  22. وعليكم السلام محمود، لاحظ أنك وضعت علامة simi colon بعد دالة then أي علامة ; والتي تعني نهاية سطر الكود وبالتالي أي كود بعدها هو كود جديد. ولكن نحن نريد استخدام دالة catch لذلك نستخدم ميزة method chaining من خلال وضع نقطة بعد نهاية الدالة ثم كتابة الدالة الأخرى التي تستقبل النتيجة منها على شرط أن تلك القيمة لها علاقة بالدالة التي تأتي بعدها وتستقبلها وهنا دالة catch تستقبل الأخطاء ونقوم بالتعامل معها بداخلها. لذا احذف ; بعد then وسيتم حل المشكلة. waitt(7000).then(() => console.log(result)).catch((err) => console.log(err)) وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
  23. بل البدء مباشرة بـ Redux Toolkit، فذلك الإصدار يوفر الكثير من الميزات التي تجعل عملية تعلم واستخدام Redux أسهل بكثير، كما أنه لا يزال يتبع مبادئ Redux الأساسية، وفي الأصل تم تطوير Redux Toolkit من أجل حل مشاكل كانت موجودة في Redux لذلك الإصدار الذي ينًصح باستخدامه هو Redux Toolkit. ولكن من الأفضل قبل ذلك تعلم كيفية استخدام الـ reducers في React حتى لا تستخدم التقنية بدون معرفة ما يحدث.
  24. الكود يعتمد على مفهوم list comprehension. حيث أن [i for i in range(5)] ستولّد مصفوفة هي [4, 3, 2, 1, 0]، وتوليد تلك المصفوفة سيتكرّر بحسب j في الحلقة الخارجية، وبما أنّ الحلقة الخارجية for j in range(6) ستتكرر 6 مرّات فهذا يعني تكرار الحلقة الداخلية 6 مرّات، أي توليد matrix لها ست صفوف و 5 أعمدة كالتالي: [ [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] ] حيث الحلقة الداخلية (التي تحوي المتحوّل i) تولّد الأعمدة، والحلقة الخارجية التي يتحكّم بها المتحوّل j تولّد الأسطر. لكن ما معنى استقلال i عن j ؟ هما ليسا نفس المتحوّل، وكما قلت آنفاً لكل منهما وظيفة في الكود أحدهما في حلقة تولّد الأسطر والآخر في حلقة تولّد الأعمدة. وانت بحاجة إلى قراءة التالي لتفهم الأمر بشكل أفضل:
  25. المشكلة هي أنك تحاول المقارنة بين قائمة كاملة ورقم صحيح في السطر: if numbers<30: وذلك غير منطقي، فيجب أن قوم بالمرور على القائمة ثم مقارنة كل رقم بها مع رقم 30. وأنت قمت بذلك بالفعل في حلقة for، لكن استخدمت اسم القائمة الكاملة numbers بدلاً من أن تستخدم المتغير number في حلقة for. لاحظ أن أنك كتبت for number in numbers أي أن number هنا بدون s هو متغير يمثل كل رقم القائمة في كل تكرار لذلك نستخدمه هو داخل الحلقة. أي تصحيح السطر إلى: if number<30: وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
×
×
  • أضف...