مصطفى القباني

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

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

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

السُّمعة بالموقع

49 Excellent

3 متابعين

  1. يمكنك الكشف على نوع المتغير عن طريق الدالة type. مثلا: x = 1 print(type(x)) y = 'hello' print(type(y)) if type(x) is int: print('the type is int') كما أن بايثون أيضاً تفضل إستخدام ما يسمى بالduck typing، وهو أن تتعامل مع المتغير الذي لديك على أنه نوع معين، وأن تتعامل مع الخطأ إن حدث. مثلاً: x = 1 try: y = x[:1] # أفترضنا أن المتغير إكس عبارة عن مصفوفة أو سترينج except: print("x is not a string or a list, can't be sliced") يمكنك القراءة أكثر عن الduck typing من هنا أو هنا. بالتوفيق
  2. تحياتي يمكن عمل ذلك عن طريق الكود الآتي: public class Main { public static void main(String[] args) { String sentence = "To be or not To be : That Is the Question"; float uppercase_count = 0; float lowercase_count = 0; for(int i=0; i<sentence.length(); i++){ char current_letter = sentence.charAt(i); if (current_letter >= 'A' && current_letter <= 'Z') uppercase_count+=1; if (current_letter >= 'a' && current_letter <= 'z') lowercase_count+=1; else continue; } float capital_percentage = uppercase_count / (uppercase_count+lowercase_count) * 100; float lowercase_percentage = lowercase_count / (uppercase_count+lowercase_count) *100; System.out.println("Number of capital letters: "+ uppercase_count); System.out.println("Number of small letters: "+ lowercase_count); System.out.println("Capital letters percentage: "+ capital_percentage + "%"); System.out.println("Small letters percentage: "+ lowercase_percentage + "%"); } } في البدء نقوم بتعريف عداد للأحرف الصغيرة وعداد آخر للأحرف الكبيرة، ثم نقوم بالمرور على الجملة التي لدينا حرف حرف، ونقوم بالكشف على كل حرف إذا كان uppercase أم lowercase. يمكن الكشف عن كون الحرف uppercase أم lowercase بأكثر من طريقة لكن الطريقة التي استخدمناها هنا هي التحقق إذا كان الحرف الذي لدينا يقع بين A و Z ، إذا كانت الإجابة بنعم إذا الحرف كابيتال، وإذا كان بين a و z إذا الحرف small. تم ذلك في السطر التالي: if (current_letter >= 'A' && current_letter <= 'Z') uppercase_count+=1; if (current_letter >= 'a' && current_letter <= 'z') lowercase_count+=1; إما إذا كان الحرف غير ذلك فلا يتم زيادة أياً من العدادين. في النهاية نقوم بحساب النسبة المئوية عن طريق قسمة العداد على مجموع العدادين، والضرب في مائة. يمكنك تجربة الكود من هنا. بالتوفيق.
  3. يمكنك تجربة بدأ atom بالأمر الآتي: atom --clear-window-state إن لم تحل المشكلة يمكنك تجربة إستخدام محرر آخر مثل vscode.
  4. جرب مرة أخرى حذفه وإنزاله عن طريق snap وليس apt-get: sudo snap remove --purge atom بعد ذلك: sudo snap install atom
  5. تمام الرسالة التي ظهرت تقول أن atom موجود في snap وليس apt، لذلك يجب عمل: sudo snap install atom
  6. هل قمت بتجربة حذف atom وإنزاله من جديد؟ قم بعمل هذا الأمر لحذف atom وحذف كل الإعدادات المتعلقة به: sudo apt-get purge atom بعد ذلك قم بإنزاله من جديد: sudo apt-get install atom بالتوفيق.
  7. أعتقد أنك بحاجة إلى إحتراف البرمجة إلى درجة كبيرة لتحقيق هذه الغاية، فمعنى الإختراق هو إستغلال نظام ما بطريقة غير متوقعة يكون النظام غير مدرك بوجود تلك الثغرة به، ولإكتشاف مثل هذه الأشياء ومن ثم إستغلالها يجب أن تمتلك درجة عالية جداً من الخبرة ربما تصل إلى سنوات.
  8. تحياتي الخطأ في كود حضرتك بسيط وهو أن الattribute اسمه maxlength وليس max . لذلك يجب تعديل الكود ليصبح كالآتي: <input type="text" maxlength="5" required="required" placeholder="enter first name"/> لاحظ أن maxlength تستخدم مع النوع text بينما max تستخدم مع: number, range, date, datetime-local, month, time and week. بالتوفيق
  9. ـ WaveNet هي شبكة عصبية، يتم تدريبها على الأصوات وبعد ذلك يتم إستخدامها لتوليد أصوات مشابهة لما تم التدريب عليه. وتقوم الشبكة بتعلم الأصوات عن طريق تحويل الصوت إلى ما يسمى بmel spectrograms، وهي طريقة لتحويل الصوت من موجات إلى صورة ثنائية الأبعاد. على سبيل المثال في هذا التطبيق لشبكة WaveNet من شركة Nvidia، يتم تدريب الشبكة على أصوات من dataset تسمى arctic data، وبعد إنتهاء التدريب تكون الشبكة قد استوعبت طريقة الكلام، على الرغم من عدم توليدها كلام مفهوم، لكنها تكون قد استوعبت الأصوات ومخارج الحروف والتغيرات في نبرات الصوت. ويمكن إستخدام ما تم تعلمه في الشبكة كخطوة وسيطة في تحويل الكتابة إلى أصوات. يمكنك تدريب الWaveNet على google colab من هنا. بالتوفيق
  10. تحياتي في السطر الأول: function AppFormField({name, ...otherProps}){ تم تعريف functional component وهو أحد نوعين من الcomponents في ريأكت، ويستخدم الfunctional component إذا لن يحتوي الcomponent على state. ويتم إنشاء الcomponent بتمرير الخواص name و otherProps مع إستخدام الspread operator. في السطر التالي: const { setFieldTouched, handleChange, errors, touched} = useFormikContext() تم إستدعاء الدالة useFormikContext() (هي في الواقع hook) وتم عمل object destructuring للobject الذي تم إرجاعه من هذا الfunction. لفهم الobject destructuring ، إذا كان لديك الobject الآتي: let x ={ a: 1, b :2, c :'hello', } فيمكن إستقبال ما تم تعريفه داخل الobject هكذا: let {a,b,c} = x وهو ما تم عمله في الكود الخاص بحضرتك. بعد ذلك: return ( <> <AppTextInput onBlur={() => setFieldTouched(name)} onChangeText={handleChange(name)} {...otherProps} /> <ErrorMessage error={errors[name]} visible={touched[name]} /> </> ); export default AppFormField; بعد ذلك تم تعريف دالة الrender، وتقوم بإرجاع : AppTextInput و ErrorMessage وتم إحطاتهم بreact fragment. الcomponent الأول تم إنشائه بالprops onBlur وonChangeText وهما ما إستقبالهم بعمل object destructuring بالأعلى. بعد ذلك تم عمل export للcomponent ليمكن إستدعائه في الملفات الأخرى. بالتوفيق.
  11. تحياتي بالنسبة للكود الذي قمت بكتابته: package TestingHarmsh; public class One { public static void main(String[] args) { for (int i = 0; i < 1; i++) { System.out.println("* "); for (int a = 0; a < 1; a++) System.out.println("* * "); for (int b = 0; b < 1; b++) System.out.println("* * * "); for (int c = 0; c < 1; c++) System.out.println("* * * * "); for (int d = 0; d < 1; d++) System.out.println("* * * * * "); } } } الloops هنا أنت بغنى عنها لأنك تقوم بعمل العداد من صفر، ويتوقف إذا أصبح مساوي أو أكبر من الواحد، لذلك كل الأوامر بداخل الloop تنفذ مرة واحدة، ويمكنك الإستغناء عن الloop وكتابته كالآتي: package TestingHarmsh; public class One { public static void main(String[] args) { System.out.println("* "); System.out.println("* * "); System.out.println("* * * "); System.out.println("* * * * "); System.out.println("* * * * * "); } } لاحظ أن بتلك الطريقة أنت لم تستغل البرمجة في شيئ، ولكنك قمت بكتابة الناتج بطريقة يدوية. بالنسبة للجزء الذي ذكرته: do { System.out.print("Enter the number of lines: "); n = input.nextInt(); } while( n<=0 ); for (int i=1; i<=n; i++) { for (int j=1; j<=i; j++) { System.out.print("*"); } System.out.println(); } تم فيه إستخدام do while loop، وهي أحدى الطرق الغير تقليدية في عمل اللوب، وهي تقوم بتنفيذ الأوامر بداخل اللوب على الأقل لمرة واحدة، بغض النظر عن تحقق الشرط أم لا. فعلى سبيل المثال لاحظ أن الشرط while( n<=0 ); غير متحقق لأن الرقم المدخل رقم صحيح أكبر من الصفر وهو عدد السطور، ولكن تم تنفيذ جسد اللوب بغض النظر عن تحقق الشرط أم لا لأن الdo while loop تقوم بتنفيذ الأمر للمرة الأولى بغض النظر عن تحقق الشرط أم لا، ويتم التحقق من الشرط في المرات التالية. لاحظ أن ما يمكن عمله بالdo while loop يمكن عمله بأي loop أخرى، وتلك الطريقة الغير تقليدية غير مرغوب فيها والأفضل إستبدالها بloop عادية أخرى. بالنسبة لجسد اللوب نفسه: for (int i=1; i<=n; i++) { for (int j=1; j<=i; j++) { System.out.print("*"); } System.out.println(); } فيتم عمل عدد n من الأسطر،والمسؤؤل عن ذلك اللوب الخارجية ذات العداد i ، وبداخل كل سطر يتم طباعة عدد i من النجوم، لذلك في السطر الأول (i = 1 ) يتم طباعة عدد 1 من النجوم، وفي السطر الثاني يتم طباعة اثنان من النجوم وهكذا. وهذه هي الطريقة البرمجية لعمل المطلوب بدلا من كتابته يدوياً. شكراً لك وبالتوفيق.
  12. أعتقد أنه لا يمكن عمل كود لإيقاف تشغيل جهاز أندرويد، لأنه قد يساء إستخدامه.
  13. بالنسبة لنظام تشغيل windows: 1- إذهب إلى الStart Menu 2- قم بكتابة cmd ف البحيث الخاص بStart Menu. 3- قم بالضغط على Enter.سيتم فتح نافذة الcmd وبداخلها: لعمل shutdown يتم كتابة: shutdown /s لعمل restart يتم كتابة: shutdown /r لعمل logoff يتم كتابة: shutdown /l بعد كتابة الأمر وضغط enter يتم تنفيذ إمر الإيقاف أو إعادة التشغيل.ويمكن من خلال بايثون على سبيل المثال أو لغات البرمجة الأخرى التواصل مع الcmd وإرسال الأمر لها، على سبيل المثال في بايثون: import subprocess subprocess.Popen("shutdown /r", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) يقوم هذا الكود بإرسال الأمر المطلوب إلى cmd من خلال بايثون. بالتوفيق
  14. بالفعل السبب هو أن الelement المطلوب موجود بداخل iframe، والذي بدوره موجود بداخل iframe آخر، والذي بدوره بداخل iframe آخر. لذلك يجب عمل switching ثلاث مرات. يمكن عمل التالي كالآتي: #اختصار الاسم الطويل للفانكشن q = driver.find_elements_by_css_selector #إيجاد أول فريم وعمل سويتش إليه frames = q('iframe')[1] a = driver.switch_to_frame(q('iframe')[1]) inside_frame = q('*') #إيجاالفريم بداخل الفريم وعمل سويتش إليه inception_frame = inside_frame[-2] driver.switch_to_frame(inception_frame) #إيجاالفريم بداخل الفريم بداخل الفريم وعمل سويتش إليه double_inception_frame = q("*")[-2] driver.switch_to_frame(double_inception_frame) بعد ذلك لإضافة التاريخ إلى الinput: from selenium.webdriver.common.keys import Keys #الآن يمكننا الوصول للعنصر لأننا بداخل الفريم الحاوي له inp = q('#stop-datetime')[0] our_time = '11/23/2021 11:14 AM' inp.send_keys('11') inp.send_keys('23') inp.send_keys('2021') inp.send_keys(Keys.TAB) inp.send_keys('11') inp.send_keys('14') inp.send_keys('AM') بعد ذلك إن أردت العودة إلى الصفحة خارج جميع الframes: driver.switch_to_default_content() بالتوفيق.
  15. نعم بالتأكيد. لتعلم الdata structures لابد من بناءها بإستخدام إحدى لغات البرمجة. بالتالي يمكنك تعلم لغة C# بغرض بناء إحدى الdata structures. على سبيل المثال بعد تعلم أساسيات C#، يمكنك محاولة إستخدام ما تعلمته لعمل Stack أو Linked List أو Queue، وهي عادة أول ما يتم تعلمه في هياكل البيانات data structures. بالتوفيق