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

Ahmed Sadek Elamine Touahria

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

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

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

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

    5

كل منشورات العضو Ahmed Sadek Elamine Touahria

  1. تتحكم خاصية CSS overflow في ما يحدث للمحتوى الأكبر من أن يتناسب مع منطقة. تحدد خاصية overflow ما إذا كان سيتم قص المحتوى أو إضافة أشرطة التمرير عندما يكون محتوى العنصر كبيرًا جدًا بحيث لا يتناسب مع المنطقة المحددة. الخاصية overflow لها القيم التالية: visible - افتراضي. لا يتم قص الفائض. يتم عرض المحتوى خارج مربع العنصر hidden - يتم قص الفائض ، ويصبح باقي المحتوى غير مرئي scroll - يتم قص الفائض ، ويتم إضافة شريط تمرير لرؤية بقية المحتوى auto - مشابه للتمرير ، لكنه يضيف أشرطة التمرير عند الضرورة فقط للمزيد من المعلومات تفحص هذا الرابط https://wiki.hsoub.com/CSS/overflow-x#hidden
  2. في مشروع django تختلف أوضاع exception حسب وضع DEBUG ، فإذا كان في الوضع True في الغالب أنك في التطوير لذلك قد يكون إقتناص الأخطاء أمر سهل وسلس ولكن في نفس الوقت قد يتم تجاهل الخطأ حسب request أما عندما يكون DEBUG في الوضع False فهذا في الأرجح أنك في وضع الإنتاج وهنا يتم التعامل مع جميع errors exceptions حتى وإن كانت data التي أرسلتها سليمة . لذلك قم بالتعامل مع جميع exceptions الممكنة .
  3. Fetch هي واجهة برمجة تطبيقات لطلب Ajax حديثة مستندة إلى Promise ظهرت لأول مرة في عام 2015 وهي مدعومة في معظم المتصفحات. لم يتم بناؤه على XMLHttpRequest ويوفر تناسقًا أفضل مع بناء جملة أكثر إيجازًا. تعمل سلسلة Promise التالية بشكل مماثل : fetch("/url", { method: "GET" }) .then((res) => res.json()) .then((json) => console.log(json)) .catch((err) => console.error("error:", err)); أو يمكنك استخدام ascync / await : try { const res = await fetch("/url", { method: "GET" }), // انتظار الرد من سيرفر json = await res.json(); console.log(json); } catch (err) { console.error("error:", err); } AJAX هو الإسم المألوف لـ "JavaScript و XML غير المتزامنة" ، على الرغم من أن المطورين لم يحتاجوا إلى استخدام أساليب غير متزامنة أو JavaScript أو XML. نستخدم الآن المصطلح العام "Ajax" لأي عملية من جانب العميل تجلب البيانات من الخادم وتقوم بتحديث DOM دون الحاجة إلى تحديث صفحة كاملة. يتم دعم XMLHttpRequest من قبل جميع المتصفحات الرئيسية وأصبح معيارًا رسميًا للويب في عام 2006. مثال بسيط يجلب البيانات من نطاقك / الخدمة / نقطة النهاية ويعرض نتيجة JSON في وحدة التحكم كنص: const xhr = new XMLHttpRequest(); xhr.open("GET", "/service"); // عند تغير الحالة xhr.onreadystatechange = () => { // هل الإستعلام إكتمل ؟ if (xhr.readyState !== 4) return; if (xhr.status === 200) { // إكتمل بنجاح console.log(JSON.parse(xhr.responseText)); } else { // حدوث خطأ console.log("HTTP error", xhr.status, xhr.statusText); } }; // إرسال xhr.send(); أهم مميزات fetch : التحكم في cach التحكم في cors التحكم في Credential التحكم في redirect Data Streams الدعم الكلي لجانب الخادم أهم مميزات XHR: تدعم Timeout دعم Abort : يمكن إلغاء طلب أثناء الرحلة عن طريق تشغيل أسلوب إحباط XMLHttpRequest (). يمكن إرفاق معالج إحباط إذا لزم الأمر تدعم جميع المتصفحات وهذه مقالة على ajax
  4. توجد مكتبة صغيرة اسمها Constance تقوم ب: بترحيل إعداداتك الثابتة بسهولة إلى الإعدادات الديناميكية. بتحرير الإعدادات الديناميكية في واجهة إدارة Django. تعد الواجهة الخلفية لقاعدة البيانات اختيارية وتخزن قيم التكوين في نموذج Django القياسي. يتطلب الحزمة django-picklefield لتخزين تلك القيم. تثبيته على هذا النحو: pip install django-constance[database] وفي ملف settings CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend' INSTALLED_APPS = ( # .... 'constance.backends.database', ) ثم قم بترحيل قاعدة البيانات : python manage.py migrate database
  5. لذلك خبراء البرمجة ينصحون دائما باستعمال البيئة الإفتراضية ، البيئة الإفتراضية هي عبارة عن بيئة مثبتة في النظام تتيح لك انشاء بيئات متكاملة للمشاريع التي تعتمد على الحزم والمكتبات لتصطيب المكتبة باستعمال مدير الحزم بلغة بايثون : pip install virtualenv بعد تثبيتها ، تذهب الى مجلد المشروع وتقوم بإنشاء بيئة افتراضية بالأمر التالي : virtualenv <env_name> ثم بعد ذلك يتم تفعيلها بالأمر التالي : "اذا كان نظام التشغيل لينيكس" source <env_name>/bin/activate "اذا كان ويندوز" <env_name>\Scripts\activate
  6. العامل and هو تمثيل بديل للمشغل && (ثنائي أو منطقي AND). إذا كان كلا المعاملين لهما قيمة true ، فإن النتيجة لها القيمة true. خلاف ذلك ، فإن النتيجة لها قيمة خطأ. يتم تحويل كلا المعاملين بشكل ضمني إلى منطقي ونوع النتيجة منطقي. على عكس عامل التشغيل & (bitwise AND) ، يضمن العامل && تقييم المعاملات من اليسار إلى اليمين. إذا تم تقييم المعامل الأيسر إلى 0 (أو خطأ) ، فلن يتم تقييم المعامل الأيمن. دائرة قصيرة لكل من عامل التشغيل و and && (أي ، لا تقيم المعامل الثاني إذا كان المعامل الأول خطأ). وبالتالي ، يعد اختبار المؤشر الفارغ أمرًا صالحًا وآمنًا ، كما في المثال التالي: bool test( int * p ) { return (p != 0) and (*p > 5); } كجزء من معيار C ++ 11 الجديد ، يدعم C ++ Builder الآن مراجع rvalue. يتم تكوين مرجع rvalue عن طريق وضع && (ولكن ليس and) بعد نوع في التصريح ، على النحو التالي: Apt a; Apt&& a_ref1 = a; يتمثل الاختلاف الرئيسي بين مرجع lvalue المألوف ومرجع rvalue الجديد في أن مراجع rvalue يمكن أن ترتبط بمرجع مؤقت (أي ، rvalue) ، لكن مرجع lvalue (واحد على الأقل ليس ثابتًا) لا يمكن أن يرتبط بـ rvalue.
  7. تخصيص فئة ترقيم الصفحات او custom pagination لإنشاء فئة ترقيم صفحات مخصصة ، يجب ان يكون لديك ninja.pagination.PaginationBase وعمل override لفئات مخطط Input و Output ودالة paginate_queryset (self ، queryset ، request ، ** params): مخطط الإدخال (Input) هو class مخطط يصف المعلمات التي يجب تمريرها إلى الفاصل الزمني الخاص بك (على سبيل المثال ، رقم الصفحة أو قيم الحد / الإزاحة). يصف مخطط الإخراج مخططًا لإخراج الصفحة (على سبيل المثال العد / الصفحة التالية / العناصر / إلخ). يتم تمرير paginate_queryset إلى مجموعة الاستعلام الأولية ويجب أن يُرجع كائنًا قابلًا للتكرار يحتوي فقط على البيانات الموجودة في الصفحة المطلوبة. تقبل هذه الطريقة الوسيطات التالية: queryset: مجموعة استعلام (أو قابلة للتكرار) تُرجعها وظيفة api pagination : ترقيم الصفحات ** params: kwargs التي ستحتوي على جميع الوسائط التي تلقتها الوظيفة مثال: # نعمل استيراد للمكتبات والفئات from ninja.pagination import paginate, PaginationBase from ninja import Schema # فئة التخصيص class CustomPagination(PaginationBase): # نعمل تجاوز لفئة الإدخال class Input(Schema): skip: int class Output(Schema): items: List[Any] # `items` فئة افتراضية total: int per_page: int def paginate_queryset(self, queryset, pagination: Input, **params): skip = pagination.skip return { 'items': queryset[skip : skip + 5], 'total': queryset.count(), 'per_page': 5, } # وهنا نقطة النهاية الخاصة بك @api.get('/users', response=List[UserSchema]) # وهذا هو المزخرف الذي عملنا له تخصيص @paginate(CustomPagination) def list_users(request): return User.objects.all()
  8. يوفر اطار العمل drf هذه الخاصية ولتجاوز الإعدادات الافتراضية ، يوفر مجموعة من الزخارف الإضافية التي يمكن إضافتها إلى endpoints الخاصة بك. يجب أن تأتي هذه بعد (أدنى) api_view. على سبيل المثال ، لإنشاء view يستخدم الخانق throttle للتأكد من أنه لا يمكن استدعاءه إلا مرة واحدة يوميًا من قبل مستخدم معين ، استخدمthrottle_classes decorator ، وقم بتمرير قائمة بفئات الخانق: # نستورد المكتبات المهمة from rest_framework.decorators import api_view, throttle_classes from rest_framework.throttling import UserRateThrottle class OncePerDayUserThrottle(UserRateThrottle): rate = '1/day' # هنا عدد الاستعلامات في اليوم @api_view(['GET']) @throttle_classes([OncePerDayUserThrottle]) # ثم نمررها من هنا كمزخرف def view(request): return Response({"message": "انتهت صلاحيت اليوم نراك غدا"})
  9. لا يمكننا استخدام set كمفتاح في قاموس أو كعنصر في مجموعة أخرى لأن الكائنات المحددة قابلة للتغيير وغير قابلة للتجزئة. تتمثل إحدى طرق حل الخطأ في استخدام مجموعة التجميد. سأستخدم مثال من عندي بالإضافة الى المثال الذي شرحه الأخ حسان لتتضح لك الصورة : my_set = {'hsoub', 'mostaql'} # باستخدام مجموعة كعنصر في مجموعة أخرى # يظهر لنا هذا المشكل # TypeError: unhashable type: 'set' another_set = {'ana', 'academy', my_set} # باستخدام مجموعة كمفتاح في القاموس # يظهر لنا هذا المشكل # TypeError: unhashable type: 'set' my_dict = {my_set: 'hsoub'} تتمثل إحدى طرق حل الخطأ في استخدام مجموعة التجميد "frozenset" my_set = frozenset({'hsoub', 'mostaql'}) another_set = {'ana', 'academy', my_set} print(another_set) # => {'academy', frozenset({'mostaql', 'hsoub'}), 'ana'} # التحقق مما إذا كان العنصر في المجموعة print(frozenset({'mostaql', 'hsoub'}) in another_set) # => True # --------------------------------------------------------------- my_dict = {my_set: 'khamsat'} print(my_dict) # => {'academy', frozenset({'ana', 'academy'}), 'mostaql'} # الوصول إلى المفتاح في القاموس print(my_dict[frozenset({'hsoub', 'mostaql'})]) # 👉️ khamsat مجموعة frozenset هي نسخة غير قابلة للتغيير من كائن مجموعة Python ، لذا يمكن استخدامها كمفتاح في قاموس أو عنصر في مجموعة أخرى.
  10. هذا الخطأ معناه أن السكريبت لم يتعرف على العنصر والذي أشرت اليه ب this ، بحيث منطقيا لا يمكننا أن نتلاعب بعنصر غير موجود . لذلك عليك أن تمرر قيمة كوسيط للدالة : const btn1 = document.querySelector(".btn1") btn1.addEventListener('click', (e)=>{ test(e) }) const test = (e) => { // نأخذ العنصر كـ target target = e.target; return target.style.display='none' }
  11. في ملف settings هناك 3 عوامل مهمة جدا التي يجب ضبطها قبل الرفع : الدومينات المسموحة أو ALLOWED_HOSTS DEBUG SECRET_KEY # وضع التطوير دائما false DEBUG = False # الكود السري SECRET_KEY = os.environ['SECRET_KEY'] # قم بتعبئة الجدول بالدومينات المسموحة فقط ALLOWED_HOSTS = ['0.0.0.0', 'localhost'] ملاحظة : os.environ معناه ان القيمة مدخرة في متغيرات النظام ثم بالإضافة الى اعدادات قاعدة البيانات ، بحيث لا ينصح بsqlite عند وضع production لذلك انت بحاجة الى ضبطها من أهم SGDB المدعومة في django هي postegreSQL : DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': ‘<db_name>’, 'USER': '<db_username>', 'PASSWORD': '<password>', 'HOST': '<db_hostname_or_ip>', 'PORT': '<db_port>', } }
  12. قد يكون سبب المشكلة هو عدم وجود أذونات او صلاحيات . تحقق من الصلاحيات في home/user و home/user/your_project. لكن ، أعتقد أنه سيكون من الأفضل لك (أسهل مع فرص أقل للتأثيرات الجانبية) عن طريق نقل STATIC_ROOT إلى / var/www/html/static إذا كنت بحاجة إلى مزيد من التفاصيل ، فتحقق من سجلات nginx - لا تعتمد فقط على مخرجات وحدة التحكم. يمكنك أيضًا تشغيل nginx بتسجيل أكثر تفصيلاً. اذا كنت تريد التحقق من الصلاحيات والأذونات اتبع الأمر التالي sudo chmod 777 /home/username/projectdir/staticfiles هنا قد قمنا بإمداد صلاحية المجلد لكل المستخدمين
  13. سيساعدك علم النفس وراء الألوان في التصميم على اكتشاف لوحة الألوان المثالية لموقع محفظتك. ضع في اعتبارك أن تصميم موقع الويب الخاص بالسيرة الذاتية نفسها هو المساعدة في عرض عملك ، واختيار الألوان بحيث تتلاشى في الخلفية وتقديم عملك هو المفتاح. غالبًا ما تعمل مواقع السيرة الذاتية او portfolio بشكل أفضل عندما يتم عرض العمل على خلفية بيضاء أو رمادية فاتحة أو رمادية داكنة أو سوداء. يؤدي استخدام الألوان الزاهية إلى تشتيت انتباه المشاهدين عن رؤية عملك ، لذلك احتفظ بأية ألوان زاهية في مناطق محددة مثل العناوين. تلتزم العديد من مواقع السيرة الذاتية بأنظمة الألوان المحايدة لأنها الخلفية الأكثر نظافة وفعالية لأي نوع من الأعمال التي تريد عرضها. تأكد من أن الألوان التي تختارها تتناقض بشكل جيد مع عملك. إذا كان لون عملك ساطعًا جدًا ، فيجب أن يحتوي موقعك على ألوان صامتة. إذا كان عملك صامتًا للغاية ، فإن استخدام الألوان الزاهية المحددة سيساعد في جذب الانتباه إلى عملك. إذا كنت تستخدم نظام ألوان مشابهًا لموقعك كما تفعل في عملك ، فسيؤدي ذلك إلى منافسة بصرية بين عملك والموقع نفسه ، وغالبًا ما يكون هذا أمرًا مزعجًا جدًا للزوار.
  14. يمكننا استغلال قوة web api المدمجة في لغة الجافاسكريبت مثل تأثيرات السحب والإفلات وغيرها قم بسحب وإسقاط ملف تحميل HTML CSS <div class="upload-container"> <input type="file" id="file_upload" /> </div> <br> <button class="upload-btn" onclick="uploadFiles()">حفظ</button> هنا حددنا منطقة حاوية تحميل لإسقاط ملفات التحميل. يتم تعريف عنصر <input> في HTML بنوع السمة = "file" لاستيعاب ملف التحميل. يتم تعريف عنصر <button> في HTML لإرسال ملفات التحميل. وهنا بعض التنسيقات بلغة css .upload-container { position: relative; } .upload-container input { border: 1px solid #92b0b3; background: #f1f1f1; outline: 2px dashed #92b0b3; outline-offset: -10px; padding: 100px 0px 100px 250px; text-align: center !important; width: 500px; } .upload-container input:hover { background: #ddd; } .upload-container:before { position: absolute; bottom: 50px; left: 245px; content: " (or) Drag and Drop files here. "; color: #3f8188; font-weight: 900; } .upload-btn { margin-left: 300px; padding: 7px 20px; } سحب وإسقاط ملف التحميل بالجافاسكريبت الآن سوف نستخدم كود Javascript لقراءة الملفات المرفوعة وإرسالها للتحميل. function uploadFiles() { // نحدد طول الملفات المختارة لنعمل عليها تست بسيط var files = document.getElementById('file_upload').files; if(files.length==0){ alert("يرجى تحديد الملفات..."); return; } var filenames=""; for(var i=0;i<files.length;i++){ filenames+=files[i].name+"\n"; } alert("الملفات المختارة:\n____________________\n"+filenames); }
  15. يوفر MarkupSafe سلوك Jinja التلقائي. يمكنك استيراد Markup واستخدامها لإعلان قيمة HTML safe : from markupsafe import Markup value = Markup('<strong>Hsoub Academy</strong>') مرر ذلك إلى القوالب ولن تضطر إلى استخدام | عامل التصفية safe .
  16. يوجد أحداث مدمجة في الجافاسكريبت خاصة بالسحب "dragEvent" يتم تشغيل حدث السحب كل بضع مئات من المللي ثانية حيث يتم سحب عنصر أو تحديد نص بواسطة المستخدم. addEventListener('drag', (event) => {}); ondrag = (event) => { }; مثال : html <div class="dropzone"> <div id="draggable" draggable="true"> القسم المراد سحبه </div> </div> <div class="dropzone" id="droptarget"></div> css body { / * منع المستخدم من تحديد النص في المثال * / user-select: none; } #draggable { text-align: center; background: white; } .dropzone { width: 200px; height: 20px; background: blueviolet; margin: 10px; padding: 10px; } .dropzone.dragover { background-color: purple; } .dragging { opacity: .5; } javascript let dragged; /* تم إطلاق الأحداث على الهدف القابل للسحب */ const source = document.getElementById("draggable"); source.addEventListener("drag", (event) => { console.log("dragging"); }); source.addEventListener("dragstart", (event) => { // تخزين المرجع. على العنصر المسحوب dragged = event.target; // نجعلها نصف شفافة event.target.classList.add("dragging"); }); source.addEventListener("dragend", (event) => { //إعادة تعيين الشفافية event.target.classList.remove("dragging"); }); /* تم إطلاق الأحداث على الإسقاط */ const target = document.getElementById("droptarget"); target.addEventListener("dragover", (event) => { // prevent default للسماح بالإسقاط event.preventDefault(); }, false); target.addEventListener("dragenter", (event) => { // قم بتمييز هدف الإسقاط المحتمل عند دخول العنصر القابل للسحب إليه if (event.target.classList.contains("dropzone")) { event.target.classList.add("dragover"); } }); target.addEventListener("dragleave", (event) => { // إعادة تعيين خلفية هدف الإسقاط المحتمل عندما يتركه العنصر القابل للسحب if (event.target.classList.contains("dropzone")) { event.target.classList.remove("dragover"); } }); target.addEventListener("drop", (event) => { // prevent default (فتح كارتباط لبعض العناصر) event.preventDefault(); //نقل العنصر المسحوب إلى هدف الإسقاط المحدد if (event.target.classList.contains("dropzone")) { event.target.classList.remove("dragover"); dragged.parentNode.removeChild(dragged); event.target.appendChild(dragged); } });
  17. اليك الطريقة ولكن لا تعمل على جميع المتصفحات : <form id="addnew"> <input type="text" class="id"> <input type="text" class="content"> <input type="submit" value="Add"> </form> <script> // نستعمل مكنبة جكويري لتسهيل العملية jQuery(function($) { // نعمل استماع لحدث submit $('#form_addjts').submit(function(){ //نستدعي الدالة writeToFile writeToFile({ id: $(this).find('.id').val(), content: $(this).find('.content').val() }); return false; }); // نكتب الدالة writeToFile function writeToFile(data){ // عمل object // من ActiveXObject var fso = new ActiveXObject("Scripting.FileSystemObject"); // ثم عملية الكتابة var fh = fso.OpenTextFile("D:\\data.txt", 8); fh.WriteLine(data.id + ',' + data.content); fh.Close(); } }); </script>
  18. لحساب عدد الأيام بين تاريخين في JavaScript نستخدام كائن التاريخ لأي نوع من الحسابات. لذلك ، أولاً ، احصل على قيمة المللي ثانية الداخلية للتاريخ باستخدام دالة JavaScript getTime () . بمجرد أن يتم تحويل كلا التاريخين ، تابع بطرح التاريخ الأحدث من التاريخ السابق والذي بدوره يُرجع الفرق بالمللي ثانية. لاحقًا ، يمكن حساب النتيجة النهائية بقسمة الفرق (الذي يكون بالملي ثانية) في كلا التاريخين على عدد المللي ثانية في يوم واحد. <script type = "text/javascript" > // تعريف تاريخين var date1 = new Date("09/07/2022"); var date2 = new Date("09/17/2022"); // نحسب الفارق بالميليثانية var Difference_In_Time = date2.getTime() - date1.getTime(); // ثم نحولها الى أيام او ساعات ... var Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24); </script>
  19. إليك حل يفي بالغرض باستخدام التعبيرات النمطية أو بما يسمى regular expression : import re rep = {"condition1": "", "condition2": "text"} # ننشأ قاموس لتعريف المتغيرات # ثم نطبق الفكرة rep = dict((re.escape(k), v) for k, v in rep.iteritems()) # ثم نجمع القيم pattern = re.compile("|".join(rep.keys())) # بعد ذلك نحولها لنص text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text) وهناك حل بسيط : def replace_all(text, dic): for i, j in dic.items(): text = text.replace(i, j) return text text : هو النص الذي تعمل عليه ويكون من نوع string dic : قاموس يحتوي على key , value بحيث key هي القيمة المراد تبديلها و value هي القيمة الجديدة
  20. لحفظ الكائنات في ملف في Python ، نتبع عادةً الخطوات التالية: استيراد الحزمة pickle module انشئ الملف في وضع الكتابة يشير إلى مسار المجلد استخدم pickle.dump لكتابة الكائن الذي نريد حفظه في ملف عبر file handle. # الخطوة الاولى استيراد الحزمة import pickle config_dictionary = {'remote_hostname': 'google.com', 'remote_port': 80} # الخطوة الثانية جلب الملف وضبطه على الكتابة with open('config.dictionary', 'wb') as config_dictionary_file: # الخطوة الثالثة :الكتابة والحفظ pickle.dump(config_dictionary, config_dictionary_file)
  21. هناك العديد من الطرق من أفضلها رفع الموقع على مستودع github . واليك الطريقة : قم بتنزيل git على النظام انشأ حساب على github رفع مشروعك على حسابك في github واليك الطريقة لرفعه على github أنشئ مستودع للمشروع من خلال حسابك على github قم بفتح موجه الأوامر cmd او terminal في مجلد المشروع ثم قم بكتابة هذه التعليمات git init معناه اننا قمنا بعمل تهيئة للمستودع git add . ثم قمنا باضافة جميع الملفات الى المستودع المحلي git commit -m "adding files" ثم عملنا commit وأضفنا اليها رسالة او تعليقحتى الآن ، الخطوات المذكورة أعلاه هي ما ستفعله حتى لو لم تكن تستخدم GitHub. إنها الخطوات العادية لبدء مستودع Git. تذكر أن Git موزع (لامركزي) ، مما يعني أنك لست بحاجة إلى أن يكون لديك "خادم مركزي" (أو حتى اتصال شبكة) ، لاستخدام Git. الآن تريد رفع التغييرات إلى مستودع Git المستضاف مع GitHub. يمكنك القيام بذلك عن طريق إخبار Git بإضافة remote ، ويمكنك القيام بذلك باستخدام هذا الأمر : git remote add origin https://github.com/yourusername/your-repo-name.git بمجرد القيام بذلك ، تعرف Git الآن عن مستودعك . يمكنك بعد ذلك إخباره بpush (وهو "تحميل") ملفاتك الملتزمة: git push -u origin master
  22. هناك طرق عديدة لتحديد عدد الأرقام بعد الفاصلة في لغة c++ : باستعمال دالة ()round : هناك العديد من الخيارات لتقييد النقطة العائمة بمنزلتين عشريتين ، اعتمادًا على ما إذا كنت ترغب في تقريب الرقم إلى أقرب ، أو تقريبه لأسفل ، أو تقريبه لأعلى. على سبيل المثال ، يقوم الكود التالي بتقريب الفاصلة إلى منزلتين عشريتين. #include <iostream> #include <cmath> int main() { float f = 10.517986; float value = round(f * 100) / 100; std::cout << value << std::endl; // 10.52 return 0; } لتقريب رقم من نوع double إلى منزلتين عشريتين ، يمكنك استخدام دالة std :: ceil على النحو التالي: #include <iostream> #include <cmath> int main() { float f = 10.517986; float value = floor(f * 100) / 100; std::cout << value << std::endl; // 10.51 return 0; } باستعمال دالة std::ios_base::precision لتعيين المنزلة العشرية لقيمة الفاصلة floating-point. يمكنك استخدام std :: ostringstream مع محدد الدقة مثل std :: cout. #include <iostream> #include <sstream> // كتابة دالة لتسهيل عملية التحديد std::string format(float f, int digits) { // نستعمل الدالة ostringstream std::ostringstream ss; ss.precision(digits); ss << f; return ss.str(); } int main() { float f = 10.517986; int digits = 4; //نستدعي الدالة std::string value = format(f, digits); std::cout << value << std::endl; // 10.52 return 0; }
  23. إذا كنت تريد جميع العناصر الموجودة داخل body ، وليس فقط العناصر الفرعية من المستوى الأول ، فيمكنك ببساطة استخدام getElementsByTagName : var elems = document.body.getElementsByTagName("*"); أو عبر querySelectorAll var elements = document.querySelectorAll('*');
  24. في الحقيقة هناك الكثير من الطرق لاستدعاء ملف csv عن طريق مكتبة numpy باستعمال دالة loadtext : لاستيراد البيانات من ملف نصي ، سنستخدم طريقة NumPy loadtxt (). لاستخدام هذه الدالة ، نحتاج إلى التأكد من أن عدد الإدخالات في كل سطر من المستند النصي يجب أن يكون متساويًا. في Python ، يتم استخدام numpy.load () لتحميل البيانات من ملف نصي ، بهدف القراءة السريعة للملفات النصية الأساسية. تعريف الدالة numpy.loadtxt('data.csv') مثال: تحميل ملف csv من طريقة loadtxt import numpy as np # باستعمال loadtxt() arr = np.loadtxt("academy_hsoub.csv",delimiter=",", dtype=str) print(arr) باستعمال دالة genfromtxt : تُستخدم دالة genfromtxt () لاستيراد البيانات من مستند نصي. يمكننا تحديد كيفية التعامل مع القيم المفقودة في مجموعة البيانات الخاصة بنا في حالة وجودها. التعريف او syntax : numpy.genfromtxt('data.csv') مثال : import numpy as np # باستعمال genfromtxt() arr = np.genfromtxt("academy_hsoub.csv",delimiter=",", dtype=str) print(arr)
  25. هذه المشكلة مشهورة في أنظمة التشغيل المبنية على لينيكس وحلها كالأتي : فقط قم بكتابة "sudo" قبل أي أمر ، مثال : nano /etc/nginx/sites-enables/ الإخراج nano /etc/nginx/sites-enables/ : permission denied وبعد كتابة الأمر sudo : sudo nano /etc/nginx/sites-enables/ الأمر ينجح معنا ويقوم بإضهار الملف
×
×
  • أضف...