-
المساهمات
6234 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
95
إجابات الأسئلة
-
إجابة محمد أبو عواد سؤال في إضافة التاريخ والوقت إلى log في node.js كانت الإجابة المقبولة
لفعل ذلك تحتاج تثبيت بعض الوحدات مثل console-stamp و log-timestamp, يمكنك تثبيت الوحدة console-stamp من خلال الأمر التالي
npm install console-stamp --save ثم تحتاج لإضافة السطر التالي في أعلى الملف app.js
require('console-stamp')(console, '[HH:MM:ss.l]'); سوف يظهر تنسيق الوقت بتنسيق UTC ولكن تستطيع تغييره كالتالي
express.logger.format('mydate', function() { var df = require('console-stamp/node_modules/dateformat'); return df(new Date(), 'HH:MM:ss.l'); }); app.use(express.logger('[:mydate] :method :url :status :res[content-length] - :remote-addr - :response-time ms')); بعد ذلك سوف يظهر الوقت بجانب كل عملية طباعة, بالنسبة للوحدة log-timestamp تستطيع تثبيتها من خلال الامر التالي
npm install log-timestamp ويمكنك استخدامها بشكل مباشر
-
إجابة محمد أبو عواد سؤال في الحصول على المتغيرات المرسلة بالطلب GET في node.js كانت الإجابة المقبولة
نعم في Express ،يمكنك فعل ذلك ببساطة باستخدام req كالتالي
var param = req.query.param; أما في NodeJS ، يمكنك الوصول إلى المتغيرات باستخدام وحدة url كالتالي
var url = require('url'); var params = url.parse(request.url, true); var query = params.query; باستخدام التابع parse الموجود في الوحدة url تستطيع الحصول على جميع المتغيرات
-
إجابة محمد أبو عواد سؤال في خطأ NumPy array is not JSON serializable في numpy كانت الإجابة المقبولة
يجب أن تقوم بتحويل المصفوفة الى تنسيق JSON , يمكنك فعل ذلك كالتالي
class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.ndarray): return obj.tolist() return json.JSONEncoder.default(self, obj) a = np.array([[1, 2, 3], [4, 5, 6]]) print(a.shape) json_dump = json.dumps({'a': a, 'aa': [2, (2, 3, 4), a], 'bb': [2]}, cls=NumpyEncoder) print(json_dump) وسوف يكون الناتج كالآتي
(2, 3) {"a": [[1, 2, 3], [4, 5, 6]], "aa": [2, [2, 3, 4], [[1, 2, 3], [4, 5, 6]]], "bb": [2]} لاستعادتها الى شكل مصفوفة يمكنك استخدام الكود التالي
json_load = json.loads(json_dump) a_restored = np.asarray(json_load["a"]) print(a_restored) print(a_restored.shape) سوف يكون شكل الناتج هكذا
[[1 2 3] [4 5 6]] (2, 3)
-
إجابة محمد أبو عواد سؤال في كيفية فتح الرابط في صفحة جديدة في html كانت الإجابة المقبولة
هناك خاصية في العنصر a تدعى target نحدد من خلالها أين يتم فتح صفحة الرابط, تأخذ الخاصية target 4 قيم ولكل قيمة تصرف مختلف عن الأخرى
_blank: يتم فتح الرابط في صفحة جديدة _self: يتم فتح الرابط في نفس الصفحة وهي القيمة الافتراضية للعنصر a, يوجد أيضا قيمتان لها نفس التأثير وهما _parent و _top, لاحظ الكود التالي <a href="https://www.google.ps/?gws_rd=cr&ei=wzKXWKf3EoOTaez2tJgL">google</a> الكود الذي في الأعلى عبارة عن عنصر a والرابط الذي بداخل الخاصية href هو الرابط الخاص بموقع جوجل, اذا حاولت الضغط عليه سوف يتم فتح جوجل في نفس الصفحة , لاحظ الكود التالي
<a href="https://www.google.ps/?gws_rd=cr&ei=wzKXWKf3EoOTaez2tJgL" target="_blank">google</a> كما تلاحظ لقد قمت بتحديد الخاصية target على أنها _blank , لو حاولت فتح الرابط سوف يتم فتحه في نافذة جديدة
-
إجابة محمد أبو عواد سؤال في كيف تعمل einsum في مكتبة numpy؟ كانت الإجابة المقبولة
بداية لنشرح ماذا يفعل einsum؟ تخيل أن لدينا مصفوفتين متعددتي الأبعاد ،A و B,من الممكن ضرب A مع B بطريقة معينة لإنشاء مجموعة جديدة من العناصر, ومن ثم ربما تلخيص هذه المجموعة الجديدة على طول محاور معينة , ثم ربما بدل محاور المصفوفة الجديدة بترتيب معين. يمكننا في هذه الحالات استخدام einsum فهو يساعدنا على القيام بذلك بشكل أسرع وأكثر كفاءة في الذاكرة وأفضل مما تسمح به مجموعات وظائف NumPy مثل الضرب والجمع والتبديل , الىنكيف يعمل einsum؟
تخيل لدينا هذه المصفوفتين
A = np.array([0, 1, 2]) B = np.array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) سنضرب A و B من ناحية العناصر ثم نجمعها على طول صفوف المصفوفة الجديدة. في NumPy وبدون استخدام einsum نستخدم الطريقة التالية
(A[:, np.newaxis] * B).sum(axis=1) //output array([ 0, 22, 76]) هنا ، تبدأ عملية الفهرسة على المحاور الأولى من المصفوفتين بحيث يمكن بدأ عملية الضرب. يتم بعد ذلك تبدأ عملية جمع الصفوف , الآن إذا أردنا استخدام einsum بدلا من ذلك ، فيمكننا كتابة
np.einsum('i,ij->i', A, B) //output array([ 0, 22, 76]) سلسلة الحروف 'i، ij-> i' هي المفتاح هنا وتحتاج إلى القليل من الشرح. يمكنك التفكير في الأمر على انه نصفين. على الجانب الأيسر (يسار <-) قمنا بتسمية مصفوفتي الإدخال. إلى يمين -> ، قمنا بتسمية المصفوفة الناتجة, يحتوي A على محور واحد , لقد أطلقنا عليه اسم i , و B لها محورين , قمنا بتسمية المحور 0 على أنه i والمحور 1 على أنه j , بتكرار تسمية i في كلا مصفوفتي الإدخال ، فإننا نخبر einsum أنه يجب ضرب هذين المحورين معا. بعبارة أخرى ، نقوم بضرب المصفوفة A في كل عمود من المصفوفة B ، تماما مثل
A [:، np.newaxis] * B لاحظ أن j لا تظهر في اسم المصفوفة الناتجة , لقد استخدمنا i أي أننا نريد أن ينتهي بنا الأمر بمصفوفة 1D. بحذف التسمية ، فإننا نخبر einsum بالجمع على طول هذا المحور. بعبارة أخرى ، نحن نجمع صفوف المصفوفات، تماما كما يفعل
.sum(axis=1) إذا تركنا كلتا التسميتين في الإخراج ، "i، ij-> ij" ، فإننا نستعيد مصفوفة ثنائية الأبعاد من العناصر مثل
A [:، np.newaxis] * B إذا قلنا لا توجد تسميات إخراج ، 'i، ij-> ، فسنسترجع رقمًا واحدا مثل
(A [:، np.newaxis] * B) .sum ()) لكن الشيء الجيد في einsum هو أنه لا يقوم ببناء مصفوفة مؤقتة من العناصر , إنها تجمع العناصر كما هي. هذا يمكن أن يؤدي إلى توفير كبير في استخدام الذاكرة, لشرح حاصل الضرب النقطي ،تخيل المصفوفتنا التاليتان
A = array([[1, 1, 1], [2, 2, 2], [5, 5, 5]]) B = array([[0, 1, 0], [1, 1, 0], [1, 1, 1]]) سنحسب الضرب النقطي باستخدام
np.einsum ('ij، jk-> ik'، A، B). إليك صورة توضح وضع العلامات على A و B ومصفوفة الإخراج التي نحصل عليها
يمكنك أن ترى أن التسمية j مكررة وهذا يعني أننا نضرب صفوف A في أعمدة B. وأيضا التسمية j غير مضمنة في الإخراج , نحن نجمع هذه العناصر. يتم الاحتفاظ بالتسميات i و k للإخراج ، لذلك نعود إلى مصفوفة ثنائية الأبعاد, لو استخدمنا j في التسمية كالتالي
np.einsum('ij,jk->ijk', A, B) سوف تكون النتيجة كالتالي
-
إجابة محمد أبو عواد سؤال في ما الفرق بين GitHub - GitLab كانت الإجابة المقبولة
تعد خدمات إدارة المستودعات للتحكم في الإصدار مكون رئيسي في سير عمل تطوير البرامج ، وضع GitHub و GitLab نفسيهما كمساعدين مفيدين للمطورين ، خاصة عند العمل في فرق كبيرة, وللحديث عن الاختلافات والتشابهات بين GitLab و GitHub ، نحتاج إلى النظر إلى ما وراء مستودعات الكود وإلقاء نظرة على العملية بأكملها, كلا من GitLab و GitHub عبارة عن مستودعات Git على شبكة الإنترنت
ما هو مستودع Git؟ الهدف من Git هو إدارة مشاريع تطوير البرمجيات وملفاتها ، لأنها تتغير بمرور الوقت. يخزن Git هذه المعلومات في بنية بيانات تسمى المستودع, حيث يعتبر المستودع مكان مركزي يقوم المطورون بتخزين مشروعات الويب ومشاركتها واختبارها والتعاون فيها, أما بالنسبة للاختلافات الرئيسية وأوجه التشابه بين GitLab و GitHub, باستخدام GitLab ، يمكنك تعيين أذونات الأشخاص وتعديلها وفقا لأدوارهم. أما في GitHub ، يمكنك تحديد ما إذا كان شخص ما سيحصل على حق الوصول للقراءة أو الكتابة إلى المستودع, يوفر GitLab ، بالإضافة إلى GitHub ، أداة تعقب بسيطة للمشكلات تتيح لك تغيير الحالة والمسؤول عن مشكلات متعددة في نفس الوقت. أيضا عندما يتعلق الأمر بتصدير البيانات ، يبدو أن GitLab يقوم بعمل قوي جدا ، حيث يوفر لك القدرة على تصدير مشاريعك بالإضافة الى المزيد من البيانات عن المشروع، أما بالنسبة ل GitHub فهو أكثر تقييدا عندما يتعلق الأمر بميزات التصدير لمستودعات GitHub الحالية, بناء على هذه التشابهات والاختلافات يمكنك اختيار أحدهما, ولكن أنصحك ب GitHub لأنه لديه مجتمع كبير جدا وبالتالي من السهل حل المشاكل التي ربما تواجهك
-
إجابة محمد أبو عواد سؤال في تمرير المتغيرات بين الوسطاء middleware في node.js كانت الإجابة المقبولة
يمكنك استخدام التابعين req, res لهذا الشيء, يتم استخدامهم كالتالي
const express = require("express"); const app = express(); function middleware1(req, res, next) { req.data1 = "Data1"; next(); } function middleware2(req, res, next) { console.log("Data2."); console.log(req.data1);//هنا تم الحصول على البيانات من الوسيط الأول وطباعتها next(); } app.get("/clients", [middleware1, middleware2], (req, res) => { return res.send(req.data1); });
-
إجابة محمد أبو عواد سؤال في ماهو struct في c++ كانت الإجابة المقبولة
struct عبارة عن بنية بيانات,في C ++ , يمكن استخدامها لتخزين عناصر من أنواع بيانات مختلفة معا, لإنشاء struct في C ++ ، نستخدم الكلمة الأساسية struct ، متبوعة باسم المعرف, كما هو واضح في المثال الآتي
struct struct_name { } تتم إضافة متغيرات struct داخل الأقواس المتعرجة. ربما يكون كل متغير من نوع مختلف من البيانات, على سبيل المثال
struct Person { char name[30]; int age; } كما تلاحظ بداخل الأقوس قمنا بتعريف أكثر من متغير وكل متغير من نوع مختلف من البيانات, في المثال الذي في الأعلى، أنشأنا struct باسم Person. يمكننا إنشاء متغير منه على النحو التالي:
Person p1; p1 هو متغير struct من نوع Person. يمكننا استخدام هذا المتغير للوصول إلى المتغيرات التي بداخله ومن ثم استخدامها, للوصول إلى متغيرات struct ، نستخدم المتغير الذي أنشأناه منه مع النقطة (.), على سبيل المثال ، للوصول إلى المتغير age واسناد اليه قيمة يكون كالتالي
p1.age = 20;
-
إجابة محمد أبو عواد سؤال في إيجاد القيمة العظمى/الصغرى المحلية في مصفوفة Numpy كانت الإجابة المقبولة
يمكنك استخدام scipy.signal.argrelextrema لايجاد القيمة العظمى/الصغرى المحلية, ويمكنك فعل ذلك كالتالي, بداية القيمة العظمى
myArray = np.array([3, 5, 3, 5, 3]) maxima = signal.argrelextrema(myArray, np.greater) print(maxima) سوف يكون الناتج كالتالي
(array([3, 5]),) وبالمثل للقيمة الصغرى ولكن باستخدام np.less كالتالي
minima = signal.argrelextrema(myArray, np.less) print(minima)
-
إجابة محمد أبو عواد سؤال في إنشاء مصفوفات ضخمة باستخدام numpy كانت الإجابة المقبولة
يمكنك استخدام Pytables و Numpy حيث سيقوم Pytables بتخزين البيانات على القرص بتنسيق HDF ، مع ضغط اختياري ، وهو أمر مفيد عند التعامل مع عشرات أو مئات الملايين من الصفوف, إنها أيضا سريعة جدا, يمكن لجهاز كمبيوتر قديم معالجة البيانات من خلال تجميع مجموعة شبيهة بـ SQL في 1000000 صف / ثانية, وهذا ليس سيئا بالنسبة لحل قائم على بايثون,للوصول إلى البيانات في صورة NumPy :
data = table[from_row:to_row]
-
إجابة محمد أبو عواد سؤال في ظهور الخطأ size must be an Array$ في mongodb كانت الإجابة المقبولة
يمكنك استخدام العامل ifNull هنا. يبدو أن الحقل إما أنه ليس مصفوفة أو غير موجود , يمكنك استخدامه كالتالي
{ "department": 1, "Count employees" : {"$size": { "$ifNull": [ "$"$employees"", [] ] } } }
-
إجابة محمد أبو عواد سؤال في استخدام OOP ضمن كود node.js كانت الإجابة المقبولة
يمكنك استخدام oop في node.js كالتالي, لنفترض لدينا الصنف Person
var method = Person.prototype; function Person(name) { this._name = name; } method.getName = function() { return this._name; }; module.exports = Person; لاستخدامه في ملف آخر
var person = require("./person.js"); var Mohammed = new Person('Mohammed'); اذا كنت تريد تطبيق خاصية الوراثة يمكنك فعل التالي
var _super = require("./person.js").prototype, method = Student.prototype = Object.create( _super ); method.constructor = Student; function Student() { _super.constructor.apply( this, arguments ); } method.getName = function() { return _super.getName.call(this); }; module.exports = Student;
-
إجابة محمد أبو عواد سؤال في طرق ربط نص مع رقم في بايثون كانت الإجابة المقبولة
يمكنك استخدام format() كالتالي
age= 18 print("I have {} years old".format(age)) أيضا يمكنك استخدام % كالتالي
age= 18 print("I have %d years old"% age)
كما يمكنك استخدام التكوين ""f كالتالي
age= 18 print(f"I have {age} years old") كما يمكنك استخدام الفواصل كالتالي
age= 18 print("I have ",age," years old")
-
إجابة محمد أبو عواد سؤال في التحويل بين الأنواع datetime64 و datetime.datetime و Timestamp في numpy كانت الإجابة المقبولة
استخدم numpy.datetime64 () للتحويل بين datetime.datetime و numpy.datetime64 كالتالي
date = datetime.datetime(2021,2021,26) date64 = np.datetime64(date) print(type(date64)) استخدم dt64.astype حيث dt64 عبارة عن numpy.datetime64 لتحويل dt64 إلى datetime.datetime كالتالي
date64 = np.datetime64("2020-26-06 12:00:00") date = date64.astype(datetime.datetime) print(type(date)) استخدم الطرح من 1 يناير 1970 للتحويل بين datetime.datetime و TIMESTAMP كالتالي
date = datetime.datetime(2021, 26, 6) timeGap = (date - datetime.datetime(1970, 1, 1)) timestamp = timeGap.total_seconds() print(timestamp)
-
إجابة محمد أبو عواد سؤال في ما وظيفة المعامل unwind$ في mongodb؟ كانت الإجابة المقبولة
يفكك $ unwind حقل مصفوفة من مستندات الإدخال لإخراج مستند لكل عنصر في هذه المصفوفة , لنحاول شرح ذلك بمثال
{ "_id" : 1, "name" : "A", "state": [ "S", "M", "L"] } { "_id" : 2, "name" : "B", "state" : [ ] } { "_id" : 3, "name" : "C", "state": "M" } { "_id" : 4, "name" : "D" } { "_id" : 5, "name" : "F", "state" : null } لو حاولنا استخدام $ unwind على حقل state
db.test.aggregate( [ { $unwind: "$state" } ] ) سوف تكون النتيجة كالتالي
{ "_id" : 1, "item" : "A", "state" : "S" } { "_id" : 1, "item" : "A", "state" : "M" } { "_id" : 1, "item" : "A", "state" : "L" } { "_id" : 3, "item" : "C", "state" : "M" } كما تلاحظ عملية الفك تعيد مستند لكل عنصر في حقل state
unwind$ مفيد جدا أثناء إجراء التجميع. يقوم بتقسيم المستندات المعقدة والمتداخلة إلى مستند بسيط قبل إجراء عمليات مختلفة مثل الفرز والبحث وغيرها من الاجراءات
-
إجابة محمد أبو عواد سؤال في كيفية الحصول على key من قاموس من خلال value في بايثون؟ كانت الإجابة المقبولة
يمكننا فعل ذلك من خلال تخزين الValues في list وال keys في list , لاحظ الكود التالي مع الشرح
Mydict ={"Adam": 18, "Ebrahim" : 19}#الفاموس الخاص بنا keys = list(Mydict.keys()) #نخزن جميع المفاتيح في قائمة vals = list(Mydict.values())#نخزن جميع القيم في قائمة أخرى myVal = vals.index(18)#نقوم بالبحث عن قيمة محددة print(keys[myVal])#نبحث عن القيمة السابقة في قائمة المفاتيح
-
إجابة محمد أبو عواد سؤال في خلط قائمه في بايثون كانت الإجابة المقبولة
يمكننا استخدام الدالة shuffle لخلط وترتيب عناصر قائمة ما بعشوائية, ولكن هذه الدالة تابعة للمكتبة random لذلك يجب أن يتم استدعاءها قبل
import random list = [1,2,3,4,5]; random.shuffle(list) print ("shuffle list : ", list)
-
إجابة محمد أبو عواد سؤال في التحقق من radio - لارافيل كانت الإجابة المقبولة
يمكنك استخدام in وتحديد القيم الخاصة بالحقل radio, فمثلا لو كان لديك input من نوع radio لتحديد الجنس واسم الحقل gender فسوف يكون التحقق هكذا
'gander'=> 'required|in:male,female'
-
إجابة محمد أبو عواد سؤال في كيفية اختيار عنصر بشكل عشوائي من list في بايثون كانت الإجابة المقبولة
يمكننا فعل ذلك من خلال استخدام التابع choice, بداية سوف نقوم باستدعاء random ومن ثم نستخدم التابع choice
import random num = [1,2,3] print(random.choice(num))
-
إجابة محمد أبو عواد سؤال في عمل قاموس قابل للترتيب sortable dictionary في بايثون كانت الإجابة المقبولة
بداية نقوم بانشاء قاموس ليكن اسمه D1
D1 = {2:3, 1:89, 4:5, 3:0} ثم نقوم بانشاء قاموس فارغ
sort_dic = {} ثم نقوم بعمل حلقة تكرار على القاموس الأول وهو مرتب بناء على ال key, وبداخل الحلقة نقوم بعمل update للقاموس الفارغ بتعديل قيمه كالتالي
for i in sorted(D1): sort_dic.update({i:D1[i]}) لو حاولنا طباعة القاموس بعد الترتيب سوف يكون الشكل كالتالي
print(sort_dic) #{1: 89, 2: 3, 3: 0, 4: 5}
-
إجابة محمد أبو عواد سؤال في ما هو إستخدام super في بايثون؟ كانت الإجابة المقبولة
استخدامك للدالة super بداخل الصنف الابن يمنحك الوصول إلى الميثود في الصنف الأب ونستخدمها أيضا في الوراثة المتعددة, لنحاول شرح ذلك بمثال
class Animal(object): def __init__(self, Name): print(Name) class Dog(Animal): def __init__(self): print('الكلب له اربعة أرجل.') super().__init__('الكلب') d1 = Dog() كما تلاحظ قمت بانشاء صنفين, الصنف الاب Animal والصنف الابن Dog, لاحظ في constructor الابن قمت باستدعاء دالة ال constructor الخاصة بالصنف الأب وذلك باستخدام الدالة super()
هكذا يمكننا الاستفادة من الدالة super()
-
إجابة محمد أبو عواد سؤال في معرفة نوع العلاقة في لارافل كانت الإجابة المقبولة
الأمر سهل لا تقلق ولكن يحتاج للمزيد من الجهد والمزيد من التدريبات لكي نفهم جيدا كيفية عمل العلاقات في لارافيل, لنحاول التفكير بشكل منطقي في المشكلة التي تواجهك, لدينا قسم أو category وهذا القسم يحتوي على العديد من المقالات, اذا بامكان القسم ان يمتلك أكثر من مقال, بينما المقالة لا يمكنها الانتماء الا لقسم واحد, اذا نوع العلاقة واحد إلى كثير One to Many, فبالتالي شكل العلاقات سيكون كالتالي
في النموذج Category
public function articles(){ return $this->hasMany(Article::class); } استخدمت التابع hasMany أي أن القسم يمتلك أكثر من مقالة
في النموذج Article
public function category(){ return $this->belongsTo(Category::class); } استخدمت التابع belongsTo أي أن المقالة تنتمي لقسم واحد
الآن لو حاولنا الحصول على معلومات الالقسم الذي تنتمي اليه المقالة فسوف يكون كذلك
return $category=Article::find(1)->category()->get(); الآن هذا السطر سوف يقوم بارجاع بيانات القسم الذي تنتمي اليه المقالة, ويمكننا الوصول لاسم القسم بكل سهولة من خلال السطر التالي
return $category[0]->name; سوف يتم استرجاع اسم القسم
يمكنك قراءة المزيد عن العلاقات من هنا
-
إجابة محمد أبو عواد سؤال في التعامل مع الاحرف الكبيرة و الصغيرة في javaScript كانت الإجابة المقبولة
يمكنك تسجيل جميع القيم في ملف json بحروف جميعها صغيرة أو جميعها كبيرة , وعند أخذ القيمة المدخلة من المستخدم يمكنك تحويلها الى قيمة كل حروفها صغيرة, او قيمة كل حروفها كبيرة, وهذا يعتمد على كيف سجلت القيمة في ملف json
لتحويل القيمة المدخلة من قبل المستخدم الى حروف كبيرة يمكنك فعل ذلك باستخدام جافاسكربت من خلال التابع toUpperCase
<input id='test'> <button onclick="myFunction()">Try it</button> <script> function myFunction() { var word=document.getElementById("test").value.toUpperCase(); console.log(word) } </script> عند اخذ القيمة من المستخدم يمكنني تحويلها الى احرف كبيرة من خلال التابع toUpperCase كما تلاخظ فمثلا لو ادخل القيمة test سوف يكون الناتج TEST
وبالمثل لو اردت تحويل حميع الأحرف الى احرف صغيرة أستخدم التابع toLowerCase
-
إجابة محمد أبو عواد سؤال في كيف اعيد شكل الترمنال الخاص ب Vs Code الى شكله السابق ؟! كانت الإجابة المقبولة
يمكنك الضغط بالزر الأيمن من الماوس على منطقة tabs واختيار Hide tabs كما هو واضح في الصورة التالية
-
إجابة محمد أبو عواد سؤال في لماذا لا يمكن طباعة أكثر من نص في نفس السطر في بايثون؟ كانت الإجابة المقبولة
يمكنك مع طباعة كل عنصر أن تلحق له لاحقة محددة, فمثلا يمكنك أن تلحق كل عنصر بحرف ما أو اشارة ما, لماذا لا نلحقه بفراغ؟ لنجرب ذلك
for i in range(10): print(i,end=" ") سوف تكون النتيجة كذلك
1 2 3 4 5 6 7 8 9 10
لاحظ لقد استخدمت end ومن خلالها نحدد اللاحقة التي تلحق بالعنصر, نستطيع ان نكتب فيها ما نشاء فمثلا لو كتبت فيها حرف a فسوف تكون النتيجة كذلك
1a 2a 3a 4a 5a 6a 7a 8a 9a 10a لذلك نحدد اللاحقة مسافة فيلحق بعد كل عنصر مسافة, من الممكن ان لا نحدد شيء ولكن سوف تلتصق الأرقام ببعضها البعض