<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/page/8/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</description><language>ar</language><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x643;&#x62A;&#x627;&#x628;&#x629; &#x627;&#x644;&#x62A;&#x639;&#x644;&#x64A;&#x645;&#x627;&#x62A; &#x627;&#x644;&#x634;&#x631;&#x637;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r746/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95c2060921a_.jpg.1858f5b4c85e29045c8c983cb2d1d613.jpg" /></p>
<p>
	لا تخلو لغة برمجة من التعليمات الشرطية التي تُنفَّذ بناءً على تحقق شرط معين، وهي تعليمات برمجية يمكنها التحكم في تنفيذ شفرات معينة بحسب تحقق شرط ما من عدمه في وقت التنفيذ.
</p>

<p>
	تُنفّذ تعليمات برامج بايثون من الأعلى إلى الأسفل، مع تنفيذ كل سطر بحسب ترتيبه. باستخدام التعليمات الشرطية، يمكن للبرامج التحقق من استيفاء شروط معينة، ومن ثم تنفيذ الشيفرة المقابلة.
</p>

<p>
	هذه بعض الأمثلة التي سنستخدم فيها التعليمات الشرطية:
</p>

<ul>
	<li>
		إن حصلت الطالبة على أكثر من 65٪ في الامتحان، فأعلن عن نجاحها؛ وإلا، فأعلن عن رسوبها
	</li>
	<li>
		إذا كان لديه مال في حسابه، فاحسب الفائدة. وإلا، فاحسب غرامة
	</li>
	<li>
		إن اشتروا 10 برتقالات أو أكثر، فاحسب خصمًا بمقدار 5٪؛ وإلا فلا تفعل
	</li>
</ul>

<p>
	تقيِّم الشيفرة الشرطية شروطًا، ثم تُنفِّذ شيفرةً بناءً على ما إذا تحققت تلك الشروط أم لا. ستتعلم في هذا الدرس كيفية كتابة التعليمات الشرطية في بايثون.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="32011" href="https://academy.hsoub.com/uploads/monthly_2019_10/5d95c20233303_.jpg.4c78cf76d84b0432a14127ef29b9b6ae.jpg" rel="" data-fileext="jpg"><img alt="كيفية كتابة التعليمات الشرطية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="32011" data-unique="7qyq9swcm" src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95c20247db6_.thumb.jpg.3034ceb2b9c3a3399821e789d7ccfa32.jpg"></a>
</p>

<h2>
	التعليمة <code>if</code>
</h2>

<p>
	سنبدأ بالتعليمة <code>‎if‎</code>، والتي تتحقق مما إذا تحقق شرط محدَّد أم لا، وفي حال تحقق الشرط، فستنفَّذ الشيفرة المقابلة له.
</p>

<p>
	لنبدأ بأمثلة عملية توضح ذلك. افتح ملفًا، واكتب الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_6" style=""><span class="pln">grade </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة النجاح"</span><span class="pun">)</span></pre>

<p>
	أعطينا للمتغير <code>‎grade‎</code> القيمة <code>‎70‎</code>. ثم استخدمنا التعليمة <code>‎if‎</code> لتقييم ما إذا كان المتغير <code>grade</code> أكبر من (<code>‎&gt;=‎</code>) أو يساوي <code>‎65‎</code>. وفي تلك الحالة، سيطبع البرنامج <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">السلسلة النصية</a> التالية: <code>درجة النجاح</code>.
</p>

<p>
	احفظ البرنامج بالاسم <code>‎grade.py‎</code>، ثم نفّذه في بيئة البرمجة المحلية من نافذة الطرفية باستخدام الأمر <code>‎python grade.py‎</code>.
</p>

<p>
	في هذه الحالة، الدرجة 70 تلبي الشرط، لأنّها أكبر من 65، لذلك ستحصل على المخرجات التالية عند تنفيذ البرنامج:
</p>

<pre class="ipsCode">درجة النجاح
</pre>

<p>
	لنغيّر الآن نتيجة هذا البرنامج عبر تغيير قيمة المتغير <code>‎grade‎</code> إلى <code>‎60‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_8" style=""><span class="pln">grade </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة النجاح"</span><span class="pun">)</span></pre>

<p>
	بعد حفظ وتنفيذ الشيفرة، لن نحصل على أي مخرجات، لأنّ الشرط لم يتحقق، ولم نأمر البرنامج بتنفيذ تعليمة أخرى.
</p>

<p>
	كمثال آخر، دعنا نتحقق مما إذا كان رصيد الحساب المصرفي أقل من 0. لننشئ ملفا باسم <code>‎account.py‎</code>، ونكتب البرنامج التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_10" style=""><span class="pln">balance </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">5</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> balance </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة."</span><span class="pun">)</span></pre>

<p>
	عند تنفيذ البرنامج باستخدام <code>‎python account.py‎</code>، سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">الحساب فارغ، أضف مبلغًا الآن، أو ستحصل على غرامة.
</pre>

<p>
	أعطينا للمتغير <code>‎balance‎</code> القيمة <code>‎-5‎</code>، وهي أقل من 0 في البرنامج السابق. ولمَّا كان الرصيد مستوفيًا لشرط التعليمة <code>‎if‎</code> (أي <code>‎balance &lt; 0‎</code>)، فسنحصل على <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a> في المخرجات بمجرد حفظ الشيفرة وتنفيذها. مرة أخرى، لو غيرنا الرصيد إلى القيمة 0 أو إلى عدد موجب، فلن نحصل على أيّ مخرجات.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2>
	التعليمة <code>Else</code>
</h2>

<p>
	قد تريد من البرنامج أن يفعل شيئًا ما في حال عدم تحقق شرط التعليمة <code>‎if‎</code>. في المثال أعلاه، نريد طباعة مخرجات في حال النجاح والرسوب. ولفعل ذلك، سنضيف التعليمة <code>‎else‎</code> إلى شرط الدرجة أعلاه وفق الصياغة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_12" style=""><span class="pln">grade </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة النجاح"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة الرسوب"</span><span class="pun">)</span></pre>

<p>
	قيمة المتغير ‎<code>‎grade‎</code>‎ تساوي <code>‎60‎</code>، لذلك فشرط التعليمة <code>‎if‎</code> غير متحقق، وبالتالي فإنّ البرنامج لن يطبع <code>‎درجة النجاح‎</code>. تخبر التعليمة <code>‎else‎</code> البرنامجَ أنّ عليه طباعة السلسلة النصية "درجة الرسوب".
</p>

<p>
	عندما نحفظ البرنامج وننفّذه، سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">درجة الرسوب
</pre>

<p>
	إذا عدّلنا البرنامج وأعطينا المتغيرَ grade القيمة <code>‎65‎</code> أو أعلى منها، فسنحصل بدلاً من ذلك على الناتج <code>‎درجة النجاح‎</code>.
</p>

<p>
	لإضافة التعليمة <code>‎else‎</code> إلى مثال الحساب المصرفي، سنعيد كتابة الشيفرة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_14" style=""><span class="pln">balance </span><span class="pun">=</span><span class="pln"> </span><span class="lit">522</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> balance </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة."</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"رصيدك أكبر من 0."</span><span class="pun">)</span></pre>

<p>
	سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">رصيدك أكبر من 0.
</pre>

<p>
	هنا، غيّرنا قيمة المتغير <code>‎balance‎</code> إلى عدد موجب لكي تُنفَّذ الشيفرة المقابلة للتعليمة <code>‎else‎</code>. إن أردت تنفيذ الشيفرة المقابلة للتعليمة <code>‎if‎</code>، غيِّر القيمة إلى عدد سالب.
</p>

<p>
	من خلال دمج العبارتين <code>‎if‎</code> و <code>‎else‎</code>، فأنت تنشئ تعليمة شرطية مزدوجة، والتي ستجعل الحاسوب ينفذ شيفرة برمجية معينة سواء تم استيفاء شرط <code>‎if‎</code> أم لا.
</p>

<h2>
	التعليمة <code>Else if</code>
</h2>

<p>
	حتى الآن، عملنا على تعليمات شرطية ثنائية، أي إن تحقق الشرط، فنفذ شيفرة ما، وإلا، فنفِّذ شيفرة أخرى فقط. لكن في بعض الحالات، قد تريد برنامجًا يتحقق من عدة حالات شرطية. ولأجل هذا، سوف نستخدم <strong>التعليمة <code>Else if</code></strong>، والتي تُكتب في بايثون هكذا <code>‎elif‎</code>. تشبه التعليمة <code>‎elif‎</code> - أو <code>Else if</code> - التعليمة <code>‎if‎</code>، ومهمتها التحقق من شرط إضافي.
</p>

<p>
	في برنامج الحساب المصرفي، قد نرغب في الحصول على ثلاثة مخرجات مختلفة مقابلة لثلاث حالات مختلفة:
</p>

<ul>
	<li>
		الرصيد أقل من 0
	</li>
	<li>
		الرصيد يساوي 0
	</li>
	<li>
		الرصيد أعلى من 0
	</li>
</ul>

<p>
	ستوضع التعليمة <code>‎elif‎</code> بين التعليمة <code>‎if‎</code> والتعليمة <code>‎else‎</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_16" style=""><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> balance </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة."</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> balance </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"الرصيد يساوي 0، أضف مبلغًا قريبًا."</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"رصيدك أكبر من 0."</span><span class="pun">)</span></pre>

<p>
	الآن، هناك ثلاثة مخرجات محتملة يمكن أن تُطبع عند تنفيذ البرنامج:
</p>

<ul>
	<li>
		إن كان المتغير <code>‎balance‎</code> يساوي <code>‎0‎</code>، فسنحصل على المخرجات من التعليمة <code>‎elif‎</code> (أي <code>‎الرصيد يساوي 0، أضف مبلغًا قريبًا.‎</code>).
	</li>
	<li>
		إذا ضُبِط المتغير <code>‎balance‎</code> عند عدد موجب، فسوف نحصل على المخرجات من التعليمة <code>‎else‎</code> (أي <code>‎رصيدك أكبر من 0.‎</code>).
	</li>
	<li>
		إذا ضُبِط المتغير <code>‎balance‎</code> عند عدد سالب، فسنحصل على المخرجات من التعليمة <code>‎if‎</code> (أي <code>‎الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة‎</code>).
	</li>
</ul>

<p>
	ماذا لو أردنا أن نأخذ بالحسبان أكثر من ثلاثة احتمالات؟ يمكننا كتابة عدة تعليمات <code>‎elif‎</code> في الشيفرة البرمجية.
</p>

<p>
	لنُعِد كتابة البرنامج <code>‎grade.py‎</code> بحيث يقابل كل نطاق من الدرجات علامة محددة:
</p>

<ul>
	<li>
		90 أو أعلى تكافئ العلامة <strong>أ</strong>
	</li>
	<li>
		80-89 تعادل العلامة <strong>ب</strong>
	</li>
	<li>
		70-79 تعادل العلامة <strong>ج</strong>
	</li>
	<li>
		65-69 تعادل العلامة <strong>د</strong>
	</li>
	<li>
		64 أو أقل تكافئ العلامة <strong>ه</strong>
	</li>
</ul>

<p>
	سنحتاج لتنفيذ هذه الشيفرة إلى تعليمة <code>‎if‎</code> واحد، وثلاث تعليمات <code>‎elif‎</code>، وتعليمة <code>‎else‎</code> تعالج جميع الحالات الأخرى.
</p>

<p>
	دعنا نعيد كتابة الشيفرة من المثال أعلاه لطباعة <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a> مقابلة لكل علامة. يمكننا الإبقاء على التعليمة <code>‎else‎</code> كما هي.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_18" style=""><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">90</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"العلامة أ"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="lit">80</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"العلامة ب"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="lit">70</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"العلامة ج"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"العلامة د"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة الرسوب"</span><span class="pun">)</span></pre>

<p>
	تُنفّذ التعليمات <code>‎elif‎</code> بالترتيب. هذا البرنامج سيكمل الخطوات التالية:
</p>

<ul>
	<li>
		إذا كانت الدرجة أكبر من 90، فسيطبع البرنامجُ <code>‎العلامة أ‎</code>، وإذا كانت الدرجة أقل من 90، فسيمرّ البرنامج إلى التعليمة التالية …
	</li>
	<li>
		إذا كانت الدرجة أكبر من أو تساوي 80، فسيطبع البرنامجُ <code>‎العلامة ب‎</code>، إذا كانت الدرجة تساوي 79 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية …
	</li>
	<li>
		إذا كانت الدرجة أكبر من أو تساوي 70، فسيطبعُ البرنامجُ <code>‎العلامة ج‎</code>، إذا كانت الدرجة تساوي 69 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية …
	</li>
	<li>
		إذا كانت الدرجة أكبر من أو تساوي 65، فسيطبع البرنامجُ <code>‎العلامة د‎</code>، وإذا كانت الدرجة تساوي 64 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية …
	</li>
	<li>
		سيطبع البرنامج <code>‎درجة الرسوب‎</code>، لأنه لم يتم استيفاء أيِّ من الشروط المذكورة أعلاه.
	</li>
</ul>

<h2>
	تعليمات <code>if</code> المتشعبة
</h2>

<p>
	بعد أن تتعود على التعليمات <code>‎if‎</code> و <code>‎elif‎</code> و <code>‎else‎</code>، يمكنك الانتقال إلى التعليمات الشرطية المتشعبة (nested conditional statements).
</p>

<p>
	يمكننا استخدام تعليمات <code>‎if‎</code> المتشعبة في الحالات التي نريد فيها التحقق من شرط ثانوي بعد التأكد من تحقق الشرط الرئيسي. لهذا، يمكننا حشر تعليمة if-else داخل تعليمة if-else أخرى. لنلقِ نظرة على صياغة <code>‎if‎</code> المتشعبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_20" style=""><span class="kwd">if</span><span class="pln"> statement1</span><span class="pun">:</span><span class="pln">              </span><span class="com"># الخارجية if تعليمة</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"true"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> nested_statement</span><span class="pun">:</span><span class="pln">    </span><span class="com"># المتشعبة if تعليمة</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"yes"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">                   </span><span class="com"># المتشعبة else تعليمة</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"no"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">                       </span><span class="com"># الخارجية else تعليمة</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"false"</span><span class="pun">)</span></pre>

<p>
	هناك عدة مخرجات محتملة لهذه الشيفرة:
</p>

<ul>
	<li>
		إذا كانت <code>‎statement1‎</code> صحيحة، فسيتحقق البرنامج مما إذا كانت <code>‎nested_statement‎</code> صحيحة أيضًا. إذا كانت كلتا الحالتين صحيحتان، فسنحصل على المخرجات التالية:
	</li>
</ul>

<pre class="ipsCode">true
yes
</pre>

<ul>
	<li>
		ولكن إن كانت <code>‎statement1‎</code> صحيحة، و <code>‎nested_statement‎</code> خاطئة، فسنحصل على المخرجات التالية:
	</li>
</ul>

<pre class="ipsCode">true
no
</pre>

<ul>
	<li>
		وإذا كانت <code>‎statement1‎</code> خاطئة، فلن تُنفّذ تعليمة if-else المتشعبة على أيّ حال، لذلك ستُنفّذ التعليمة <code>‎else‎</code> وحدها، والمخرجات ستكون:
	</li>
</ul>

<pre class="ipsCode">false
</pre>

<p>
	يمكن أيضًا استخدام عدة تعليمات <code>‎if‎</code> متشعبة في الشيفرة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_22" style=""><span class="kwd">if</span><span class="pln"> statement1</span><span class="pun">:</span><span class="pln">                  </span><span class="com"># الخارجية if </span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"hello world"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> nested_statement1</span><span class="pun">:</span><span class="pln">       </span><span class="com"># المتشعبة الأولى if </span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"yes"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">elif</span><span class="pln"> nested_statement2</span><span class="pun">:</span><span class="pln">     </span><span class="com"># المتشعبة الأولى elif</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"maybe"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">                       </span><span class="com">#المتشعبة الأولى  else</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"no"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> statement2</span><span class="pun">:</span><span class="pln">                </span><span class="com"># الخارجية elif</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"hello galaxy"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> nested_statement3</span><span class="pun">:</span><span class="pln">       </span><span class="com"># المتشعبة الثانية if</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"yes"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">elif</span><span class="pln"> nested_statement4</span><span class="pun">:</span><span class="pln">     </span><span class="com"># المتشعبة الثانية elif</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"maybe"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">                       </span><span class="com"># المتشعبة الثانية else</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"no"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">                           </span><span class="com"># الخارجية else</span><span class="pln">
    statement</span><span class="pun">(</span><span class="str">"مرحبا"</span><span class="pun">)</span></pre>

<p>
	في الشيفرة البرمجية أعلاه، هناك تعليمات <code>‎if‎</code> و <code>‎elif‎</code> متشعبة داخل كل تعليمات <code>‎if‎</code>. هذا سيفسح المجال لمزيد من الخيارات في كل حالة.
</p>

<p>
	دعنا نلقي نظرة على مثال لتعليمات <code>‎if‎</code> متشعبة في البرنامج <code>‎grade.py‎</code>. يمكننا التحقق أولًا مما إذا كان الطالب قد حقق درجة النجاح (أكبر من أو تساوي 65٪)، ثم نحدد العلامة المقابلة للدرجة. إذا لم يحقق الطالب درجة النجاح، فلا داعي للبحث عن العلامة المقابلة للدرجة، وبدلًا من ذلك، يمكن أن نجعل البرنامج يطبع <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a> فيها إعلان عن رسوب الطالب. ستبدو الشيفرة المعدلة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_24" style=""><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة النجاح:"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">90</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"أ"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="lit">80</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"ب"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="lit">70</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"ج"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"د"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة الرسوب"</span><span class="pun">)</span></pre>

<p>
	إذا أعطينا للمتغير <code>‎grade‎</code> القيمة <code>‎92‎</code>، فسيُستوفى الشرط الأول، وسيَطبع البرنامجُ <code>‎درجة النجاح:‎</code>. بعد ذلك، سيتحقق مما إذا كانت الدرجة أكبر من أو تساوي 90، وبما أنّ هذا الشرط مستوفًى أيضًا، فستُطبع <code>‎أ‎</code>.
</p>

<p>
	أما إذا أعطينا للمتغير <code>‎grade‎</code> القيمة <code>‎60‎</code>، فلن يتم استيفاء الشرط الأول، لذلك سيتخطى البرنامج تعليمات <code>‎if‎</code> المتشعبة، وينتقل إلى التعليمة <code>‎else‎</code>، ويطبع <code>‎درجة الرسوب‎</code>.
</p>

<p>
	يمكننا بالطبع إضافة المزيد من الخيارات، واستخدام طبقة ثانية من تعليمات <code>if</code> المتشعبة. ربما نود إضافة الدرجات التفصيلية <code>أ+‎</code> و <code>أ</code> و <code>أ-‎</code>. يمكننا القيام بذلك عن طريق التحقق أولًا من اجتياز درجة النجاح، ثم التحقق مما إذا كانت الدرجة تساوي 90 أو أعلى، ثم التحقق مما إذا كانت الدرجة تتجاوز 96، وفي تلك الحالة ستقابل العلامة ‎<code>أ+</code>. إليك المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8080_26" style=""><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"درجة النجاح:"</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">90</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">96</span><span class="pun">:</span><span class="pln">
            </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"أ+"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">93</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> grade </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">96</span><span class="pun">:</span><span class="pln">

            </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"أ"</span><span class="pun">)</span><span class="pln">

        </span><span class="kwd">elif</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">90</span><span class="pun">:</span><span class="pln">
            </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"أ-"</span><span class="pun">)</span><span class="pln">
</span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span></pre>

<p>
	في الشيفرة أعلاه، في حال تعيين المتغير <code>‎grade‎</code> عند القيمة <code>‎96‎</code>، سيقوم البرنامج بما يلي:
</p>

<ul>
	<li>
		التحقق مما إذا كانت الدرجة أكبر من أو تساوي 65 (صحيح)
	</li>
	<li>
		طباعة <code>‎درجة النجاح:‎</code>
	</li>
	<li>
		التحقق مما إذا كانت الدرجة أكبر من أو تساوي 90 (صحيح)
	</li>
	<li>
		التحقق مما إذا كانت الدرجة أكبر من 96 (خطأ)
	</li>
	<li>
		التحقق مما إذا كانت الدرجة أكبر من 93، وأقل من أو تساوي 96 (صحيح)
	</li>
	<li>
		طباعة <code>أ‎</code>
	</li>
	<li>
		تجاوز التعليمات الشرطية المتشعبة وتنفيذ باقي الشيفرة
	</li>
</ul>

<p>
	ستكون مخرجات البرنامج في حال كانت الدرجة تساوي 96 كالتالي:
</p>

<pre class="ipsCode">درجة النجاح:
أ
</pre>

<p>
	تساعد تعليمات <code>‎if‎</code> المتشعبة على إضافة عدة مستويات من الشروط الفرعية إلى الشيفرة.
</p>

<h2>
	خلاصة
</h2>

<p>
	ستتحكم باستخدام التعليمات الشرطية، مثل التعليمة <code>‎if‎</code>، في مسار البرنامج أي تدفق تنفيذ الشيفرة. تطلب التعليمات الشرطية من البرنامج التحقق من استيفاء شرط معين من عدمه. وإذا تم استيفاء الشرط، فستُنفّذ شيفرة معينة، وإلا فسيستمر البرنامج وينتقل إلى الأسطر التالية.
</p>

<p>
	يمكنك الدمج بين التعليمات الشرطية <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r732/" rel="">والمعاملات المنطقية</a>، بما فيها <code>and</code> و <code>or</code>، واستخدام التعليمات الشرطية مع <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">الحلقات التكرارية</a>.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-write-conditional-statements-in-python-3-2" rel="external nofollow">How To Write Conditional Statements in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-while-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r509/" rel="">كيفية إنشاء حلقات تكرار while في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r745/" rel="">كيفية كتابة الوحدات في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">746</guid><pubDate>Sat, 12 Oct 2019 18:05:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x643;&#x62A;&#x627;&#x628;&#x629; &#x627;&#x644;&#x648;&#x62D;&#x62F;&#x627;&#x62A; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r745/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bf9b59f35_.jpg.dbc9819e86d5c5d51cf005f912084f9e.jpg" /></p>

<p>
	وحدات (modules) بايثون هي ملفات <code>‎.py‎</code> تحتوي شفرة بايثون، ويمكن التعامل مع أيّ ملف بايثون على أنه وحدة.
</p>

<p>
	تتوفر بعض الوحدات في <a href="https://docs.python.org/3/library/" rel="external nofollow">مكتبة بايثون القياسية</a>، والتي تُثبّت تلقائيًا مع بايثون. يمكن لبعضها الآخر أن <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r744/" rel="">يُثبّت</a> عبر مدير الحزم <a href="https://academy.hsoub.com/questions/5121-%D9%83%D9%8A%D9%81-%D8%A3%D9%82%D9%88%D9%85-%D8%A8%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-pip%D8%9F/#comment-10868" rel="">pip</a>. بالإضافة إلى ذلك، يمكنك إنشاء وحدات بايثون خاصة بك، لأنّ الوحدات هي مجرد ملفات <code>‎.py‎</code>.
</p>

<p>
	سيرشدك هذا الدرس إلى كيفية كتابة وحدات بايثون لاستخدامها في ملفات البرمجة الأخرى.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="32010" href="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bf9d30dec_.jpg.c59a7ef625ac25cf4f94d7c9ff521743.jpg" rel=""><img alt="كيفية كتابة الوحدات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="32010" data-unique="rb5m6zhdw" src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bf9d49b6b_.thumb.jpg.cf5fc61339367f0ad14dd65952b0b0c0.jpg"></a>
</p>

<h2>
	كتابة الوحدات واستيرادها
</h2>

<p>
	كتابة الوحدات مشابه لكتابة أي ملف بايثون آخر. يمكن أن تحتوي الوحدات على تعريفات الدوال والأصناف والمتغيرات التي يمكن استخدامها بعد ذلك في برامج بايثون الأخرى.
</p>

<p>
	سنشئ من <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%81%D9%8A-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r401/" rel="">بيئة البرمجة الحالية الخاصة ببايثون 3</a> أو <a href="https://academy.hsoub.com/programming/python/%d8%aa%d8%ab%d8%a8%d9%8a%d8%aa-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-3-%d9%88%d8%a5%d8%b9%d8%af%d8%a7%d8%af-%d8%a8%d9%8a%d8%a6%d8%aa%d9%87%d8%a7-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-r714/" rel="">بيئة البرمجة المستندة إلى الخادم</a> ملفًّا باسم <code>‎hello.py‎</code>، والذي سنتستورده لاحقًا من ملف آخر.
</p>

<p>
	في البدء، سننشئ دالة تطبع العبارة <code>مرحبا بالعالم!</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_6" style="">
<span class="com"># تعريف دالة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> world</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"مرحبا بالعالم!"</span><span class="pun">)</span></pre>

<p>
	إذا نفّذنا البرنامج في سطر الأوامر باستخدام <code>‎python hello.py‎</code>، فلن يحدث شيء، لأننا لم نطلب من البرنامج فعل أي شيء.
</p>

<p>
	لننشئ ملفًا ثانيًا في <strong>نفس المجلد</strong> (أي بجانب الملف السابق) باسم <code>‎main_program.py‎</code> حتى نتمكن من استيراد الوحدة التي أنشأناها للتو، ومن ثم استدعاء الدالة. يجب أن يكون هذا الملف في نفس المجلد حتى تعرف بايثون موضع الوحدة، لأنها ليست وحدة مُضمّنة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_8" style="">
<span class="com"># hello استيراد الوحدة</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> hello

</span><span class="com"># استدعاء الدالة</span><span class="pln">
hello</span><span class="pun">.</span><span class="pln">world</span><span class="pun">()</span></pre>

<p>
	نظرًا لأننا استوردنا الوحدة، نحتاج إلى استدعاء الدالة من خلال التأشير إلى اسم الوحدة بالصياغة النقطية (dot notation).
</p>

<p>
	يمكننا بدلًا من ذلك استيراد دالة محدَّدة من الوحدة بالتعليمة <code>‎from hello import world‎</code>، واستدعاء تلك الدالة بالشكل <code>‎world()‎</code> كما تعلمنا ذلك من الدرس السابق.
</p>

<p>
	الآن، يمكننا تنفيذ البرنامج من سطر الأوامر:
</p>

<pre class="ipsCode">
python main_program.py
</pre>

<p>
	سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">
مرحبا بالعالم!
</pre>

<p>
	لنرى كيف يمكننا استخدام المتغيرات في الوحدات، دعنا نضيف تعريفًا لمتغير في الملف <code>‎hello.py‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_10" style="">
<span class="com"># تعريف دالة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> world</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"مرحبا بالعالم!"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تعريف المتغير</span><span class="pln">
shark </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span></pre>

<p>
	بعد ذلك، سنستدعي المتغير داخل الدالة <code>‎print()‎</code> في الملف <code>‎main_program.py‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_12" style="">
<span class="com"># hello استيراد الوحدة</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> hello

</span><span class="com"># استدعاء الدالة</span><span class="pln">
hello</span><span class="pun">.</span><span class="pln">world</span><span class="pun">()</span><span class="pln">

</span><span class="com"># طباعة المتغير</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">hello</span><span class="pun">.</span><span class="pln">shark</span><span class="pun">)</span></pre>

<p>
	بمجرد تنفيذ البرنامج، سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">
مرحبا بالعالم!
Sammy
</pre>

<p>
	أخيرًا، دعنا نعرّف صنفًا في الملف <code>‎hello.py‎</code>. سننشئ الصنف <code>‎Octopus‎</code>، والذي يحتوي على الخاصيتين <code>‎name‎</code> و <code>‎color‎</code>، إضافة إلى دالة تطبع الخاصيات عند استدعائها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_15" style="">
<span class="com"># تعريف الدالة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> world</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"مرحبا بالعالم!"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تعريف المتغير</span><span class="pln">
shark </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">

</span><span class="com"># تعريف الصنف</span><span class="pln">
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Octopus</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">def</span><span class="pln"> __init__</span><span class="pun">(</span><span class="pln">self</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">,</span><span class="pln"> color</span><span class="pun">):</span><span class="pln">
        self</span><span class="pun">.</span><span class="pln">color </span><span class="pun">=</span><span class="pln"> color
        self</span><span class="pun">.</span><span class="pln">name </span><span class="pun">=</span><span class="pln"> name

    </span><span class="kwd">def</span><span class="pln"> tell_me_about_the_octopus</span><span class="pun">(</span><span class="pln">self</span><span class="pun">):</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"This octopus is "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> self</span><span class="pun">.</span><span class="pln">color </span><span class="pun">+</span><span class="pln"> </span><span class="str">"."</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">self</span><span class="pun">.</span><span class="pln">name </span><span class="pun">+</span><span class="pln"> </span><span class="str">" is the octopus's name."</span><span class="pun">)</span></pre>

<p>
	سنضيف الآن الصنفَ إلى نهاية الملف <code>‎main_program.py‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_17" style="">
<span class="com"># hello استيراد الوحدة</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> hello


</span><span class="com"># استدعاء الدالة</span><span class="pln">
hello</span><span class="pun">.</span><span class="pln">world</span><span class="pun">()</span><span class="pln">

</span><span class="com"># طباعة المتغير</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">hello</span><span class="pun">.</span><span class="pln">shark</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء الصنف</span><span class="pln">
jesse </span><span class="pun">=</span><span class="pln"> hello</span><span class="pun">.</span><span class="typ">Octopus</span><span class="pun">(</span><span class="str">"Jesse"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"orange"</span><span class="pun">)</span><span class="pln">
jesse</span><span class="pun">.</span><span class="pln">tell_me_about_the_octopus</span><span class="pun">()</span></pre>

<p>
	بمجرد استدعاء الصنف Octopus باستخدام <code>‎hello.Octopus()‎</code>، يمكننا الوصول إلى دوال وخاصيات الصنف من فضاء الأسماء الخاص بالملف <code>‎main_program.py‎</code>. يتيح لنا هذا كتابة <code>‎jesse.tell_me_about_the_octopus()‎</code> في السطر الأخير دون استدعاء <code>‎hello‎</code>. يمكننا أيضًا، على سبيل المثال، استدعاء إحدى خاصيات الصنف، مثل <code>‎jesse.color‎</code>، دون الرجوع إلى اسم الوحدة <code>‎hello‎</code>.
</p>

<p>
	سنحصل عند تنفيذ البرنامج على المخرجات التالية:
</p>

<pre class="ipsCode">
مرحبا بالعالم!
Sammy
This octopus is orange.
Jesse is the octopus's name.
</pre>

<p>
	من المهم أن تضع في الحسبان أنه على الرغم من أنّ الوحدات غالبًا ما تضم تعريفات، إلا أنها يمكن أيضًا أن تقدم شفرات برمجية. لتوضيح هذا، دعنا نعيد كتابة الملف <code>‎hello.py‎</code> لنجعله يقدم دالة <code>‎world()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_20" style="">
<span class="com"># تعريف دالة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> world</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"مرحبا بالعالم!"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء الدالة داخل الوحدة</span><span class="pln">
world</span><span class="pun">()</span></pre>

<p>
	لقد حذفنا أيضًا التعريفات الأخرى في الملف. الآن، في الملف <code>‎main_program.py‎</code>، سنحذف كل الأسطر باستثناء عبارة الاستيراد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_22" style="">
<span class="com"># hello استيراد الوحدة</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> hello</span></pre>

<p>
	عند تنفيذ <code>‎main_program.py‎</code>، سنحصل على المخرجات التالية:
</p>

<pre class="ipsCode">
مرحبا بالعالم!
</pre>

<p>
	هذا لأنّ الوحدة <code>‎hello‎</code> قدمت الدالة <code>‎world()‎</code>، والتي مُرِّرت بعد ذلك إلى <code>‎main_program.py‎</code> لتُنفّذ مع السكربت <code>‎main_program.py‎</code>.
</p>

<p>
	الوحدة هي ملف بايثون مؤلف من تعريفات و شيفرات برمجية يمكن الاستفادة منها في ملفات بايثون الأخرى.
</p>

<h2>
	الوصول إلى الوحدات من مجلد آخر
</h2>

<p>
	قد تكون الوحدات مفيدة لأكثر من مشروع واحد، وفي هذه الحالة، لن يكون من الحكمة الاحتفاظ بالوحدة في مجلد مرتبط بمشروع خاص.
</p>

<p>
	إذا أردت استخدام وحدة من مجلد آخر غير المجلد الذي يحوي البرنامج الرئيسي، فأمامك عدة خيارات سنسردها فيما يلي.
</p>

<h3>
	التعرف تلقائيًا على مسار الوحدة
</h3>

<p>
	أحد الخيارات هو استدعاء مسار الوحدة من الملفات البرمجية التي تستخدم تلك الوحدة. يُعد هذا حلًّا مؤقتًا يمكن استخدامه أثناء عملية التطوير، لأنه لا يجعل الوحدة متاحة على مستوى النظام بأكمله.
</p>

<p>
	لإلحاق مسار وحدة بملف برمجي آخر، ستبدأ باستيراد الوحدة <code>‎sys‎</code>، إلى جانب الوحدات الأخرى التي ترغب في استخدامها في ملف البرنامج الرئيسي.
</p>

<p>
	تعد الوحدة <code>‎sys‎</code> جزءًا من مكتبة بايثون القياسية، وتوفر معاملات ودوال نظامية يمكنك استخدامها في برنامجك لتعيين مسار الوحدة التي ترغب في تقديمها.
</p>

<p>
	على سبيل المثال، لنقل أننا نقلنا الملف <code>‎hello.py‎</code> إلى المسار <code>‎/usr/sammy/‎</code>، بينما يوجد الملف <code>‎main_program.py‎</code> في مجلد آخر.
</p>

<p>
	في الملف <code>‎main_program.py‎</code>، ما يزال بإمكاننا استيراد الوحدة <code>‎hello‎</code> عن طريق استيراد الوحدة <code>‎sys‎</code>، ثم إضافة المسار <code>‎/usr/sammy/‎</code> إلى المسارات التي يبحث بايثون فيها عن الملفات.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1410_24" style="">
<span class="kwd">import</span><span class="pln"> sys
sys</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="str">'/usr/sammy/'</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">import</span><span class="pln"> hello
</span><span class="pun">...</span></pre>

<p>
	إن عيّنت مسار الملف <code>‎hello.py‎</code> بشكل صحيح، فسيكون بمقدورك تنفيذ الملف <code>‎main_program.py‎</code> دون أيّ أخطاء، وستحصل على نفس المخرجات التي حصلنا عليها أعلاه عندما كان <code>‎hello.py‎</code> في نفس المجلد.
</p>

<h3>
	إضافة الوحدة إلى مسار بايثون
</h3>

<p>
	الخيار الثاني هو إضافة الوحدة إلى المسار الذي يبحث فيه بايثون عن الوحدات والحزم. هذا حل أفضل وأدوم، لأنه يجعل الوحدة متاحة على نطاق البيئة، أو على مستوى النظام.
</p>

<p>
	لمعرفة المسار الذي يبحث فيه بايثون، شغِّل مترجم (interpreter) بايثون من بيئة البرمجة خاصتك:
</p>

<pre class="ipsCode">
python
</pre>

<p>
	بعد ذلك، استورد الوحدة <code>‎sys‎</code>:
</p>

<pre class="ipsCode">
import sys
</pre>

<p>
	ثم اطلب من بايثون طباعة مسار النظام:
</p>

<pre class="ipsCode">
print(sys.path)
</pre>

<p>
	ستحصل على بعض المخرجات، وسيُطبع مسار نظام واحد على الأقل. إذا كنت تعمل في بيئة برمجة، فقد تتلقى العديد منها. سيكون عليك البحث عن المسارات الموجودة في البيئة التي تستخدمها حاليًا، ولكن قد ترغب أيضًا في إضافة الوحدة إلى مسار النظام الرئيسي لبايثون. النتيجة ستكون مشابهة لما يلي:
</p>

<pre class="ipsCode">
'/usr/sammy/my_env/lib/python3.5/site-packages'
</pre>

<p>
	يمكنك الآن نقل الملف <code>‎hello.py‎</code> إلى هذا المجلد. بعد ذلك، يمكنك استيراد الوحدة <code>‎hello‎</code> كالمعتاد:
</p>

<pre class="ipsCode">
import hello
...
</pre>

<p>
	عند تنفيذ البرنامج، يُفترض ألا يحدث أيّ خطأ.
</p>

<p>
	يضمن لك تعديل مسار الوحدة إمكانية الوصول إليها مهما كان المجلد الذي تعمل فيه. هذا مفيد خاصة في حال كنت تعمل على عدة مشاريع تشير إلى الوحدة نفسها.
</p>

<h2>
	خلاصة
</h2>

<p>
	إنّ كتابة وحدات بايثون لا يختلف عن كتابة أيّ ملف بايثون آخر. غطينا في هذه المقالة كيفية كتابة التعاريف في الوحدات، وكيفية استخدامها في ملف بايثون آخر، وعرضنا بعض الخيارات حول المواضِع التي يمكن أن تحفظ فيها الوحدة لتجعلها متاحة.
</p>

<p>
	يمكنك تعلم المزيد حول تثبيت الوحدات واستيرادها من الدرس السابق: [كيفية استيراد الوحدات في بايثون 3]().
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/programming/python/%d8%aa%d8%ab%d8%a8%d9%8a%d8%aa-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-3-%d9%88%d8%a5%d8%b9%d8%af%d8%a7%d8%af-%d8%a8%d9%8a%d8%a6%d8%aa%d9%87%d8%a7-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-r714/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-write-modules-in-python-3" rel="external nofollow">How To Write Modules in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">كيفية كتابة العبارات الشرطية في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r744/" rel="">كيفية استيراد الوحدات في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">745</guid><pubDate>Wed, 09 Oct 2019 18:05:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x64A;&#x631;&#x627;&#x62F; &#x627;&#x644;&#x648;&#x62D;&#x62F;&#x627;&#x62A; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r744/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bda5d05f5_.jpg.4bb0928640ca33c2a21b46dbb8c4b43a.jpg" /></p>

<p>
	توفر لغة بايثون مجموعة متنوعة من الدوال المضمّنة مثل:
</p>

<ul>
<li>
		<code>print()‎‎</code>: تطبع التعابير المُمرَّرة إليها في مجرى الخرج
	</li>
	<li>
		abs()‎<code>‎</code>: تُعيد القيمة المطلقة للعدد
	</li>
	<li>
		int()‎<code>‎</code>: تحوِّل نوع بيانات إلى <a href="https://wiki.hsoub.com/Python/int" rel="external">عدد صحيح</a>
	</li>
	<li>
		len()‎<code>‎</code>: تُعيد طول تسلسل أو مجموعة
	</li>
</ul>
<p>
	هذه الدوال المضمّنة وغيرها مفيدة، لكنها محدودة، لهذا يستخدم المطورون الوحدات (modules) لتطوير برامج أكثر تعقيدًا.
</p>

<p>
	الوحدات (Modules) هي ملفات بايثون ذات امتداد <code>‎</code>.py، والتي تحوي شيفرات بايثون. يمكن التعامل مع أيّ ملف بايثون على أنه وحدة. مثلًا، إن كان هناك ملف بايثون يسمى <code>hello.py</code>، فسيكون اسم الوحدة المقابلة له <code>hello</code>، والذي يمكن استيراده في ملفات بايثون الأخرى، أو استخدامه في مترجم (interpreter) سطر أوامر بايثون. ستتعلم في المقالة التالية كيفية إنشاء الوحدات.
</p>

<p>
	يمكن للوحدات أن تعرِّف دوالًا وأصنافًا <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r729/" rel="">ومتغيرات</a> يمكن الرجوع إليها من ملفات بايثون الأخرى، أو من مترجم سطر أوامر بايثون.
</p>

<p>
	في بايثون، يمكنك الوصول إلى الوحدات باستخدام العبارة <code>import</code>. عند فعل ذلك، ستُنفَّذ شيفرة الوحدة، مع الاحتفاظ بنطاقات (scopes) التعريفات حتى تكون متاحة في ملفك الحالي.
</p>

<p>
	عندما تستورد بايثون وحدةً باسم <code>hello</code> على سبيل المثال، فسيبحث المترجم أولًا عن وحدة مضمّنة باسم <code>hello</code>. فإن لم يجد، فسيبحث عن ملف يسمى <code>hello.py</code> في قائمة من المجلدات يحددها المتغير <code>sys.path</code>.
</p>

<p>
	سيرشدك هذا الدرس إلى كيفية البحث عن الوحدات وتثبيتها، واستيرادها، وإعادة تسميتها (aliasing).
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="32009" href="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bda94abcc_.jpg.d09d9a79673c9df67866ca21ade7f88a.jpg" rel=""><img alt="كيفية استيراد الوحدات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="32009" data-unique="t3gwsxtbp" src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bda95fd9c_.thumb.jpg.78496ddca088ff1f371ba3eda0a259e0.jpg"></a>
</p>

<h2>
	تثبيت الوحدات
</h2>

<p>
	هناك عدد من الوحدات المضمنة في <a href="https://docs.python.org/3/library/" rel="external nofollow">مكتبة بايثون القياسية</a> التي تحتوي على العديد من الوحدات التي توفر الكثير من وظائف النظام، أو توفر حلولًا قياسية. مكتبة بايثون القياسية تأتي مع كل توزيعات بايثون.
</p>

<p>
	للتحقق من أنّ وحدات بايثون جاهزة للعمل، ادخل إلى بيئة برمجة بايثون 3 المحلية، أو بيئة البرمجة المستندة إلى الخادم، وشغّل مترجم بايثون في سطر الأوامر على النحو التالي:
</p>

<pre class="ipsCode">
(my_env) sammy@ubuntu:~/environment$ python
</pre>

<p>
	من داخل المترجم، يمكنك تنفيذ العبارة <code>import</code> مع اسم الوحدة للتأكد من أنّها جاهزة:
</p>

<pre class="ipsCode" id="ips_uid_5889_13">
import math</pre>

<p>
	لمّا كانت <code>math</code> وحدة مضمّنة، فينبغي أن يُكمل المترجم المهمة دون أي مشاكل، ثم يعود إلى المحث (prompt). هذا يعني أنك لست بحاجة إلى فعل أيّ شيء للبدء في استخدام الوحدة <code>math</code>.
</p>

<p>
	لننفِّذ الآن العبارة <code>import</code> مع وحدة قد لا تكون مُثبّتة عندك، مثل <code>matplotlib</code>، وهي مكتبة للرسم ثنائي الأبعاد:
</p>

<pre class="ipsCode" id="ips_uid_5889_15">
import matplotlib</pre>

<p>
	إذا لم تكن <code>matplotlib</code> مثبتة، فستتلقّى خطأً مثل هذا:
</p>

<pre class="ipsCode">
ImportError: No module named 'matplotlib'
</pre>

<p>
	يمكنك إيقاف مترجم بايثون بالضغط على <code>CTRL + D</code>، ثم تثبيت الوحدة <code>matplotlib</code> عبر <a href="https://academy.hsoub.com/questions/5121-%D9%83%D9%8A%D9%81-%D8%A3%D9%82%D9%88%D9%85-%D8%A8%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%AD%D8%B2%D9%85-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-pip%D8%9F/#comment-10868" rel="">pip</a> بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">
(my_env) sammy@ubuntu:~/environment$ pip install matplotlib
</pre>

<p>
	بمجرد تثبيتها، يمكنك استيراد <code>matplotlib</code> من مترجم بايثون باستخدام <code>import matplotlib</code>، ولن يحدث أيّ خطأ.
</p>

<h2>
	استيراد الوحدات
</h2>

<p>
	للاستفادة من الدوال الموجودة في الوحدة، ستحتاج إلى استيراد الوحدة عبر التعليمة <code>import</code>.
</p>

<p>
	تتألف التعليمة <code>import</code> من الكلمة المفتاحية <code>import</code> معقوبة باسم الوحدة.
</p>

<p>
	يُصرَّح عن عملية استيراد الوحدات في أعلى ملفات بايثون، قبل الأسطر التوجيهية (shebang lines أي الأسطر التي تبدأ بـ <code>‎#!‎</code>)، أو التعليقات العامة.
</p>

<p>
	لذلك، سنستورد في ملف برنامج بايثون <code>my_rand_int.py</code> الوحدة <code>random</code> لتوليد أعداد عشوائية على النحو التالي:
</p>

<pre class="ipsCode">
import random
</pre>

<p>
	عندما نستورد وحدة، فإننا نجعلها متاحة في برنامجنا الحالي كفضاء أسماء (namespace) منفصل. هذا يعني أنه سيتعيّن علينا الرجوع إلى الدالة باستخدام الصياغة النقطية (dot notation) على النحو التالي <code>[module].[function]</code>.
</p>

<p>
	عمليًا، باستخدام مثال الوحدة <code>random</code>، ستبدو الشفرة كما يلي:
</p>

<ul>
<li>
		<code>random.randint()‎‎‎</code>: تستدعي الدالة لإعادة عدد صحيح عشوائي، أو
	</li>
	<li>
		<code>random.randrange()‎‎</code>: تستدعي الدالة لإعادة عنصر عشوائي من نطاق محدد.
	</li>
</ul>
<p>
	دعنا ننشئ حلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a> لتوضيح كيفية استدعاء دالة من الوحدة <code>random</code> ضمن البرنامج <code>my_rand_int.py</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_17" style="">
<span class="kwd">import</span><span class="pln"> random

</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">10</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">random</span><span class="pun">.</span><span class="pln">randint</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">25</span><span class="pun">))</span></pre>

<p>
	يستورد هذا البرنامج الصغير الوحدة <code>random</code> في السطر الأول، ثم ينتقل إلى الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a> التي ستمر على 10 عناصر. داخل الحلقة، سيطبع البرنامج عددًا صحيحًا عشوائيًا من المجال <code>1</code> إلى <code>25</code> (مشمول). يُمرّّر <a href="https://wiki.hsoub.com/Python/int" rel="external">العددان الصحيحان</a> 1 و 25 إلى random.randint()<code>‎‎</code> كمعاملين.
</p>

<p>
	عند تنفيذ البرنامج باستخدام الأمر<code>python my_rand_int.py</code>، ستظهر 10 أعداد صحيحة عشوائية في المخرجات. نظرًا لأنّ هذه العناصر عشوائية، فستحصل على الأرجح على أعداد مختلفة في كل مرة تنفّذ فيها البرنامج، لكنها عمومًا ستبدو كما يلي:
</p>

<pre class="ipsCode">
6
9
1
14
3
22
10
1
15
9
</pre>

<p>
	الأعداد الصحيحة كلها محصورة بين <code>1</code> و <code>25</code>.
</p>

<p>
	إذا كنت ترغب في استخدام دوال من أكثر من وحدة، يمكنك ذلك عن طريق إضافة عدة تعليمات استيراد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_19" style="">
<span class="kwd">import</span><span class="pln"> random
</span><span class="kwd">import</span><span class="pln"> math</span></pre>

<p>
	قد تصادف برامج تستورد عدة وحدات مفصولة بفواصل - مثل <code>import random, math</code> - ولكنّ هذا لا يتوافق مع دليل التنسيق <a href="https://www.python.org/dev/peps/pep-0008/#imports" rel="external nofollow">PEP 8</a>.
</p>

<p>
	للاستفادة من الوحدة الإضافية، يمكننا إضافة الثابت <code>pi</code> من الوحدة <code>math</code> إلى برنامجنا، وتقليل عدد الأعداد الصحيحة العشوائية المطبوعة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_21" style="">
<span class="kwd">import</span><span class="pln"> random
</span><span class="kwd">import</span><span class="pln"> math


</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">5</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">random</span><span class="pun">.</span><span class="pln">randint</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">25</span><span class="pun">))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">math</span><span class="pun">.</span><span class="pln">pi</span><span class="pun">)</span></pre>

<p>
	الآن، عند تنفيذ البرنامج، سنحصل على مخرجات على الشكل التالي، مع تقريب للعدد <code>pi</code> في السطر الأخير:
</p>

<pre class="ipsCode">
18
10
7
13
10
3.141592653589793
</pre>

<p>
	تتيح لك التعليمة <code>import</code> استيراد وحدة واحدة أو أكثر إلى برامجك، وهذ يمكّنك من الاستفادة مما تحويها تلك الوحدات.
</p>

<h2>
	استخدام الصياغة <code>from ... import</code>
</h2>

<p>
	للإشارة إلى عناصر من وحدة مستوردة ضمن فضاء الأسماء، يمكنك استخدام التعليمة <code>from ... import</code>. عندما تستورد الوحدات بهذه الطريقة، سيكون بمقدورك الرجوع إلى الدوال بأسمائها فقط، بدلًا من استخدام الصياغة النقطية.
</p>

<p>
	في هذه الصياغة، يمكنك تحديد التعريفات التي تود الإشارة إليها مباشرة.
</p>

<p>
	في بعض البرامج، قد ترى العبارة <code>* from ... import</code>، إذ تشير العلامة <code>*</code> إلى جميع العناصر الموجودة في الوحدة، ولكنّ هذه الصياغة غير معتمدة في <a href="https://www.python.org/dev/peps/pep-0008/#imports" rel="external nofollow">PEP 8</a>.
</p>

<p>
	سنحاول في البداية استيراد دالة واحدة من الوحدة <code>random</code>، وهي <code>randint()‎‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_23" style="">
<span class="kwd">from</span><span class="pln"> random </span><span class="kwd">import</span><span class="pln"> randint</span></pre>

<p>
	هنا، نستدعي أولًا الكلمة المفتاحية <code>from</code>، ثم <code>random</code>. بعد ذلك، نستخدم الكلمة المفتاحية <code>import</code>، ونستدعي الدالة المحددة التي نودّ استخدامها.
</p>

<p>
	الآن، عندما نرغب في استخدام هذه الدالة في برنامجنا، لن نستدعي الدالة وفق الصياغة النقطية، <code>random.randint()‎‎</code>، ولكن سنستدعيها باسمها مباشرةً، أي <code>randint()‎‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_25" style="">
<span class="kwd">from</span><span class="pln"> random </span><span class="kwd">import</span><span class="pln"> randint


</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">10</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">randint</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">25</span><span class="pun">))</span></pre>

<p>
	عند تنفيذ البرنامج، ستتلقى مخرجات مشابهة لما تلقيته مسبقًا.
</p>

<p>
	يتيح لنا استخدام <code>from ... import</code> الرجوع إلى العناصر المعرّفة في الوحدة من فضاء الأسماء الخاص ببرنامجنا، مما يتيح لنا تجنب استخدام الصياغة النقطية الطويلة.
</p>

<h2>
	الأسماء المستعارة في الوحدات
</h2>

<p>
	يمكن تعديل أسماء الوحدات ودوالها داخل بايثون باستخدام الكلمة المفتاحية <code>as</code>.
</p>

<p>
	قد ترغب في تغيير اسم ما لأنك تستخدمه سلفًا في برنامجك، أو أنه مستخدم في وحدة أخرى مستوردة، أو قد ترغب في اختصار اسم طويل تستخدمه كثيرًا. يمكنك ذلك عبر الصياغة التالية:
</p>

<pre class="ipsCode">
import [module] as [another_name]
</pre>

<p>
	لنعدّل اسم الوحدة <code>math</code> في ملف البرنامج <code>my_math.py</code>. سنغيّر اسم الوحدة <code>math</code> إلى <code>m</code> من أجل اختصاره. سيبدو برنامجنا المعدل كالتالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_28" style="">
<span class="kwd">import</span><span class="pln"> math </span><span class="kwd">as</span><span class="pln"> m


</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">m</span><span class="pun">.</span><span class="pln">pi</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">m</span><span class="pun">.</span><span class="pln">e</span><span class="pun">)</span></pre>

<p>
	سنشير داخل البرنامج إلى الثابت <code>pi</code> بالتعبير <code>m.pi</code>، بدلًا من <code>math.pi</code>.
</p>

<p>
	يشيع في بعض الوحدات استخدام أسماء مستعارة (aliases) محدَّدة. فمثلًا، يدعو التوثيق الرسمي للوحدة <code>matplotlib.pyplot</code> إلى استخدام الاسم المستعار <code>plt</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5889_30" style="">
<span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt</span></pre>

<p>
	يسمح هذا للمبرمجين بإلحاق الكلمة القصيرة <code>plt</code> بأي دالة متاحة داخل الوحدة، كما هو الحال في <code>plt.show()‎‎</code>.
</p>

<h2>
	خلاصة
</h2>

<p>
	يسمح مفهوم الوحدات باستدعاء دوال غير مضمّنة في بايثون. فبعض الوحدات مُثبّتة كجزء من بايثون، وبعضها سنثبّتها عبر pip.
</p>

<p>
	يتيح لنا استخدام الوحدات توسيع برامجنا وتقويتها، لأنها تضع تحت تصرّفنا شفرات جاهزة للاستخدام. يمكننا أيضًا <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">إنشاء وحدات خاصة بنا</a>، لنستخدمها نحن، أو المبرمجون الآخرون وهذا ما سنتعرف عليه في المقال التالي.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3" rel="external nofollow">How To Import Modules in Python 3</a> لصاحبته Lisa Tagliaferri.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r745/" rel="">كيفية كتابة الوحدات في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%85%D9%8A%D8%B3-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r743/" rel="">فهم القواميس في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">744</guid><pubDate>Sat, 05 Oct 2019 18:04:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x627;&#x644;&#x642;&#x648;&#x627;&#x645;&#x64A;&#x633; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%85%D9%8A%D8%B3-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r743/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bbe0ebd5b_.jpg.ffdd606d988dc39b26583d46759cc8bb.jpg" /></p>

<p>
	القاموس هو نوع مُضمَّن في بايثون. تربط <a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a> مفاتيح بقيم على هيئة أزواج، وهذه الأزواج مفيدة لتخزين البيانات في بايثون.
</p>

<p>
	تستخدم <a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a> عادةً لتخزين البيانات المترابطة، مثل المعلومات المرتبطة برقم تعريف، أو ملفات تعريف المستخدم، وتُنشأ باستخدام الأقواس المعقوصة <code>{}</code>.
</p>

<p>
	تبدو القواميس على الشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_6" style="">
<span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">987</span><span class="pun">}</span></pre>

<p>
	بالإضافة إلى القوسين المعقوصين، لاحظ وجود النقطتين الرأسيتين (<code>:</code>) في القاموس. الكلمات الموجودة على يسار النقطتين الرأسيتين هي المفاتيح التي قد تكون أيَّ نوع بيانات غير قابل للتغيير. المفاتيح في القاموس أعلاه هي:
</p>

<ul>
<li>
		<code>username</code>
	</li>
	<li>
		<code>online</code> *<code>followers</code>
	</li>
</ul>
<p>
	المفاتيح في المثال أعلاه عبارة عن <a href="https://wiki.hsoub.com/Python/str" rel="external">سلاسل نصية</a>.
</p>

<p>
	تمثِّل الكلمات الموجودة على يمين النقطتين «القيم». يمكن أن تتألف القيم من أي نوع من البيانات. القيم في القاموس أعلاه هي:
</p>

<ul>
<li>
		<code>sammy-shark</code>
	</li>
	<li>
		<code>True</code> *<code>987</code>
	</li>
</ul>
<p>
	قيم القاموس أعلاه هي إمَّا <a href="https://wiki.hsoub.com/Python/str" rel="external">سلاسل نصية</a> أو <a href="https://wiki.hsoub.com/Python/boolean" rel="external">قيم منطقية</a> أو <a href="https://wiki.hsoub.com/Python/int" rel="external">أعداد صحيحة</a>.
</p>

<p>
	سنطبع الآن القاموس <code>sammy</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_8" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">)</span><span class="pln">   </span><span class="com"># {'username': 'sammy-shark', 'followers': 987, 'online': True}</span></pre>

<p>
	نلاحظ بالنظر إلى المخرجات تغير ترتيب الأزواج قيمة-مفتاح (key-value). في بايثون 3.5 وما قبله، إذ القواميس غير مرتبة. لكن ابتداءً من بايثون 3.6، صارت القواميس مرتبةً. بغض النظر عما إذا كان القاموس مرتبًا أم لا، ستظل الأزواج قيمة-مفتاح كما هي، وهذا سيمكّنك من الوصول إلى البيانات بناء على ترابطاتها.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="32007" href="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bbe7000e0_.jpg.05374375e237c44c354c9c260f10676c.jpg" rel=""><img alt="فهم القواميس.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="32007" data-unique="ssxh2u3av" src="https://academy.hsoub.com/uploads/monthly_2019_10/5d95bbe71cf47_.thumb.jpg.34b598093bcd00996ca607e08964e3b1.jpg"></a>
</p>

<h2>
	الوصول إلى عناصر القاموس
</h2>

<p>
	يمكننا الوصول إلى قيم محدَّدة في القاموس بالرجوع إلى المفاتيح المرتبطة بها ويمكن أيضًا الاستعانة ببعض التوابع الجاهزة للوصول إلى القيم أو المفاتيح أو كليهما.
</p>

<h3>
	الوصول إلى عناصر القاموس باستخدام المفاتيح
</h3>

<p>
	إذا أردنا الحصول على اسم المستخدم في Sammy، فيمكننا ذلك عن طريق استدعاء <code>sammy['username']‎</code>. هذا مثال على ذلك:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_10" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">[</span><span class="str">'username'</span><span class="pun">])</span><span class="pln">    </span><span class="com">#  sammy-shark</span></pre>

<p>
	تتصرف القواميس كقواعد البيانات، فهي بدلًا من فهرسة العناصر بأعداد صحيحة، كما هو الحال في <a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>، فإنها تُفهرس العناصر (أو قيم القاموس) بمفاتيح، ويمكنك عبر تلك المفاتيح الحصول على القيم المقابلة لها.
</p>

<p>
	باستدعاء المفتاح <code>username</code>، سنحصل على القيمة المرتبطة به، وهي <code>sammy-shark</code>.
</p>

<p>
	وبالمِثل، يمكن استدعاء القيم الأخرى في القاموس <code>sammy</code> باستخدام نفس الصياغة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_12" style="">
<span class="pln">sammy</span><span class="pun">[</span><span class="str">'followers'</span><span class="pun">]</span><span class="pln">  </span><span class="com"># 987</span><span class="pln">

sammy</span><span class="pun">[</span><span class="str">'online'</span><span class="pun">]</span><span class="pln">      </span><span class="com"># True</span></pre>

<h3>
	استخدام التوابع للوصول إلى العناصر
</h3>

<p>
	بالإضافة إلى استخدام المفاتيح للوصول إلى القيم، يمكننا أيضًا استخدام بعض التوابع المُضمّنة، مثل:
</p>

<ul>
<li>
		<code>dict.keys()‎‎</code>: الحصول على المفاتيح
	</li>
	<li>
		<code>dict.values()‎</code>: الحصول على القيم
	</li>
	<li>
		<code>dict.items()‎</code>: الحصول على العناصر على هيئة قائمة من أزواج <code>(key, value)</code>
	</li>
</ul>
<p>
	لإعادة المفاتيح، نستخدم التابع <code>dict.keys()‎</code>، كما يوضح المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_14" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">())</span><span class="pln">   </span><span class="com">#  dict_keys(['followers', 'username', 'online'])</span></pre>

<p>
	تلقينا في المخرجات كائنَ عرض تكراري (iterable view object) من الصنف <code>dict_keys</code> يحوي المفاتيح ثم طُبِعت المفاتيح على هيئة <a href="https://wiki.hsoub.com/Python/list" rel="external">قائمة</a>.
</p>

<p>
	يمكن استخدام هذا التابع للاستعلام من القواميس. على سبيل المثال، يمكننا البحث عن المفاتيح المشتركة بين قاموسين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_16" style="">
<span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">987</span><span class="pun">}</span><span class="pln">
jesse </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'JOctopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln"> </span><span class="str">'points'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">723</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">for</span><span class="pln"> common_key </span><span class="kwd">in</span><span class="pln"> sammy</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> jesse</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">[</span><span class="pln">common_key</span><span class="pun">],</span><span class="pln"> jesse</span><span class="pun">[</span><span class="pln">common_key</span><span class="pun">])</span></pre>

<p>
	يحوي القاموسان <code>sammy</code> و <code>jesse</code> معلومات تعريف المستخدم. كما أنّ لهما مفاتيح مختلفة، لأنّ لدى Sammy ملف تعريف اجتماعي يضم مفتاحًا <code>followers</code> يمثل المتابعين على الشبكة الاجتماعية، أما <code>Jesse</code> فلها ملف تعريف للألعاب يضم مفتاحًا <code>points</code> يمثل النقاط. كلا القاموسين يشتركان في المفتاحين <code>username</code> و <code>online</code>، ويمكن العثور عليهما عند تنفيذ هذا البُريمج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_18" style="">
<span class="com"># المخرجات</span><span class="pln">
sammy</span><span class="pun">-</span><span class="pln">shark </span><span class="typ">JOctopus</span><span class="pln">
</span><span class="kwd">True</span><span class="pln"> </span><span class="kwd">False</span></pre>

<p>
	يمكننا بالتأكيد تحسين البرنامج لتسهيل قراءة المخرجات، ولكنّ الغرض هنا هو توضيح إمكانية استخدام <code>dict.keys()‎</code> لرصد المفاتيح المشتركة بين عدة قواميس. هذا مفيد بشكل خاص عند العمل على القواميس الكبيرة.
</p>

<p>
	وبالمثل، يمكننا استخدام التابع <code>dict.values()‎</code> للاستعلام عن القيم الموجودة في القاموس <code>sammy</code> على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_20" style="">
<span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">987</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">.</span><span class="pln">values</span><span class="pun">())</span><span class="pln">   </span><span class="com">#  dict_values([True, 'sammy-shark', 987])</span></pre>

<p>
	يُعيد كلا التابعان values()<code>‎</code> و <code>keys()‎‎</code> قوائم غير مرتبة تضم مفاتيح وقيم القاموس <code>sammy</code> على هيئة كائِني عرضٍ من الصنف <code>dict_values</code> و <code>dict_keys</code> على التوالي.
</p>

<p>
	إن أردت الحصول على الأزواج الموجودة في القاموس، فاستخدم التابع items()<code>‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_24" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">.</span><span class="pln">items</span><span class="pun">())</span><span class="pln">  </span></pre>

<p>
	المخرجات ستكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_26" style="">
<span class="pln">dict_items</span><span class="pun">([(</span><span class="str">'online'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="str">'username'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="str">'followers'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">987</span><span class="pun">)])</span></pre>

<p>
	النتيجة المعادة ستكون على هيئة قائمة مكونة من أزواج <code>(key, value)</code> من الصنف <code>dict_items</code>.
</p>

<p>
	يمكننا التكرار (iterate) على القائمة المُعادة باستخدام الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a>. على سبيل المثال، يمكننا طباعة جميع مفاتيح وقيم القاموس المحدد، ثم جعلها أكثر مقروئية عبر إضافة سلسلة نصية توضيحية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_28" style="">
<span class="kwd">for</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> value </span><span class="kwd">in</span><span class="pln"> sammy</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> </span><span class="str">'is the key for the value'</span><span class="pun">,</span><span class="pln"> value</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_30" style="">
<span class="pln">online </span><span class="kwd">is</span><span class="pln"> the key </span><span class="kwd">for</span><span class="pln"> the value </span><span class="kwd">True</span><span class="pln">
followers </span><span class="kwd">is</span><span class="pln"> the key </span><span class="kwd">for</span><span class="pln"> the value </span><span class="lit">987</span><span class="pln">
username </span><span class="kwd">is</span><span class="pln"> the key </span><span class="kwd">for</span><span class="pln"> the value sammy</span><span class="pun">-</span><span class="pln">shark</span></pre>

<p>
	كرَّرت الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a> على العناصر الموجودة في القاموس <code>sammy</code>، وطبعت المفاتيح والقيم سطرًا سطرًا، مع إضافة معلومات توضيحية.
</p>

<h2>
	تعديل القواميس
</h2>

<p>
	القواميس هي هياكل بيانات قابلة للتغيير (mutable)، أي يمكن تعديلها. في هذا القسم، سنتعلم كيفية إضافة عناصر إلى قاموس، وكيفية حذفها.
</p>

<h3>
	إضافة وتغيير عناصر القاموس
</h3>

<p>
	يمكنك إضافة أزواج قيمة-مفتاح إلى قاموس دون استخدام توابع أو دوال باستخدام الصياغة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_36" style="">
<span class="pln">dict</span><span class="pun">[</span><span class="pln">key</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> value</span></pre>

<p>
	في المثال التالي، سنضيف زوجًا مفتاح-قيمة إلى قاموس يُسمى <code>usernames</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_34" style="">
<span class="pln">usernames </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'Sammy'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Jamie'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'mantisshrimp54'</span><span class="pun">}</span><span class="pln">

usernames</span><span class="pun">[</span><span class="str">'Drew'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'squidly'</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">usernames</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  {'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}</span></pre>

<p>
	لاحظ أنّ القاموس قد تم تحديثه بالزوج <code>'Drew': 'squidly'</code>. نظرًا لأنّ القواميس غير مرتبة، فيمكن أن يظهر الزوج المُضاف في أيّ مكان في مخرجات القاموس. إذا استخدمنا القاموس <code>usernames</code> لاحقًا، فسيظهر فيه الزوج المضاف حديثًا.
</p>

<p>
	يمكن استخدام هذه الصياغة لتعديل القيمة المرتبطة بمفتاح معيّن. في هذه الحالة، سنشير إلى مفتاح موجود سلفًا، ونمرر قيمة مختلفة إليه.
</p>

<p>
	سنعرِّف في المثال التالي قاموسًا باسم <code>drew</code> يمثِّل البيانات الخاصة بأحد المستخدمين على بعض الشبكات الاجتماعية. حصل هذا المستخدم على عدد من المتابعين الإضافيين اليوم، لذلك سنحدّث القيمة المرتبطة بالمفتاح <code>followers</code> ثم نستخدم التابع <code>print()‎</code> للتحقق من أنّ القاموس قد عُدِّل.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_38" style="">
<span class="pln">drew </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'squidly'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">305</span><span class="pun">}</span><span class="pln">

drew</span><span class="pun">[</span><span class="str">'followers'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">342</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">drew</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  {'username': 'squidly', 'followers': 342, 'online': True}</span></pre>

<p>
	في المخرجات نرى أنّ عدد المتابعين قد قفز من <code>305</code> إلى <code>342</code>.
</p>

<p>
	يمكننا استخدام هذه الطريقة لإضافة أزواج قيمة-مفتاح إلى القواميس عبر مدخلات المستخدم. سنكتب بريمجًا سريعًا، <code>usernames.py</code>، يعمل من سطر الأوامر ويسمح للمستخدم بإضافة الأسماء وأسماء المستخدمين المرتبطة بها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_40" style="">
<span class="com"># تعريف القاموس الأصلي</span><span class="pln">
usernames </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'Sammy'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Jamie'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'mantisshrimp54'</span><span class="pun">}</span><span class="pln">
</span><span class="com"># while إعداد الحلقة التكرارية </span><span class="pln">
</span><span class="kwd">while</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">:</span><span class="pln">
    </span><span class="com"># اطلب من المستخدم إدخال اسم</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Enter a name:'</span><span class="pun">)</span><span class="pln">

    </span><span class="com"># name تعيين المدخلات إلى المتغير  </span><span class="pln">
   name </span><span class="pun">=</span><span class="pln"> input</span><span class="pun">()</span><span class="pln">

    </span><span class="com"># تحقق مما إذا كان الاسم موجودًا في القاموس ثم اطبع الرد</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> name </span><span class="kwd">in</span><span class="pln"> usernames</span><span class="pun">:</span><span class="pln">
         </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">usernames</span><span class="pun">[</span><span class="pln">name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">' is the username of '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> name</span><span class="pun">)</span><span class="pln">

    </span><span class="com"># إذا لم يكن الاسم في القاموس </span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">

        </span><span class="com"># اطبع الرد        </span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">'I don\'t have '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> name </span><span class="pun">+</span><span class="pln"> </span><span class="str">'\'s username, what is it?'</span><span class="pun">)</span><span class="pln">

        </span><span class="com"># خذ اسم مستخدم جديد لربطه بذلك الاسم </span><span class="pln">
        username </span><span class="pun">=</span><span class="pln"> input</span><span class="pun">()</span><span class="pln">

        </span><span class="com"># name عين قيمة اسم المستخدم إلى المفتاح </span><span class="pln">
        usernames</span><span class="pun">[</span><span class="pln">name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> username

        </span><span class="com"># اطبع ردًا يبيّن أنّ البيانات قد حُدّثت</span><span class="pln">
        </span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Data updated.'</span><span class="pun">)</span></pre>

<p>
	سننفِّذ البرنامج من <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B3%D8%B7%D8%B1-%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D9%8A-r716/" rel="">سطر الأوامر</a>:
</p>

<pre class="ipsCode">
python usernames.py
</pre>

<p>
	عندما ننفّذ البرنامج، سنحصل على مخرجات مشابهة لما يلي:
</p>

<pre class="ipsCode" id="ips_uid_5122_45">
Enter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:</pre>

<p>
	عند الانتهاء من اختبار البرنامج، اضغط على <code>CTRL + C</code> للخروج من البرنامج. يمكنك تخصيص حرف لإنهاء البرنامج (مثل الحرف <code>q</code>)، وجعل البرنامج يُنصت له عبر العبارات الشرطية.
</p>

<p>
	يوضح هذا المثال كيف يمكنك تعديل القواميس بشكل تفاعلي. في هذا البرنامج، بمجرد خروجك باستخدام <code>CTRL + C</code>، ستفقد جميع بياناتك، إلا إن <a href="https://wiki.hsoub.com/Python/reading_writing_files" rel="external">خزّنت البيانات في ملف</a>.
</p>

<p>
	يمكننا أيضًا إضافة عناصر إلى القواميس وتعديلها باستخدام التابع <code>dict.update()‎</code>. هذا التابع مختلف عن التابع <code>append()‎</code> الذي يُستخدم مع القوائم.
</p>

<p>
	سنضيف المفتاح <code>followers</code> في القاموس <code>jesse</code> أدناه، ونَمنحه قيمة عددية صحيحة بواسطة التابع <code>jesse.update()‎</code>. بعد ذلك، سنطبع القاموس المُحدّث.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_47" style="">
<span class="pln">jesse </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'JOctopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln"> </span><span class="str">'points'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">723</span><span class="pun">}</span><span class="pln">

jesse</span><span class="pun">.</span><span class="pln">update</span><span class="pun">({</span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">481</span><span class="pun">})</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">jesse</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  {'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}</span></pre>

<p>
	من المخرجات، نتبيّن أننا نجحنا في إضافة الزوج <code>‎</code>followers<code>: 481 إلى القاموس </code>jesse.
</p>

<p>
	يمكننا أيضًا استخدام التابع dict.update()<code>‎</code> لتعديل زوج قيمة-مفتاح موجود سلفًا عن طريق استبدال قيمة مفتاح معيَّن.
</p>

<p>
	سنغيِّر القيمة المرتبطة بالمفتاح <code>online</code> في القاموس Sammy من <code>True</code> إلى <code>False</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_49" style="">
<span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'sammy-shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">987</span><span class="pun">}</span><span class="pln">

sammy</span><span class="pun">.</span><span class="pln">update</span><span class="pun">({</span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">})</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  {'username': 'sammy-shark', 'followers': 987, 'online': False}</span></pre>

<p>
	يغيّر السطر sammy.update({'online': False})<code>‎</code> القيمة المرتبطة بالمفتاح <code>'online'</code> من <code>True</code> إلى <code>False</code>. عند استدعاء التابع print()‎<code>‎</code> على القاموس، يمكنك أن ترى في المخرجات أنّ التحديث قد تمّ.
</p>

<p>
	لإضافة عناصر إلى القواميس أو تعديل القيم، يمكن إمّا استخدام الصياغة <code>dict[key] = value</code>، أو التابع dict.update()<code>‎</code>.
</p>

<h2>
	حذف عناصر من القاموس
</h2>

<p>
	كما يمكنك إضافة أزواج قيمة-مفتاح إلى القاموس، أو تغيير قيمه، يمكنك أيضًا حذف العناصر الموجودة في القاموس.
</p>

<p>
	لتزيل زوج قيمة-مفتاح من القاموس، استخدم الصياغة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_51" style="">
<span class="kwd">del</span><span class="pln"> dict</span><span class="pun">[</span><span class="pln">key</span><span class="pun">]</span></pre>

<p>
	لنأخذ القاموس <code>jesse</code> الذي يمثل أحد المستخدمين، ولنفترض أنّ <code>jesse</code> لم تعد تستخدم المنصة لأجل ممارسة الألعاب، لذلك سنزيل العنصر المرتبط بالمفتاح <code>points</code>. بعد ذلك، سنطبع القاموس لتأكيد حذف العنصر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_53" style="">
<span class="pln">jesse </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'JOctopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln"> </span><span class="str">'points'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">723</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">481</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">del</span><span class="pln"> jesse</span><span class="pun">[</span><span class="str">'points'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">jesse</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  {'online': False, 'username': 'JOctopus', 'followers': 481}</span></pre>

<p>
	يزيل السطر <code>del jesse ['points']‎</code> الزوج <code>'points': 723</code> من القاموس <code>jesse</code>.
</p>

<p>
	إذا أردت محو جميع عناصر القاموس، فيمكنك ذلك باستخدام التابع <code>dict.clear()‎</code>. سيَبقى هذا القاموس في الذاكرة، وهذا مفيد في حال احتجنا إلى استخدامه لاحقًا في البرنامج، بيْد أنه سيُفرِّغ جميع العناصر من القاموس.
</p>

<p>
	دعنا نزيل كل عناصر القاموس <code>jesse</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_55" style="">
<span class="pln">jesse </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'username'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'JOctopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'online'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln"> </span><span class="str">'points'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">723</span><span class="pun">,</span><span class="pln"> </span><span class="str">'followers'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">481</span><span class="pun">}</span><span class="pln">

jesse</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">()</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">jesse</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  {}</span></pre>

<p>
	تُظهِر المخرجات أنّ القاموسًا صار فارغًا الآن.
</p>

<p>
	إذا لم تعد بحاجة إلى القاموس، فاستخدم <code>del</code> للتخلص منه بالكامل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5122_57" style="">
<span class="kwd">del</span><span class="pln"> jesse

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">jesse</span><span class="pun">)</span></pre>

<p>
	إذا نفّذت الأمر <code>print()‎</code> بعد حذف القاموس <code>jesse</code>، سوف تتلقى الخطأ التالي:
</p>

<pre class="ipsCode">
NameError: name 'jesse' is not defined
</pre>

<h2>
	خلاصة
</h2>

<p>
	ألقينا في هذه المقالة نظرة على القواميس في بايثون. تتألف القواميس من أزواج قيمة-مفتاح، وتوفر حلًّا ممتازًا لتخزين البيانات دون الحاجة إلى فهرستها. يتيح لنا ذلك استرداد القيم بناءً على معانيها وعلاقتها بأنواع البيانات الأخرى.
</p>

<p>
	يمكنك تعلم المزيد عن أنواع البيانات الأخرى من المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r720/" rel="">"فهم أنواع البيانات في بايثون 3"</a>.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3" rel="external nofollow">Understanding Dictionaries in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r744/" rel="">كيفية استيراد الوحدات في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-tuples-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r507/" rel="">فهم نوع البيانات Tuples في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">743</guid><pubDate>Thu, 03 Oct 2019 13:08:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x646;&#x648;&#x639; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; Tuples &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-tuples-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r507/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611e1f2e1f7_tuple.jpg.301c0c664eb54d4ea6686ecb4a5f9f28.jpg" /></p>

<p>
	يبدو نوع البيانات tuple في بايثون كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'elkhorn coral'</span><span class="pun">)</span></pre>

<p>
	tuple (صف وتُجمَع إلى صفوف) هي بنية بيانات تُمثِّل سلسلة مرتبة من العناصر غير القابلة للتبديل، وبالتالي لا يمكن تعديل القيم الموجودة فيها.<br>
	يستعمل نوع البيانات tuple لتجميع البيانات، فكل عنصر أو قيمة داخل tuple تُشكِّل جزءًا منه.<br>
	توضع القيم داخل نوع البيانات tuple بين قوسين <code>(</code> <code>)</code> ويُفصَل بينها بفاصلة <code>,</code>، وتبدو القيم الفارغة كما يلي <code>coral = ()‎</code>، لكن إذا احتوى نوع البيانات tuple على قيم –حتى لو كانت قيمةً واحدةً فقط– فيجب وضع فاصلة فيه مثل <code>coral = ('blue coral',)</code>.<br>
	إذا استخدمنا الدالة <code>print()‎</code> على tuple، فسنحصل على الناتج الآتي الذي يُبيّن أنَّ القيمة الناتجة ستوضع بين قوسين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">)</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span></code></pre>

<p>
	عند التفكير بنوع tuple وغيره من بنى البيانات التي تُعبَر من أنوع «المجموعات» (collections)، فمن المفيد أن تضع ببالك مختلف المجموعات الموجودة في حاسوبك: تشكيلة الملفات الموجودة عندك، وقوائم التشغيل للموسيقى، والمفضلة الموجودة في متصفحك، ورسائل بريدك الإلكتروني، ومجموعة مقاطع الفيديو التي تستطيع الوصول إليها من التلفاز، والكثير.<br>
	نوع tuple شبيه بالقوائم (lists)، لكن القيم الموجودة فيه لا يمكن تعديلها، وبسبب ذلك، فأنت تخبر الآخرين أنَّك لا تريد إجراء أيّة تعديلات على هذه السلسلة من القيم عندما تستعمل tuple في شيفرتك. إضافةً إلى ما سبق، ولعدم القدرة على تعديل القيم، فسيكون أداء برنامجك أفضل، حيث ستُنفَّذ الشيفرة بشكل أسرع إذا استعملتَ tuple بدلًا من القوائم (lists).
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31150" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d611e22e716c_tuple.jpg.697f2952cbdd9e9ceb0a1876655e3592.jpg" rel=""><img alt="فهم نوع البيانات tuple.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31150" data-unique="qsjl0f1eh" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611e2307e59_tuple.thumb.jpg.9d3fdac442b2b021562e6d8828da3466.jpg"></a>
</p>

<h2 id="فهرسة-نوع-البيانات-tuple">
	فهرسة نوع البيانات tuple
</h2>

<p>
	يمكن الوصول إلى كل عنصر من عناصر tuple بمفرده لأنَّه سلسلة مرتبة من العناصر، وذلك عبر الفهرسة.<br>
	وكل عنصر يرتبط برقم فهرس، الذي هو عدد صحيح يبدأ من الفهرس <code>0</code>.<br>
	لمثال <code>coral</code> السابق، ستبدو الفهارس والقيم المرتبطة بها كالآتي:
</p>

<center>
	<table border="1"><tbody>
<tr>
<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					<strong>‘blue coral’</strong>
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					<strong>‘staghorn coral’</strong>
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					<strong>‘pillar coral’</strong>
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					<strong>‘elkhorn coral’</strong>
				</td>
			</tr>
<tr>
<td style=" padding: 5px 10px; text-align: center;">
					0
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					1
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					2
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					3
				</td>
			</tr>
</tbody></table>
</center>

<p>
	العنصر الأول الذي يُمثِّل السلسلة النصية <code>'blue coral'</code> تبدأ بالفهرس <code>0</code>، وتنتهي القائمة بالفهرس رقم <code>3</code> المرتبط بالقيمة <code>'elkhorn coral'</code>.<br>
	ولأن كل عنصر من عناصر tuple له رقم فهرس مرتبط به، فسنتمكن من الوصول إلى عناصره فرادى.<br>
	يمكننا الآن الوصول إلى عنصر معيّن في tuple عبر استخدام رقم الفهرس المرتبط به.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="hljs-function"><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">])</span></span><span class="pln">
</span><span class="hljs-title"><span class="pln">pillar</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">coral</span></span></span></code></pre>

<p>
	تتراوح قيم الفهارس في المتغير <code>coral</code> من <code>0</code> إلى <code>3</code> كما هو ظاهر في الجدول السابق، لذا يمكننا استدعاء العناصر الموجودة فيه فرادى كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs css"><span class="hljs-tag"><span class="pln">coral</span></span><span class="hljs-attr_selector"><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span></span><span class="pln">
</span><span class="hljs-tag"><span class="pln">coral</span></span><span class="hljs-attr_selector"><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span></span><span class="pln">
</span><span class="hljs-tag"><span class="pln">coral</span></span><span class="hljs-attr_selector"><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span></span><span class="pln">
</span><span class="hljs-tag"><span class="pln">coral</span></span><span class="hljs-attr_selector"><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span></span></code></pre>

<p>
	إذا حاولنا استدعاء المتغير <code>coral</code> مع رقم فهرس أكبر من <code>3</code>، فستظهر رسالة خطأ تشير إلى أنَّ الفهرس خارج المجال:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs oxygene"><span class="kwd">print</span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">22</span></span><span class="pun">])</span><span class="pln">
</span><span class="typ">IndexError</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">tuple</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">index</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">out</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">of</span></span><span class="pln"> range</span></code></pre>

<p>
	إضافةً إلى أرقام الفهارس الموجبة، يمكننا أيضًا الوصول إلى الفهارس باستخدام رقم فهرس سالب، وذلك بالعد بدءًا من نهاية قائمة العناصر وسيرتبط آخر عنصر بالفهرس <code>‎-1</code>، وهذا مفيدٌ جدًا إذا كان لديك متغير من النوع tuple وكان يحتوي عناصر كثيرة وأردتَ الوصول إلى أحد عناصره انطلاقًا من النهاية.<br>
	ففي مثالنا السابق عن <code>coral</code>، إذا أردنا استخدام الفهارس السالبة فالناتج كالآتي:
</p>

<center>
	<table border="1"><tbody>
<tr>
<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					‘elkhorn coral’
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					‘pillar coral’
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					‘staghorn coral’
				</td>
				<td style="background-color: rgb(255, 181, 181); padding: 5px 10px; text-align: center;">
					‘blue coral’
				</td>
			</tr>
<tr>
<td style=" padding: 5px 10px; text-align: center;">
					-1
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					-2
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					-3
				</td>
				<td style=" padding: 5px 10px; text-align: center;">
					-4
				</td>
			</tr>
</tbody></table>
</center>

<p>
	إذا أردنا طباعة العنصر <code>'blue coral'</code> باستخدام الفهارس السالبة، فستبدو التعليمة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="hljs-function"><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">coral</span><span class="pun">[-</span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">])</span></span><span class="pln">
</span><span class="hljs-title"><span class="pln">blue</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">coral</span></span></span></code></pre>

<p>
	يمكننا إضافة العناصر النصية الموجودة في tuple إلى السلاسل النصية الأخرى باستخدام المعامل <code>+</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs vhdl"><span class="kwd">print</span><span class="pun">(</span><span class="hljs-attribute"><span class="str">'This</span></span><span class="str"> reef </span><span class="hljs-keyword"><span class="str">is</span></span><span class="str"> made up </span><span class="hljs-keyword"><span class="str">of</span></span><span class="str"> '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">])</span><span class="pln">
</span><span class="typ">This</span><span class="pln"> reef </span><span class="hljs-keyword"><span class="kwd">is</span></span><span class="pln"> made up </span><span class="hljs-keyword"><span class="pln">of</span></span><span class="pln"> staghorn coral</span></code></pre>

<p>
	استطعنا في المثال السابق إضافة عنصر موجود في الفهرس <code>1</code> مع السلسلة النصية <code>'This reef is made up of '</code>، ويمكننا أيضًا استخدام المعامل <code>+</code> لإضافة بنيتَي tuple معًا.<br>
	الخلاصة: يمكننا الوصول إلى كل عنصر من عناصر tuple على حدة باستخدام أرقام الفهارس (الموجبة أو السالبة) المرتبطة بها.
</p>

<h2 id="تقطيع-قيم-tuple">
	تقطيع قيم tuple
</h2>

<p>
	يمكننا استخدام الفهارس للوصول إلى عدِّة عناصر من tuple، أما التقطيع فيسمح لنا بالوصول إلى عدِّة قيم عبر إنشاء مجال من أرقام الفهارس المفصولة بنقطتين رأسيتين <code>[x:y]</code>.<br>
	لنقل أننا نريد عرض العناصر الموجودة في وسط المتغير <code>coral</code>، يمكننا فعل ذلك بإنشاء قطعة جديدة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">:</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">])</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">)</span></code></pre>

<p>
	عند إنشاء قطعة جديدة –كما في المثال السابق– فيمثِّل أوّل رقم مكان بدأ القطعة (متضمنةً هذا الفهرس)، ورقم الفهرس الثاني هو مكان نهاية القطعة (دون تضمين هذا الفهرس بالقطعة)، وهذا هو السبب وراء عرض المثال السابق للقيم المرتبطة بالعناصر الموجودة في الفهرسين <code>1</code> و <code>2</code>.<br>
	إذا أردتَ تضمين إحدى نهايتَي القائمة، فيمكنك حذف أحد الأرقام في التعبير <code>tuple[x:y]</code>، فمثلًا، لنقل أننا نريد عرض أوّل ثلاثة عناصر من <code>coral</code>، والتي هي <code>'blue coral'</code> و <code>'staghorn coral'</code> و <code>'pillar coral'</code>، فيمكننا فعل ذلك كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[:</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">])</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">)</span></code></pre>

<p>
	المثال السابق عرض العناصر من بداية القائمة وتوقف قبل العنصر ذي الفهرس <code>3</code>.<br>
	لتضمين كل العناصر الموجودة في نهاية tuple، فيمكننا عكس التعبير السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">:])</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span></code></pre>

<p>
	يمكننا استخدام الفهارس السالبة أيضًا عند التقطيع، كما فعلنا مع أرقام الفهارس الموجبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[-</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">:-</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">])</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral</span><span class="pun">[-</span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">:])</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">)</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span></code></pre>

<p>
	هنالك معاملٌ إضافيٌ يمكننا استعماله ويسمى «الخطوة»، ويُشير إلى عدد العناصر التي يجب تجاوزها بعد الحصول على أوّل عنصر من القائمة.<br>
	حذفنا في جميع أمثلتنا السابقة معامل الخطوة، حيث القيمة الافتراضية له في بايثون هي 1، لذا سنحصل على جميع العناصر الموجودة بين الفهرسَين المذكورين.<br>
	شكل هذا التعبير العام هو <code>tuple[x:y:z]</code>، إذ يُشير المعامل <code>z</code> إلى الخطوة. لنُنشِئ قائمةً أكبر، ثم نقسِّمها، ونعطيها القيمة <code>2</code> كخطوة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="pln">numbers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">7</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">9</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">11</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">12</span></span><span class="pun">)</span><span class="pln">
</span><span class="hljs-function"><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">numbers</span><span class="pun">[</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">:</span><span class="hljs-number"><span class="lit">11</span></span><span class="pun">:</span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">])</span></span><span class="pln">
</span><span class="hljs-params"><span class="pun">(</span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">7</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">9</span></span><span class="pun">)</span></span></span></code></pre>

<p>
	التعبير <code>numbers[1:11:2]</code> سيطبع القيم الموجودة بين رقمين الفهرسين <code>1</code> (بما في ذلك العنصر المرتبط بالفهرس <code>1</code>) و <code>11</code> (دون تضمين ذلك العنصر)، ومن ثم ستخبر قيمةُ الخطوة <code>2</code> البرنامجَ أنَّ يتخطى عنصرًا بين كل عنصرين.<br>
	يمكننا حذف أوّل معاملين واستخدام معامل الخطوة بمفرده بتعبيرٍ برمجيٍ من الشكل <code>tuple[::z]</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="hljs-function"><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">numbers</span><span class="pun">[::</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">])</span></span><span class="pln">
</span><span class="hljs-params"><span class="pun">(</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">9</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">12</span></span><span class="pun">)</span></span></span></code></pre>

<p>
	طبعنا في المثال السابق عناصر <code>numbers</code> بعد ضبط قيمة الخطوة إلى <code>3</code>، وبالتالي سيتم تخطي عنصرين.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs "><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span></code></pre>

<p>
	الخلاصة: تقطيع tuples باستخدام أرقام الفهارس الموجبة والسالبة واستعمال معامل الخطوة يسمح لنا بالتحكم بالناتج الذي نريد عرضه.
</p>

<h2 id="إضافة-بنى-tuple-إلى-بعضها">
	إضافة بنى tuple إلى بعضها
</h2>

<p>
	يمكن أن نُضيف بنى tuple إلى بعضها أو أن «نضربها» (multiply)، تتم عملية الإضافة باستخدام المعامل <code>+</code>، أما عملية الضرب فباستخدام المعامل <code>*</code>.<br>
	يمكن أن يُستخدَم المعامل <code>+</code> لإضافة بنيتَي tuple أو أكثر إلى بعضها بعضًا. يمكننا إسناد القيم الموجودة في بنيتَي tuple إلى بنية جديدة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs lua"><span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span><span class="pln">
kelp </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">)</span><span class="pln">

coral_kelp </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">coral </span><span class="pun">+</span><span class="pln"> kelp</span><span class="pun">)</span><span class="pln">

</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">coral_kelp</span><span class="pun">)</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">)</span></code></pre>

<p>
	وصحيحٌ أنَّ المعامل <code>+</code> يمكنه إضافة بنى tuple إلى بعضها، لكن يمكن أن يستعمل لإنشاء بنية tuple جديدة ناتجة عن جمع بنى أخرى، لكن لا يمكنه تعديل بنية tuple موجودة مسبقًا.<br>
	أما المعامل <code>*</code> فيمكن استخدامه لضرب بنى tuple، فربما تريد إنشاء نسخ من الملفات الموجودة في أحد المجلدات إلى الخادوم أو مشاركة قائمة بالمقطوعات الموسيقية التي تحبها مع أصدقائك، ففي هذه الحالات سترغب بمضاعفة مجموعات من البيانات (أو «ضربها»).<br>
	لنضرب البنية <code>coral</code> بالرقم 2 والبنية <code>kelp</code> بالرقم 3، ثم نسندها إلى بنى tuple جديدة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="pln">multiplied_coral </span><span class="pun">=</span><span class="pln"> coral </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln">
multiplied_kelp </span><span class="pun">=</span><span class="pln"> kelp </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pln">

</span><span class="hljs-function"><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">multiplied_coral</span><span class="pun">)</span></span><span class="pln">
</span><span class="hljs-title"><span class="kwd">print</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">multiplied_kelp</span><span class="pun">)</span></span></span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span><span class="pln">
</span><span class="pun">(</span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">)</span></code></pre>

<p>
	يمكننا باستخدام المعامل <code>*</code> أن نُكرِّر (أو نُضاعِف) بنى tuple بأي عدد من المرات نشاء، مما سينُشِئ بنى tuple جديدة اعتمادًا على محتوى البنى الأصلية.<br>
	الخلاصة هي أنَّ بنى tuple يمكن إضافتها إلى بعضها أو ضربها لتشكيل بنى tuple جديدة عبر استخدام المعاملَين <code>+</code> و <code>*</code>.
</p>

<h2 id="دوال-التعامل-مع-tuple">
	دوال التعامل مع tuple
</h2>

<p>
	هنالك دوال مُضمَّنة في لغة بايثون للتعامل مع بنى tuple، لننظر إلى بعضها.
</p>

<h3 id="len">
	len()‎
</h3>

<p>
	وكما في السلاسل النصية والقوائم، يمكننا حساب طول (أو عدد عناصر) بنية tuple باستخدام الدالة <code>len()‎</code> حيث نُمرِّر إليها بنية tuple كمعامل (parameter)، كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="hljs-function"><span class="hljs-title"><span class="pln">len</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">coral</span><span class="pun">)</span></span></span></code></pre>

<p>
	هذه الدالة مفيدة إذا أردنا أن نَضمَن أنَّ لبنية tuple عدد عناصر معيّن، فمثلًا يمكننا الاستفادة من ذلك بمقارنة بنيتين مع بعضهما.<br>
	إذا أردنا طباعة عدد عناصر <code>kelp</code> و <code>numbers</code>، فسيظهر الناتج الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs scss"><span class="hljs-function"><span class="kwd">print</span><span class="pun">(</span><span class="hljs-function"><span class="pln">len</span><span class="pun">(</span><span class="pln">kelp</span><span class="pun">)</span></span><span class="pun">)</span></span><span class="pln">
</span><span class="hljs-function"><span class="kwd">print</span><span class="pun">(</span><span class="hljs-function"><span class="pln">len</span><span class="pun">(</span><span class="pln">numbers</span><span class="pun">)</span></span><span class="pun">)</span></span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs "><span class="lit">4</span><span class="pln">
</span><span class="lit">13</span></code></pre>

<p>
	الناتج أعلاه يشير إلى أنَّ للبنية <code>kelp</code> أربعة عناصر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pln">kelp </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-string"><span class="str">'wakame'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'alaria'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'deep-sea tangle'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'macrocystis'</span></span><span class="pun">)</span></code></pre>

<p>
	أما البنية <code>numbers</code> فتملك ثلاثة عشر عنصرًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs fix"><span class="hljs-attribute"><span class="pln">numbers </span></span><span class="pun">=</span><span class="hljs-string"><span class="pln"> </span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">)</span></span></code></pre>

<p>
	وصحيحٌ أنَّ هذه الأمثلة عناصرها قليلة نسبيًا، إلا أنَّ الدالة <code>len()‎</code> تستطيع أن تخبرنا بعدد عناصر بنى tuple الكبيرة.
</p>

<h3 id="الدالتان-max-و-min">
	الدالتان max()‎ و min()‎
</h3>

<p>
	عندما نتعامل مع بنى tuple مكوَّنة من عناصر رقمية (بما فيها الأعداد الصحيحة والأرقام ذات الفاصلة العشرية)، فيمكننا استخدام الدالتين <code>max()‎</code> و <code>min()‎</code> للعثور على أكبر وأصغر قيمة موجودة في بنية tuple معيّنة.<br>
	تسمح لنا هاتان الدالتان باستخراج معلومات تخص البيانات القابلة للإحصاء، مثل نتائج الامتحانات أو درجات الحرارة أو أسعار المنتجات …إلخ.<br>
	لننظر إلى بنية tuple مكونة من أعداد عشرية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs fix"><span class="hljs-attribute"><span class="pln">more_numbers </span></span><span class="pun">=</span><span class="hljs-string"><span class="pln"> </span><span class="pun">(</span><span class="lit">11.13</span><span class="pun">,</span><span class="pln"> </span><span class="lit">34.87</span><span class="pun">,</span><span class="pln"> </span><span class="lit">95.59</span><span class="pun">,</span><span class="pln"> </span><span class="lit">82.49</span><span class="pun">,</span><span class="pln"> </span><span class="lit">42.73</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11.12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">95.57</span><span class="pun">)</span></span></code></pre>

<p>
	للحصول على القيمة العظمى من بين القيم الآتية فعلينا تمرير بنية tuple إلى الدالة <code>max()‎</code> كما في <code>max(more_numbers)</code>، وسنستخدم الدالة <code>print()‎</code> لعرض الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs mel"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-keyword"><span class="pln">max</span></span><span class="pun">(</span><span class="pln">more_numbers</span><span class="pun">))</span><span class="pln">
</span><span class="hljs-number"><span class="lit">95.59</span></span></code></pre>

<p>
	أعادت الدالة <code>max()‎</code> أعلى قيمة في بنية <code>more_numbers</code>.<br>
	وبشكلٍ شبيهٍ بما سبق نستخدم الدالة <code>min()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs mel"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-keyword"><span class="pln">min</span></span><span class="pun">(</span><span class="pln">more_numbers</span><span class="pun">))</span><span class="pln">
</span><span class="hljs-number"><span class="lit">11.12</span></span></code></pre>

<p>
	أُعيدَ هنا أصغر رقم عشري موجودة في البنية.<br>
	يمكن الاستفادة من الدالتين <code>max()‎</code> و <code>min()‎</code> كثيرًا للتعامل مع بنى tuple التي تحتوي الكثير من القيم.
</p>

<h2 id="كيف-تختلف-بنى-tuple-عن-القوائم-list">
	كيف تختلف بنى tuple عن القوائم (list)
</h2>

<p>
	الفرق الرئيسي بين tuple و list هو عدم القدرة على تعديلها، وهذا يعني أنَّنا لا نستطيع إضافة أو حذف أو استبدال العناصر داخل بنية tuple.<br>
	لكن يمكننا إضافة بنيتَي tuple أو أكثر إلى بعضها بعضًا لتشكيل بنية جديدة كما رأينا في أحد الأقسام السابقة.<br>
	لتكن لدينا البنية <code>coral</code> الآتية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'elkhorn coral'</span></span><span class="pun">)</span></code></pre>

<p>
	لنقل أننا نريد استبدال العنصر <code>'blue coral'</code> ووضع العنصر <code>'black coral'</code> بدلًا منه. فلو حاولنا تغيير بنية tuple بنفس الطريقة التي نُعدِّل فيها القوائم بكتابة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pln">coral</span><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'black coral'</span></span></code></pre>

<p>
	فستظهر رسالة خطأ كالآتية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs livecodeserver"><span class="typ">TypeError</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">'tuple'</span></span><span class="pln"> </span><span class="kwd">object</span><span class="pln"> does </span><span class="hljs-operator"><span class="kwd">not</span></span><span class="pln"> support </span><span class="hljs-keyword"><span class="pln">item</span></span><span class="pln"> assignment</span></code></pre>

<p>
	وذلك بسبب عدم إمكانية تعديل بنى tuple.<br>
	إذا أنشأنا بنية tuple ثم قررنا أنَّ ما نحتاج له هو بنية list، فيمكننا تحويلها إلى قائمة list، وذلك بالدالة <code>list()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs erlang"><span class="hljs-function"><span class="hljs-title"><span class="pln">list</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">coral</span><span class="pun">)</span></span></span></code></pre>

<p>
	أصبحت بنية <code>coral</code> قائمةً الآن:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6162_7" style="">
<code class="hljs bash"><span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="hljs-string"><span class="str">'blue coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'staghorn coral'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'pillar coral'</span></span><span class="pun">]</span></code></pre>

<p>
	يمكننا أن نلاحظ أنَّ بنية tuple تحوَّلتَ إلى قائمة list لأنَّ الأقواس المحيطة بالقيم أصبح مربعة الشكل.<br>
	وبشكلٍ شبيهٍ بما سبق، نستطيع تحويل القوائم من النوع list إلى tuple باستخدام الدالة <code>tuple()‎</code>.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	نوع البيانات tuple هو مجموعةٌ من البيانات المتسلسلة التي لا يمكن تعديلها، ويوفِّر تحسينًا في أداء برامجك لأنه أسرع معالجةً من القوائم في بايثون. وعندما يراجع الآخرون شيفرتك فسيعلمون من استخدامك لبنى tuple أنك لا تريد تعديل هذه القيم.<br>
	شرحنا في هذا الدرس الميزات الأساسية لبنى tuple بما في ذلك الفهارس وتقطيعها وتجميعها، وعرضنا بعض الدوال المُضمَّنة المتوافرة لهذا النوع من البيانات.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة –وبتصرّف– للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3" rel="external nofollow">Understanding Tuples in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%85%D9%8A%D8%B3-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r743/" rel="">فهم القواميس في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-list-comprehensions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r515/" rel="">فهم كيفية استعمال List Comprehensions في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-r1726/" rel="">دليلك الشامل إلى أنواع البيانات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">507</guid><pubDate>Sat, 28 Sep 2019 13:00:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; List Comprehensions &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-list-comprehensions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r515/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611d5bb6c27_list.jpg.8e66fa7ad126e75f7aeaa27f95a8ee65.jpg" /></p>

<p>
	توفر List Comprehensions طريقةً مختصرةً لإنشاء القوائم بناءً على قوائم موجودة مسبقًا. فعند استخدام list comprehensions فيمكن بناء القوائم باستخدام أيّ نوع من البيانات المتسلسلة التي يمكن الدوران على عناصرها عبر حلقات التكرار، بما في ذلك السلاسل النصية و tuples.<br>
	من ناحية التركيب اللغوي، تحتوي list comprehensions على عنصر يمكن المرور عليه ضمن تعبيرٍ متبوعٍ بحلقة <code>for</code>. ويمكن أن يُتبَع ما سبق بتعابير <code>for</code> أو <code>if</code> إضافية، لذا سيساعدك الفهم العميق <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">لحلقات <code>for</code></a> والعبارات الشرطية في التعامل مع list comprehensions.<br>
	توفِّر list comprehensions طريقةً مختلفةً لإنشاء القوائم وغيرها من أنواع البيانات المتسلسلة. وعلى الرغم من إمكانية استخدام الطرائق الأخرى للدوران، مثل حلقات <code>for</code>، لإنشاء القوائم، لكن من المفضَّل استعمال list comprehensions لأنها تقلِّل عدد الأسطر الموجودة في برنامجك.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31149" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d611d50448fc_list.jpg.ac3372982f6bdc97eeb62eca1b8aca1b.jpg" rel=""><img alt="فهم كيفية استعمال list.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31149" data-unique="ecweea6nj" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611d5059d1e_list.thumb.jpg.6bf7c6cd182414c210a23505b1190f55.jpg"></a>
</p>

<h2 id="list-comprehensions">
	List Comprehensions
</h2>

<p>
	يمكن بناء list comprehensions في بايثون كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<span class="pln">list_variable </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="kwd">for</span><span class="pln"> x </span><span class="kwd">in</span><span class="pln"> iterable</span><span class="pun">]</span></pre>

<p>
	ستُسنَد القائمة، أو أي نوع من البيانات يمكن المرور على عناصره، إلى متغير. المتغيرات الإضافية –التي تُشير إلى عناصر موجودة ضمن نوع البيانات الذي يمكن المرور على عناصره– تُبنى حول عبارة <code>for</code>. والكلمة المحجوزة <code>in</code> تستعمل بنفس استعمالها في حلقات <code>for</code> وذلك لمرور على عناصر <code>iterable</code>.<br>
	لننظر إلى مثالٍ يُنشِئ قائمةً مبنيةً على سلسلةٍ نصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">shark_letters </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">letter </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> letter </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="hljs-string"><span class="str">'shark'</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">shark_letters</span><span class="pun">)</span></code></pre>

<p>
	أسندنا في المثال السابق قائمةً جديدةً إلى المتغير <code>shark_letters</code>، واستعملنا المتغير <code>letter</code> للإشارة إلى العناصر الموجودة ضمن السلسلة النصية <code>'shark'</code>.<br>
	استعملنا بعد ذلك الدالة <code>print()‎</code> لكي نتأكد من القائمة الناتجة والمُسنَدة إلى المتغير <code>shark_letters</code>، وحصلنا على الناتج الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="str">'s'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'h'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'r'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'k'</span><span class="pun">]</span></code></pre>

<p>
	القائمة التي أنشأناها باستخدام list comprehensions تتألف من العناصر التي تكوِّن السلسلة النصية <code>'shark'</code>، وهي كل حرف في الكلمة shark.<br>
	يمكن إعادة كتابة تعابير list comprehensions كحلقات <code>for</code>، لكن لاحظ أنَّك لا تستطيع إعادة كتابة كل حلقة <code>for</code> بصيغة list comprehensions.<br>
	لنعد كتابة المثال السابق الذي أنشأنا فيه القائمة <code>shark_letters</code> باستخدام حلقة <code>for</code>، وهذا سيساعدنا في فهم كيف تعمل list comprehensions عملها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">shark_letters </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[]</span><span class="pln">

</span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> letter </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="hljs-string"><span class="str">'shark'</span></span><span class="pun">:</span><span class="pln">
    shark_letters</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">letter</span><span class="pun">)</span><span class="pln">

</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">shark_letters</span><span class="pun">)</span></code></pre>

<p>
	عند إنشائنا للقائمة عبر استخدام الحلقة <code>for</code>، فيجب تهيئة المتغير الذي سنُسنِد العناصر إليه كقائمة فارغة، وهذا ما فعلناه في أوّل سطر من الشيفرة السابقة. ثم بدأت حلقة <code>for</code> بالدوران على عناصر السلسلة النصية <code>'shark'</code> مستعملةً المتغير <code>letter</code> للإشارة إلى قيمة العنصر الحالي. ومن ثم أضفنا كل عنصر في السلسلة النصية إلى القائمة ضمن حلقة <code>for</code> وذلك باستخدام الدالة list.append(x).<br>
	الناتج من حلقة <code>for</code> السابقة يماثل ناتج list comprehension في المثال أعلاه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="str">'s'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'h'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'r'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'k'</span><span class="pun">]</span></code></pre>

<p>
	الخلاصة: يمكن إعادة كتابة List comprehensions كحلقات <code>for</code>، لكن بعض حلقات <code>for</code> يمكن إعادة كتابتها لتصبح List comprehensions لتقليل كمية الشيفرات المكتوبة.
</p>

<h2 id="استخدام-التعابير-الشرطية-مع-list-comprehensions">
	استخدام التعابير الشرطية مع List Comprehensions
</h2>

<p>
	يمكن استخدام التعابير الشرطية في list comprehension لتعديل القوائم أو أنواع البيانات المتسلسلة الأخرى عند إنشاء قوائم جديدة.<br>
	لننظر إلى مثالٍ عن استخدام العبارة الشرطية <code>if</code> في تعبير list comprehension:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">fish_tuple </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="hljs-string"><span class="str">'blowfish'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'clownfish'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'catfish'</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">'octopus'</span></span><span class="pun">)</span><span class="pln">

fish_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">fish </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> fish </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> fish_tuple </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> fish </span><span class="pun">!=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'octopus'</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">fish_list</span><span class="pun">)</span></code></pre>

<p>
	استعملنا المتغير <code>fish_tuple</code> الذي من نوع البيانات tuple كأساس للقائمة الجديدة التي سنُنشِئها التي تسمى <code>fish_list</code>. استعملنا <code>for</code> و <code>in</code> كما في القسم السابق، لكننا أضفنا هنا العبارة الشرطية <code>if</code>. ستؤدي العبارة الشرطية <code>if</code> إلى إضافة العناصر غير المساوية للسلسلة النصية <code>'octopus'</code>، لذا ستحتوي القائمة الجديدة على العناصر الموجودة في بنية tuple والتي لا تُطابِق الكلمة <code>'octopus'</code>.<br>
	عند تشغيل البرنامج السابق فسنلاحظ أنَّ القائمة <code>fish_list</code> تحتوي على نفس العناصر التي كانت موجودة في <code>fish_tuple</code> لكن مع حذف العنصر <code>'octopus'</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="str">'blowfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'clownfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'catfish'</span><span class="pun">]</span></code></pre>

<p>
	أي أصبحت القائمة الجديدة تحتوي على بنية tuple الأصلية لكن ما عدا السلسلة النصية التي استثنيناها عبر التعبير الشرطي.<br>
	سنُنشِئ مثالًا آخر يستعمل المعاملات الرياضية والأرقام الصحيحة والدالة <code>range()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">number_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="pun">**</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">)</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> x </span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">number_list</span><span class="pun">)</span></code></pre>

<p>
	القائمة التي ستُنشَأ باسم <code>number_list</code> ستحتوي على مربع جميع القيم الموجودة من المجال 0 إلى 9 لكن إذا كان الرقم قابلًا للقسمة على 2. وستبدو المخرجات كالآتية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">16</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">36</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">64</span></span><span class="pun">]</span></code></pre>

<p>
	دعنا نُفصِّل ما الذي يفعله تعبير list comprehension السابق، ودعنا نفكِّر بالذي سيظهر إذا استعملنا التعبير <code>x for x in range(10)</code> فقط. يجب أن يبدو برنامجنا الصغير كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">number_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">)]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">number_list</span><span class="pun">)</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">7</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">9</span></span><span class="pun">]</span></code></pre>

<p>
	لنضف العبارة الشرطية الآن:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">number_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">)</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> x </span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">number_list</span><span class="pun">)</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pun">]</span></code></pre>

<p>
	أدّت العبارة الشرطية <code>if</code> إلى قبول العناصر القابلة للقسمة على 2 فقط وإضافتها إلى القائمة، مما يؤدي إلى حذف جميع الأرقام الفردية.<br>
	يمكننا الآن استخدام معامل رياضي لتربيع قيمة المتغير <code>x</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">number_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="pun">**</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">)</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> x </span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">number_list</span><span class="pun">)</span></code></pre>

<p>
	أي ستُربَّع قيم القائمة السابقة <code>‎[0, 2, 4, 6, 8]</code> وسيُخرَج الناتج الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">16</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">36</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">64</span></span><span class="pun">]</span></code></pre>

<p>
	يمكننا أيضًا استعمال ما يشبه عبارات <code>if</code> المتشعبة في تعابير list comprehension:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">number_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">)</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> x </span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> x </span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">number_list</span><span class="pun">)</span></code></pre>

<p>
	سيتم التحقق أولًا أنَّ المتغير <code>x</code> قابل للقسمة على الرقم 3، ثم سنتحقق إن كان المتغير <code>x</code> قابل للقسمة على الرقم 5، وإذا حقَّق المتغير <code>x</code> الشرطين السابقين فسيُضاف إلى القائمة، وسيُظهَر في الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">15</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">30</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">45</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">60</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">75</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">90</span></span><span class="pun">]</span></code></pre>

<p>
	الخلاصة: يمكن استخدام عبارات <code>if</code> الشرطية لتحديد ما هي العناصر التي نريد إضافتها إلى القائمة الجديدة.
</p>

<h2 id="حلقات-التكرار-المتشعبة-في-تعابير-list-comprehension">
	حلقات التكرار المتشعبة في تعابير List Comprehension
</h2>

<p>
	يمكن استعمال حلقات التكرار المتشعبة لإجراء عدِّة عمليات دوران متداخلة في برامجنا.<br>
	سننظر في هذا القسم إلى حلقة <code>for</code> متشعبة وسنحاول تحويلها إلى تعبير list comprehension.<br>
	هذه الشيفرة ستُنشِئ قائمةً جديدةً بالدوران على قائمتين وبإجراء عمليات رياضية عليها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">my_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[]</span><span class="pln">

</span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="pun">[</span><span class="hljs-number"><span class="lit">20</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">40</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">60</span></span><span class="pun">]:</span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> y </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="pun">[</span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">]:</span><span class="pln">
        my_list</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">

</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">my_list</span><span class="pun">)</span></code></pre>

<p>
	سنحصل على الناتج الآتي عند تشغيل البرنامج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">40</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">80</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">120</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">80</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">160</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">240</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">120</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">240</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">360</span></span><span class="pun">]</span></code></pre>

<p>
	الشيفرة السابقة تضرب العناصر الموجودة في أوّل قائمة بالعناصر الموجودة في ثاني قائمة في كل دورة.<br>
	لتحويل ما سبق إلى تعبير list comprehension، وذلك باختصار السطرين الموجودين في الشيفرة السابقة وتحويلهما إلى سطرٍ وحيدٍ، الذي يبدأ بإجراء العملية <code>x*y</code>، ثم ستلي هذه العملية حلقة <code>for</code> الخارجية، ثم يليها حلقة <code>for</code> الداخلية؛ وسنضيف تعبير <code>print()‎</code> للتأكد أنَّ ناتج القائمة الجديدة يُطابِق ناتج البرنامج الذي فيه حلقتين متداخلتين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs lua"><span class="pln">my_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> y </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> x </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="pun">[</span><span class="hljs-number"><span class="lit">20</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">40</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">60</span></span><span class="pun">]</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> y </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="pun">[</span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">]]</span><span class="pln">
</span><span class="hljs-built_in"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">my_list</span><span class="pun">)</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3045_7" style="">
<code class="hljs json"><span class="pun">[</span><span class="hljs-number"><span class="lit">40</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">80</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">120</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">80</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">160</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">240</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">120</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">240</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">360</span></span><span class="pun">]</span></code></pre>

<p>
	أدى استعمال تعبير list comprehension في المثال السابق إلى تبسيط حلقتَي <code>for</code> لتصبحا سطرًا وحيدًا، لكن مع إنشاء نفس القائمة والتي ستُسنَد إلى المتغير <code>my_list</code>.<br>
	توفِّر لنا تعابير list comprehension طريقةً بسيطةً لإنشاء القوائم، مما يسمح لنا باختصار عدِّة أسطر إلى سطرٍ وحيد. لكن من المهم أن تبقي في ذهنك أنَّ سهولة قراءة الشيفرة لها الأولوية دومًا، لذا إذا أصبحتَ تعابير list comprehension طويلةً جدًا ومعقدة، فمن الأفضل حينها تحويلها إلى حلقات تكرار عادية.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	تسمح تعابير list comprehension لنا بتحويل قائمة أو أي نوع من البيانات المتسلسلة إلى سلسلةٍ جديدة، ولها شكلٌ بسيطٌ يُقلِّل عدد الأسطر التي نكتبها.<br>
	تتبع تعابير list comprehension شكلًا رياضيًا معيّنًا، لذا قد يجدها المبرمجون أولو الخلفية الرياضية سهلة الفهم.<br>
	وصحيحٌ أنَّ تعابير list comprehension تختصر الشيفرةـ لكن من المهم جعل سهولة قراءة الشيفرة من أولوياتنا، وحاول تجنّب الأسطر الطويلة لتسهيل قراءة الشيفرة.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة –وبتصرّف– للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-list-comprehensions-in-python-3" rel="external nofollow">Understanding List Comprehensions in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-tuples-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r507/" rel="">فهم نوع البيانات Tuples في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة:  <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r734/" rel="">كيفية استخدام توابع القوائم في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">515</guid><pubDate>Tue, 24 Sep 2019 18:09:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x648;&#x627;&#x628;&#x639; &#x627;&#x644;&#x642;&#x648;&#x627;&#x626;&#x645; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r734/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611bd73ab3b_.jpg.31829ecaaec8df8116ed89b11de497ab.jpg" /></p>

<p>
	يتضمّن <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> عددًا من هياكل البيانات، بما في ذلك <a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>. تمكّن هياكل البيانات من تنظيم البيانات وتخزينها عبر توابع خاصة مُضمّنة في بايثون.
</p>

<p>
	للاستفادة من محتويات هذه المقالة، ينبغي أن تكون على إلمام بأساسيات القوائم، وصياغتها وكيفية فهرستها. يمكنك تعلم ذلك من المقالة السابقة: <a href="%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A9%20%D8%A7%D9%84%D8%B3%D8%A7%D8%A8%D9%82%D8%A9" rel="">القوائم في بايثون 3</a>.
</p>

<p>
	سنتعرف على التوابع المُضمنة التي يمكن استخدامها مع <a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>. ونتعلم كيفية إضافة عناصر إلى القائمة وكيفية إزالتها، وتوسيع القوائم وترتيبها، وغير ذلك.
</p>

<p>
	القوائم أنواعٌ قابلةٌ للتغيير (mutable) على عكس <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> التي لا يمكن تغييرها، فعندما تستخدم تابعًا على قائمة ما، ستؤثر في القائمة نفسها، وليس في نسخة منها.
</p>

<p>
	سنعمل في هذه المقالة على قائمة تمثل حوض سمك، إذ ستحوي القائمة أسماء أنواع الأسماك الموجودة في الحوض، وسنعدلها كلما أضفنا أسماكًا أو أزلناها من الحوض.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31148" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d611bd8a9e33_.jpg.2b77bd527715c873ccc5da4c8336e89b.jpg" rel=""><img alt="كيفية استخدام توابع القوائم.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31148" data-unique="oho0o3h2b" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d611bd8bf168_.thumb.jpg.4dfacc66ad427c1c5a502ae50854c0a8.jpg"></a>
</p>

<h2 id="-list-append-">
	التابع <code>list.append()‎‎</code>
</h2>

<p>
	يضيف التابع <code>list.append(x)‎</code> عنصرًا (<code>x</code>) إلى نهاية القائمة. يُعرّف المثال التالي قائمةً تمثل الأسماك الموجودة في حوض السمك.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_7" style="">
<span class="pln">fish </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'barracuda'</span><span class="pun">,</span><span class="str">'cod'</span><span class="pun">,</span><span class="str">'devil ray'</span><span class="pun">,</span><span class="str">'eel'</span><span class="pun">]</span></pre>

<p>
	تتألف هذه القائمة من 4 <a href="https://wiki.hsoub.com/Python/str" rel="external">سلاسل نصية</a>، وتتراوح فهارسها من <code>0</code> إلى <code>3</code>.
</p>

<p>
	سنضيف سمكة جديدة إلى الحوض، ونود بالمقابل أن نضيف تلك السمكة إلى قائمتنا. سنمرّر السلسلة النصية <code>flounder</code> التي تمثل نوع السمكة الجديدة إلى التابع <code>list.append()‎</code>، ثم نطبع قائمتنا المعدلة لتأكيد إضافة العنصر.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_9" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="str">'flounder'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  ['barracuda', 'cod', 'devil ray', 'eel', 'flounder']</span></pre>

<p>
	الآن، صارت لدينا قائمة من 5 عناصر، تنتهي بالعنصر الذي أضفناه للتو عبر التابع <code>append()‎</code>.
</p>

<h2 id="-list-insert-">
	التابع <code>list.insert()‎</code>
</h2>

<p>
	يأخذ التابع list.insert (i,x)<code>‎</code> وسيطين: الأول <code>i</code> يمثِّل الفهرس الذي ترغب في إضافة العنصر عنده، و <code>x</code> يمثل العنصر نفسه.
</p>

<p>
	لقد أضفنا إلى حوض السمك سمكة جديدة من نوع <code>anchovy</code>. ربما لاحظت أنّ قائمة الأسماك مرتبة ترتيبًا أبجديًا حتى الآن. لهذا السبب لا نريد إفساد الترتيب، لذا لن نضيف السلسلة النصية <code>anchovy</code> إلى نهاية القائمة باستخدام الدالة <code>list.append()‎</code>. بدلًا من ذلك، سنستخدم التابع <code>list.insert()‎</code> لإضافة <code>anchovy</code> إلى بداية القائمة، أي عند الفهرس <code>0</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_11" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">insert</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="str">'anchovy'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  ['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder']</span></pre>

<p>
	في هذه الحالة، أضفنا العنصر إلى بداية القائمة. ستتقدم فهارس العناصر التالية خطوةً واحدةً إلى الأمام. لذلك، سيصبح العنصر <code>barracuda</code> عند الفهرس <code>1</code>، والعنصر <code>cod</code> عند الفهرس <code>2</code>، والعنصر <code>flounder</code> - الأخير - عند الفهرس <code>5</code>.
</p>

<p>
	سنحضر الآن سمكة من نوع <code>damselfish</code> إلى الحوض، ونرغب في الحفاظ على الترتيب الأبجدي لعناصر القائمة أعلاه، لذلك سنضع هذا العنصر عند الفهرس <code>3</code>: <code>fish.insert(3,'damselfish')‎</code>.
</p>

<h2 id="-list-extend-">
	التابع <code>list.extend()‎</code>
</h2>

<p>
	إذا أردت أن توسّع قائمة بعناصر قائمة أخرى، فيمكنك استخدام التابع list.extend(L)<code>‎</code>، والذي يأخذ قائمة كمعامل.
</p>

<p>
	سنضع في الحوض أربعة أسماك جديدة. أنواع هذه الأسماك مجموعة معًا في القائمة <code>more_fish</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_13" style="">
<span class="pln">more_fish </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'goby'</span><span class="pun">,</span><span class="str">'herring'</span><span class="pun">,</span><span class="str">'ide'</span><span class="pun">,</span><span class="str">'kissing gourami'</span><span class="pun">]</span></pre>

<p>
	سنضيف الآن عناصر القائمة <code>more_fish</code> إلى قائمة الأسماك، ونطبع القائمة لنتأكد من أنّ عناصر القائمة الثانية قد ضُمّت إليها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_17" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">extend</span><span class="pun">(</span><span class="pln">more_fish</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span></pre>

<p>
	ستطبع بايثون القائمة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_19" style="">
<span class="pun">[</span><span class="str">'anchovy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'barracuda'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cod'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'devil ray'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'eel'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'flounder'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'goby'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'herring'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ide'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'kissing gourami'</span><span class="pun">]</span></pre>

<p>
	في هذه المرحلة، صارت القائمة <code>fish</code> تتألف من 10 عناصر.
</p>

<h2 id="-list-remove-">
	التابع <code>list.remove()‎</code>
</h2>

<p>
	لإزالة عنصر من قائمة، استخدم التابع <code>list.remove(x)‎</code>، والذي يزيل أول عنصر من القائمة له القيمة المُمرّرة <code>x</code>.
</p>

<p>
	جاءت مجموعة من العلماء المحليين لزيارة الحوض. سيجرون أبحاثًا عن النوع <code>kissing gourami</code>، وطلبوا استعارة السمكة <code>kissing gourami</code>، لذلك نود إزالة العنصر <code>kissing gourami</code> من القائمة لنعكس هذا التغيير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_21" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">remove</span><span class="pun">(</span><span class="str">'kissing gourami'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span></pre>

<p>
	والمخرجات ستكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_23" style="">
<span class="pun">[</span><span class="str">'anchovy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'barracuda'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cod'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'devil ray'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'eel'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'flounder'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'goby'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'herring'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ide'</span><span class="pun">]</span></pre>

<p>
	بعد استخدام التابع <code>list.remove()‎</code>، لم يعد العنصر <code>kissing gourami</code> موجودًا في القائمة.
</p>

<p>
	في حال مرّرت عنصرًا <code>x</code> غير موجود في القائمة إلى التابع <code>list.remove()‎</code>، فسيُطلق الخطأ التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_25" style="">
<span class="typ">ValueError</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">.</span><span class="pln">remove</span><span class="pun">(</span><span class="pln">x</span><span class="pun">):</span><span class="pln"> x </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> list</span></pre>

<p>
	التابع <code>list.remove()‎</code> لن يزيل إلا أول عنصر تساوي قيمته قيمة العنصر المُمرّر إلى التابع، لذلك إن كانت لدينا سمكتان من النوع <code>kissing gourami</code> في الحوض، وأعرنا إحداهما فقط للعلماء، فإنّ التعبير <code>fish.remove('kissing gourami')‎</code> لن يمحو إلا العنصر الأول المطابق فقط.
</p>

<h2 id="-list-pop-">
	التابع <code>list.pop()‎</code>
</h2>

<p>
	يعيد التابع list.pop ()<code>‎</code> العنصر الموجود عند الفهرس المحدد من القائمة، ثم يزيل ذلك العنصر. تشير الأقواس المربعة حول <code>i</code> إلى أنّ هذا المعامل اختياري، لذا، إذا لم تحدد فهرسًا (كما في <code>fish.pop()‎</code>)، فسيُعاد العنصر الأخير ثم يُزال.
</p>

<p>
	لقد أصبح حجم السمكة <code>devil ray</code> كبيرًا جدًا، ولم يعد الحوض يسعها، ولحسن الحظ أنّ هناك حوض سمك في بلدة مجاورة يمكنه استيعابها. سنستخدم التابع <code>‎.‎pop()‎</code>، ونمرر إليه العدد <code>3</code>، الذي يساوي فهرس العنصر <code>devil ray</code>، بقصد إزالته من القائمة. بعد إعادة العنصر، سنتأكد من أننا أزلنا العنصر الصحيح.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_27" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">.</span><span class="pln">pop</span><span class="pun">(</span><span class="lit">3</span><span class="pun">))</span><span class="pln"> </span><span class="com"># devil ray</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">            </span><span class="com"># ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']</span></pre>

<p>
	باستخدام التابع <code>‎.pop()‎</code> تمكّنا من إعادة وإزالة <code>ray devil</code> من قائمة الأسماك.
</p>

<p>
	إذا لم نمرر أيّ معامل إلى هذا التابع، ونفّذنا التعبير <code>fish.pop()‎</code>، فسيُعاد العنصر الأخير <code>ide</code> ثم يُزَال من القائمة.
</p>

<h2 id="-list-index-">
	التابع <code>list.index()‎</code>
</h2>

<p>
	يصعب في القوائم الكبيرة تحديد فهارس العناصر التي تحمل قيمة معينة. لأجل ذلك، يمكننا استخدام التابع list.index(x)<code>‎</code>، حيث يمثل الوسيط<code>x</code> قيمة العنصر المبحوث عنه، والذي نريد إعادة فهرسه. إذا كان هناك أكثر من عنصر واحد يحمل القيمة <code>x</code>، فسيُعَاد فهرس العنصر الأول.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_29" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">    </span><span class="com"># ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">.</span><span class="pln">index</span><span class="pun">(</span><span class="str">'herring'</span><span class="pun">))</span><span class="pln">    </span><span class="com"># 6</span></pre>

<p>
	سوف يُطلق خطأ في حال مرّرنا قيمة غير موجودة في القائمة إلى التابع <code>‎.index()‎</code>.
</p>

<h2 id="-list-copy-">
	التابع <code>list.copy()‎</code>
</h2>

<p>
	أحيانُا نرغب في تعديل عناصر قائمةٍ والتجريب عليها، مع الحفاظ على القائمة الأصلية دون تغيير؛ يمكننا في هذه الحالة استخدام التابع list.copy()<code>‎</code> لإنشاء نسخة من القائمة الأصلية.
</p>

<p>
	في المثال التالي، سنمرّر القيمة المعادة من <code>fish.copy()‎</code> إلى المتغير <code>fish_2</code>، ثم نطبع قيمة <code>fish_2</code> للتأكد من أنها تحتوي على نفس عناصر القائمة <code>fish</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_31" style="">
<span class="pln">fish_2 </span><span class="pun">=</span><span class="pln"> fish</span><span class="pun">.</span><span class="pln">copy</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish_2</span><span class="pun">)</span><span class="pln">      </span><span class="com">#  ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']</span></pre>

<p>
	في هذه المرحلة، القائمتان <code>fish</code> و <code>fish_2</code> متساويتان.
</p>

<h2 id="-list-reverse-">
	التابع <code>list.reverse()‎</code>
</h2>

<p>
	يمكننا عكس ترتيب عناصر قائمة باستخدام التابع <code>list.reverse()‎</code>. في المثال التالي سنستخدم التابع <code>‎.reverse()‎</code> مع القائمة <code>fish</code> لعكس ترتيب عناصرها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_33" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">reverse</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  ['ide', 'herring', 'goby', 'flounder', 'eel', 'cod', 'barracuda', 'anchovy']</span></pre>

<p>
	بعد استخدام التابع <code>‎.reverse()‎</code>، صارت القائمة تبدأ بالعنصر <code>ide</code>، والذي كان في نهاية القائمة من قبل، كما ستنتهي القائمة بالعنصر <code>anchovy</code>، والذي كان في بداية القائمة من قبل.
</p>

<h2 id="-list-count-">
	التابع <code>list.count()‎</code>
</h2>

<p>
	يعيد التابع list.count(x)<code>‎</code> عدد مرات ظهور القيمة <code>x</code> في القائمة. هذا التابع مفيد في حال كنا نعمل على قائمة طويلة بها الكثير من القيم المتطابقة.
</p>

<p>
	إذا كان حوض السمك كبيرًا، على سبيل المثال، وكانت عندنا عدة أسماك من النوع <code>neon tetra</code>، فيمكننا استخدام التابع <code>‎.count()‎</code> لتحديد العدد الإجمالي لأسماك هذا النوع.
</p>

<p>
	في هذا المثال سنحسب عدد مرات ظهور العنصر <code>goby</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_35" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="str">'goby'</span><span class="pun">))</span><span class="pln">       </span><span class="com">#  1</span></pre>

<p>
	تظهر السلسلة النصية <code>goby</code> مرةً واحدةً فقط في القائمة، لذا سيُعيد التابع <code>‎.count()‎</code> العدد <code>1</code>.
</p>

<p>
	يمكننا استخدام هذا التابع أيضًا مع قائمة مكوَّنة من <a href="https://wiki.hsoub.com/Python/int" rel="external">أعداد صحيحة</a>. المثال التالي يوضح ذلك.
</p>

<p>
	يتتبع المشرفون على الحوض أعمار الأسماك الموجودة فيه للتأكد من أنّ وجباتها الغذائية مناسبة لأعمارها. هذه القائمة الثانية المُسماة <code>fish_ages</code> تتوافق مع أنواع السمك في القائمة <code>fish</code>.
</p>

<p>
	نظرًا لأنّ الأسماك التي لا يتجاوز عمرها عامًا واحدًا لها احتياجات غذائية خاصة، فسنحسب عدد الأسماك التي عمرها عامًا واحدًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_37" style="">
<span class="pln">fish_ages </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">1</span><span class="pun">,</span><span class="lit">2</span><span class="pun">,</span><span class="lit">4</span><span class="pun">,</span><span class="lit">3</span><span class="pun">,</span><span class="lit">2</span><span class="pun">,</span><span class="lit">1</span><span class="pun">,</span><span class="lit">1</span><span class="pun">,</span><span class="lit">2</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish_ages</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="lit">1</span><span class="pun">))</span><span class="pln">    </span><span class="com">#  3</span></pre>

<p>
	يظهر العدد الصحيح <code>1</code> في القائمة <code>fish_ages</code> ثلاث مرات، لذلك يعيد التابع <code>‎</code>.count()‎ العدد <code>3</code>.
</p>

<h2 id="-list-sort-">
	التابع <code>list.sort()‎</code>
</h2>

<p>
	يُستخدم التابع <code>list.sort()‎</code> لترتيب عناصر القائمة التي استُدعِي معها .
</p>

<p>
	سنستخدم قائمة الأعداد الصحيحة <code>fish_ages</code> لتجريب التابع <code>‎.sort()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_39" style="">
<span class="pln">fish_ages</span><span class="pun">.</span><span class="pln">sort</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish_ages</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  [1, 1, 1, 2, 2, 2, 3, 4]</span></pre>

<p>
	باستدعاء التابع <code>‎</code>.sort()‎ مع القائمة <code>fish_ages</code>، ستُعاد قائمة الأعداد الصحيحة مرتبةً.
</p>

<h2 id="-list-clear-">
	التابع <code>list.clear()‎</code>
</h2>

<p>
	بعد الانتهاء من العمل على قائمة ما، يمكنك إزالة جميع القيم الموجودة فيها باستخدام التابع <code>list.clear()‎</code>.
</p>

<p>
	قررت الحكومة المحلية الاستيلاء على حوض السمك الخاص بنا، وجعله مساحة عامة يستمتع بها سكان مدينتنا. نظرًا لأننا لم نعد نعمل على الحوض، فلم نعد بحاجة إلى الاحتفاظ بقائمة الأسماك، لذلك سنزيل عناصر القائمة <code>fish</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9627_41" style="">
<span class="pln">fish</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">fish</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  []</span></pre>

<p>
	نرى في المخرجات أقواسًا معقوفة نتيجة استدعاء التابع <code>‎.clear()‎</code> على القائمة <code>fish</code>، وهذا تأكيد على أنّ القائمة أصبحت خالية من جميع العناصر.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	لمَّا كانت القوائم تسلسلات قابلة للتغيير (mutable)، فإنّها هياكلُ بيانات مرنة ومفيدة للغاية. كما تتيح لنا توابع القوائم إجراء العديد من العمليات على القوائم بسهولة، إذ يمكننا استخدام التوابع لتعديل القوائم وترتيبها ومعالجتها بفعالية.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-list-methods-in-python-3" rel="external nofollow">How To Use List Methods in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-list-comprehensions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r515/" rel="">فهم كيفية استعمال List Comprehensions في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r733/" rel="">مدخل إلى القوائم في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">734</guid><pubDate>Sat, 21 Sep 2019 13:04:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x642;&#x648;&#x627;&#x626;&#x645; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r733/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d610c997bf1a_.jpg.47657354381a8a16d3c5331767fbfc7a.jpg" /></p>

<p>
	<a href="https://wiki.hsoub.com/Python/list" rel="external">القائمة</a> هي بنية بيانات في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، وهي عبارة عن تسلسل مُرتّب من العناصر قابل للتغيير (mutable).
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
}

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<p>
	<a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a> مناسبة لتجميع العناصر المترابطة، إذ تمكّنك من تجميع البيانات المتشابهة، أو التي تخدم غرضًا معيّنا معًا، وتكثيف الشيفرة البرمجية، وتنفيذ التوابع والعمليات على عدة قيم في وقت واحد.
</p>

<p>
	القوائم في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> وغيرها من هياكل البيانات المركبة تساعد على تمثيل المجموعات، مثل مجموعة الملفات في مجلد على حاسوبك، أو قوائم التشغيل، ورسائل البريد الإلكتروني، وغير ذلك.
</p>

<p>
	في المثال التالي، سننشئ قائمةً تحتوي على عناصر من نوع <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_7" style="">
<span class="pln">sea_creatures </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">]</span></pre>

<p>
	عندما نطبع القائمة، فإنّ المخرجات ستشبه القائمة التي أنشأناها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_9" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']</span></pre>

<p>
	باعتبارها تسلسلًا مرتبًا من العناصر، يمكن استدعاء أيّ عنصر من القائمة عبر الفهرسة. القوائم هي بيانات مركبة تتألف من أجزاء أصغر، وتتميز بالمرونة، إذ يمكن إضافة عناصر إليها، وإزالتها، وتغييرها. عندما تحتاج إلى تخزين الكثير من القيم، أو التكرار (iterate) عليها، وتريد أن تكون قادرًا على تعديل تلك القيم بسهولة، فالقوائم هي خيارك الأفضل.
</p>

<p>
	سنتعرف في هذه المقالة على القوائم وتوابعها وكيفية استخدامها.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31147" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d610c87d345f_.jpg.d600839c3e42fb239d91fa630aa8184d.jpg" rel=""><img alt="مدخل إلى القوائم.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31147" data-unique="vpcj70q3d" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d610c87e8456_.thumb.jpg.218cad9054ec04d24bdc339921af7793.jpg"></a>
</p>

<h2 id="-indexing-lists-">
	فهرسة القوائم (Indexing Lists)
</h2>

<p>
	كل عنصر في القائمة يقابله رقم يمثل فهرسَ ذلك العنصر، والذي هو <a href="https://wiki.hsoub.com/Python/int" rel="external">عدد صحيح</a>، فهرس العنصر الأول في القائمة هو <code>0</code>.
</p>

<p>
	هذا تمثيل لفهارس القائمة <code>sea_creatures</code>:
</p>

<table><tbody>
<tr>
<th>
				<code>shark</code>
			</th>
			<th>
				<code>cuttlefish</code>
			</th>
			<th>
				<code>squid</code>
			</th>
			<th>
				<code>shrimp</code>
			</th>
			<th>
				<code>anemone</code>
			</th>
		</tr>
<tr>
<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				2
			</td>
			<td>
				3
			</td>
			<td>
				4
			</td>
		</tr>
</tbody></table>
<p>
	يبدأ العنصر الأول، أي السلسلة النصية <code>shark</code>، عند الفهرس <code>0</code>، وتنتهي القائمة عند الفهرس <code>4</code> الذي يقابل العنصر <code>anemone</code>.
</p>

<p>
	نظرًا لأنّ كل عنصر في قوائم <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> يقابله رقم فهرس، يمكننا الوصول إلى عناصر القوائم ومعالجتها كما نفعل مع أنواع البيانات المتسلسلة الأخرى.
</p>

<p>
	يمكننا الآن استدعاء عنصر من القائمة من خلال رقم فهرسه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_11" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">])</span><span class="pln">       </span><span class="com">#  cuttlefish</span></pre>

<p>
	تتراوح أرقام الفهارس في هذه القائمة بين <code>0</code> و <code>4</code>، كما هو موضح في الجدول أعلاه. المثال التالي يوضح ذلك:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_13" style="">
<span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'shark'</span><span class="pln">
sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pln">
sea_creatures</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'squid'</span><span class="pln">
sea_creatures</span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pln">
sea_creatures</span><span class="pun">[</span><span class="lit">4</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'anemone'</span></pre>

<p>
	إذا استدعينا القائمة <code>sea_creatures</code> برقم فهرس أكبر من <code>4</code>، فسيكون الفهرس خارج النطاق، وسيُطلَق الخطأ <code>IndexError</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_15" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">18</span><span class="pun">])</span></pre>

<p>
	والمخرجات ستكون:
</p>

<pre class="ipsCode">
IndexError: list index <span class="hljs-keyword">out</span> <span class="hljs-keyword">of</span> <span class="hljs-keyword">range</span>
</pre>

<p>
	يمكننا أيضًا الوصول إلى عناصر القائمة بفهارس سالبة، والتي تُحسَب من نهاية القائمة، بدءًا من <code>‎</code>-1. هذا مفيد في حال كانت لدينا قائمة طويلة، وأردنا تحديد عنصر في نهايته.
</p>

<p>
	بالنسبة لقائمة <code>sea_creatures</code>، تبدو الفهارس السالبة كما يلي:
</p>

<table><tbody>
<tr>
<th>
				<code>shark</code>
			</th>
			<th>
				<code>cuttlefish</code>
			</th>
			<th>
				<code>squid</code>
			</th>
			<th>
				<code>shrimp</code>
			</th>
			<th>
				<code>anemone</code>
			</th>
		</tr>
<tr>
<td>
				-5
			</td>
			<td>
				-4
			</td>
			<td>
				-3
			</td>
			<td>
				-2
			</td>
			<td>
				-1
			</td>
		</tr>
</tbody></table>
<p>
	في المثال التالي، سنطبع العنصر <code>squid</code> باستخدام فهرس سالب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_18" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[-</span><span class="lit">3</span><span class="pun">])</span><span class="pln">     </span><span class="com">#  squid</span></pre>

<p>
	يمكننا ضم (concatenate) عنصر يحتوي <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a> مع سلسلة نصبة أخرى باستخدام العامل <code>+</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_20" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">'Sammy is a '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> sea_creatures</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">     </span><span class="com"># Sammy is a shark</span></pre>

<p>
	لقد ضممنا السلسلة النصية <code>Sammy is a</code> مع العنصر ذي الفهرس <code>0</code>. يمكننا أيضًا استخدام العامل <code>+</code> لضمّ قائمتين أو أكثر معًا (انظر الفقرة أدناه):
</p>

<p>
	تساعدنا الفهارس على الوصول إلى أيّ عنصر من عناصر القائمة والعمل عليه.
</p>

<h2 id="-">
	تعديل عناصر القائمة
</h2>

<p>
	يمكننا استخدام الفهرسة لتغيير عناصر القائمة، عن طريق إسناد قيمة إلى عُنصر مُفهرس من القائمة. هذا يجعل القوائم أكثر مرونة، ويسهّل تعديل وتحديث عناصرها.
</p>

<p>
	إذا أردنا تغيير قيمة السلسلة النصية للعنصر الموجود عند الفهرس <code>1</code>، من القيمة <code>cuttlefish</code> إلى <code>octopus</code>، فيمكننا القيام بذلك على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_22" style="">
<span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'octopus'</span></pre>

<p>
	الآن، عندما نطبع <code>sea_creatures</code>، ستكون النتيجة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_24" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">    </span><span class="com"># ['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']</span></pre>

<p>
	يمكننا أيضًا تغيير قيمة عنصر باستخدام فهرس سالب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_26" style="">
<span class="pln">sea_creatures</span><span class="pun">[-</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">      </span><span class="com">#   ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']</span></pre>

<p>
	الآن استبدلنا بالسلسلة <code>squid</code> السلسلة النصية <code>blobfish</code> الموجودة عند الفهرس السالب <code>‎-3</code> (والذي يتوافق مع الفهرس الموجب <code>2</code>).
</p>

<h2 id="-slicing-lists-">
	اقتطاع القوائم (Slicing Lists)
</h2>

<p>
	يمكننا أيضا استدعاء عدة عناصر من القائمة. لنفترض أننا نرغب في طباعة العناصر الموجودة في وسط القائمة <code>sea_creatures</code>، يمكننا القيام بذلك عن طريق اقتطاع شريحة (جزء) من القائمة.
</p>

<p>
	يمكننا باستخدام الشرائح استدعاء عدة قيم عن طريق إنشاء مجال من الفهارس مفصولة بنقطتين <code>[x: y]</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_28" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">4</span><span class="pun">])</span><span class="pln">    </span><span class="com"># ['octopus', 'blobfish', 'mantis shrimp']</span></pre>

<p>
	عند إنشاء شريحة، كما في <code>[‎1: 4]</code>، يبدأ الاقتطاع من العنصر ذي الفهرس الأول (مشمولًا)، وينتهي عند العنصر ذي الفهرس الثاني (غير مشمول)، لهذا طُبعَت في مثالنا أعلاه العناصر الموجودة في المواضع، <code>1</code>، و <code>2</code>، و <code>3</code>.
</p>

<p>
	إذا أردنا تضمين أحد طرفي القائمة، فيمكننا حذف أحد الفهرسَين في التعبير <code>[x: y]</code>. على سبيل المثال، إذا أردنا طباعة العناصر الثلاثة الأولى من القائمة <code>sea_creatures</code>، يمكننا فعل ذلك عن طريق كتابة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_30" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[:</span><span class="lit">3</span><span class="pun">])</span><span class="pln">     </span><span class="com">#  ['shark', 'octopus', 'blobfish']</span></pre>

<p>
	لقد تم طبع العناصر من بداية القائمة حتّى العنصرٍ ذي الفهرس <code>3</code>.
</p>

<p>
	لتضمين جميع العناصر الموجودة في نهاية القائمة، سنعكس الصياغة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_32" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[</span><span class="lit">2</span><span class="pun">:])</span><span class="pln">    </span><span class="com">#  ['blobfish', 'mantis shrimp', 'anemone']</span></pre>

<p>
	يمكننا أيضًا استخدام الفهارس السالبة عند اقتطاع القوائم، تمامًا كما هو الحال مع الفهارس الموجبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_36" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[-</span><span class="lit">4</span><span class="pun">:-</span><span class="lit">2</span><span class="pun">])</span><span class="pln">         </span><span class="com">#  ['octopus', 'blobfish']</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">[-</span><span class="lit">3</span><span class="pun">:])</span><span class="pln">           </span><span class="com">#  ['blobfish', 'mantis shrimp', 'anemone']</span></pre>

<p>
	هناك معامل آخر يمكننا استخدامه في الاقتطاع، ويشير إلى عدد العناصر التي يجب أن يتم القفز عليها (أو الخطوة) بعد استرداد العنصر الأول من القائمة. حتى الآن، لقد أغفلنا المعامل <code>stride</code>، وستعطيه بايثون القيمة الافتراضية <code>1</code>، ما يعني أنه سيتم استرداد كل العناصر الموجودة بين الفهرسَين المحددين.
</p>

<p>
	ستكون لصياغة على الشكل التالي <code>[x: y: z]</code>، إذ يشير <code>z</code> إلى <strong>الخطوة</strong> (stride). في المثال التالي، سننشئ قائمة كبيرة، ثم نقتطعها، مع خطوة اقتطاع تساوي <code>2</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_38" style="">
<span class="pln">numbers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">numbers</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">11</span><span class="pun">:</span><span class="lit">2</span><span class="pun">])</span><span class="pln">       </span><span class="com">#  [1, 3, 5, 7, 9]</span></pre>

<p>
	سيطبع التعبير <code>numbers[‎1: 11: 2]‎</code> القيم ذات الفهارس المحصورة بين <code>1</code> (مشمولة) و <code>11</code> (غير مشمولة)، وسيقفز البرنامج بخطوتين كل مرة، ويطبع العناصر المقابلة.
</p>

<p>
	يمكننا حذف المُعاملين الأوّليين، واستخدام الخطوة وحدها كمعامل وفق الصياغة التالية: <code>[‎::z]</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_40" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">numbers</span><span class="pun">[::</span><span class="lit">3</span><span class="pun">])</span><span class="pln">      </span><span class="com">#  [0, 3, 6, 9, 12]</span></pre>

<p>
	عند طباعة القائمة <code>‎numbers</code> مع تعيين الخطوة عند القيمة <code>3</code>، فلن تُطبع إلا العناصر التي فهارسها من مضاعفات <code>3</code>: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 يجعل استخدام الفهارس الموجبة والسالبة ومعامل الخطوة في اقتطاع القوائم التحكم في القوائم ومعالجتها أسهل وأكثر مرونة.
</p>

<h2 id="-">
	تعديل القوائم بالعوامل
</h2>

<p>
	يمكن استخدام العوامل لإجراء تعديلات على القوائم. سننظر في استخدام العاملين <code>+</code> و <code>*</code> ومقابليهما المركبين <code>‎+=‎</code> و <code>‎*=‎‎</code>.
</p>

<p>
	يمكن استخدام العامل <code>+</code> لضمّ (concatenate) قائمتين أو أكثر معًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_42" style="">
<span class="pln">sea_creatures </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">]</span><span class="pln">
oceans </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'Pacific'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Atlantic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Indian'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Southern'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Arctic'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures </span><span class="pun">+</span><span class="pln"> oceans</span><span class="pun">)</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_44" style="">
<span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Pacific'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Atlantic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Indian'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Southern'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Arctic'</span><span class="pun">]</span></pre>

<p>
	يمكن استخدام العامل <code>+</code> لإضافة عنصر (أو عدة عناصر) إلى نهاية القائمة. لكن تذكر أن تضع العنصر بين قوسين مربعين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_46" style="">
<span class="pln">sea_creatures </span><span class="pun">=</span><span class="pln"> sea_creatures </span><span class="pun">+</span><span class="pln"> </span><span class="pun">[</span><span class="str">'yeti crab'</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">    </span><span class="com">#   ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']</span></pre>

<p>
	يمكن استخدام العامل <code>*</code> لمضاعفة القوائم (multiply lists). ربما تحتاج إلى عمل نُسِخٍ لجميع الملفات الموجودة في مجلد على خادم، أو مشاركة قائمة أفلام مع الأصدقاء؛ ستحتاج في هذه الحالات إلى مضاعفة مجموعات البيانات.
</p>

<p>
	سنضاعف القائمة <code>sea_creatures</code> مرتين، والقائمة <code>oceans</code> ثلاث مرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_48" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">oceans </span><span class="pun">*</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span></pre>

<p>
	والنتيجة ستكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_50" style="">
<span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Pacific'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Atlantic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Indian'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Southern'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Arctic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Pacific'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Atlantic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Indian'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Southern'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Arctic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Pacific'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Atlantic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Indian'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Southern'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Arctic'</span><span class="pun">]</span></pre>

<p>
	يمكننا باستخدام العامل <code>*</code> نسخ القوائم عدة مرات.
</p>

<p>
	يمكننا أيضًا استخدام الشكلين المركبين للعاملين <code>+</code> و <code>*</code> مع عامل الإسناد <code>=</code>. يمكن استخدام العاملين المركبين <code>‎+=‎</code> و <code>‎*=‎</code> لملء القوائم بطريقة سريعة ومُؤتمتة. يمكنك استخدام هذين العاملين لملء القوائم بعناصر نائبة (placeholders) يمكنك تعديلها في وقت لاحق بالمدخلات المقدمة من المستخدم على سبيل المثال.
</p>

<p>
	في المثال التالي، سنضيف عنصرًا إلى القائمة <code>sea_creatures</code>. سيعمل هذا العنصر مثل عمل العنصر النائب، ونود إضافة هذا العنصر النائب عدة مرات. لفعل ذلك، سنستخدم <code>‎+=‎</code> العامل مع الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_52" style="">
<span class="kwd">for</span><span class="pln"> x </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="lit">4</span><span class="pun">):</span><span class="pln">
    sea_creatures </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'fish'</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span></pre>

<p>
	والمخرجات ستكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_54" style="">
<span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fish'</span><span class="pun">]</span></pre>

<p>
	سيُضاف لكل تكرار في الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a> عنصر <code>fish</code> إلى القائمة <code>sea_creatures</code>.
</p>

<p>
	العامل <code>‎*=‎</code> يتصرف بطريقة مماثلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_56" style="">
<span class="pln">sharks </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">for</span><span class="pln"> x </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="lit">4</span><span class="pun">):</span><span class="pln">
    sharks </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sharks</span><span class="pun">)</span></pre>

<p>
	الناتج سيكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_58" style="">
<span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">]</span></pre>

<h2 id="-">
	إزالة عنصر من قائمة
</h2>

<p>
	يمكن إزالة العناصر من القوائم باستخدام التعبير <code>del</code>. سيؤدي ذلك إلى حذف العنصر الموجود عند الفهرس المحدد.
</p>

<p>
	سنزيل من القائمة <code>sea_creatures</code> العنصر <code>octopus</code>. هذا العنصر موجود عند الفهرس <code>1</code>. لإزالة هذا العنصر، سنستخدم العبارة <code>del</code> ثم نستدعي متغير القائمة وفهرس ذلك العنصر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_60" style="">
<span class="pln">sea_creatures </span><span class="pun">=[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">del</span><span class="pln"> sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">     </span><span class="com">#  ['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']</span></pre>

<p>
	الآن، العنصر الموجود عند الفهرس <code>1</code>، أي السلسلة النصية <code>octopus</code>، لم يعد موجودًا في قائمتنا.
</p>

<p>
	يمكننا أيضًا تحديد مجال مع العبارة <code>del</code>. لنقل أننا نريد إزالة العناصر <code>octopus</code>، و <code>blobfish</code> و <code>mantis shrimp</code> معًا. يمكننا فعل ذلك على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_62" style="">
<span class="pln">sea_creatures </span><span class="pun">=[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blobfish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'anemone'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'yeti crab'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">del</span><span class="pln"> sea_creatures</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">4</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span><span class="pln">     </span><span class="com">#  ['shark', 'anemone', 'yeti crab']</span></pre>

<p>
	باستخدام مجال مع العبارة <code>del</code>، تمكنا من إزالة العناصر الموجودة بين الفهرسَين <code>1</code> (مشمول) و <code>4</code> (غير مشمول)، والقائمة أضحت مكوّنة من 3 عناصر فقط بعد إزالة 3 عناصر منها.
</p>

<h2 id="-">
	بناء قوائم من قوائم أخرى موجودة
</h2>

<p>
	يمكن أن تتضمّن عناصر القوائم قوائم أخرى، مع إدراج كل قائمة بين قوسين معقوفين داخل الأقواس المعقوفة الخارجية التابعة لقائمة الأصلية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_64" style="">
<span class="pln">sea_names </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">],[</span><span class="str">'Sammy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Jesse'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Drew'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Jamie'</span><span class="pun">]]</span></pre>

<p>
	تسمى القوائم المُتضمّنة داخل قوائم أخرى بالقوائم المتشعبة (nested lists).
</p>

<p>
	للوصول إلى عنصر ضمن هذه القائمة، سيتعيّن علينا استخدام فهارس متعددة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_66" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_names</span><span class="pun">[</span><span class="lit">1</span><span class="pun">][</span><span class="lit">0</span><span class="pun">])</span><span class="pln">    </span><span class="com">#  Sammy  </span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_names</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">0</span><span class="pun">])</span><span class="pln">    </span><span class="com">#  shark</span></pre>

<p>
	فهرس القائمة الأولى يساوي <code>0</code>، والقائمة الثانية فهرسُها <code>1</code>. ضمن كل قائمة متشعبة داخلية، سيكون هناك فهارس منفصلة، والتي سنسميها فهارس ثانوية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4008_68" style="">
<span class="pln">sea_names</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'shark'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'octopus'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'squid'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pln">

sea_names</span><span class="pun">[</span><span class="lit">1</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Sammy'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">1</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Jesse'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">1</span><span class="pun">][</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Drew'</span><span class="pln">
sea_names</span><span class="pun">[</span><span class="lit">1</span><span class="pun">][</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Jamie'</span></pre>

<p>
	عند العمل مع قوائم مؤلّفة من قوائم، من المهم أن تعي أنك ستحتاج إلى استخدام أكثر من فهرس واحد للوصول إلى عناصر القوائم المتشعبة.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	القوائم هي نوع بيانات مرن يمكن تعديله بسهولة خلال أطوار البرنامج. غطينا في هذه المقالة الميزات والخصائص الأساسية لقوائم، بما في ذلك الفهرسة والاقتطاع والتعديل والضّم.
</p>

<p>
	يمكنك تعلم المزيد عن القوائم من هاتين المقالتين:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r734/" rel="">كيفية استخدام توابع القوائم في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-list-comprehensions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r515/" rel="">فهم كيفية استعمال List Comprehensions في بايثون 3</a>
	</li>
</ul>
<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3" rel="external nofollow">Understanding Lists in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r734/" rel="">كيفية استخدام توابع القوائم في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r732/" rel="">فهم العمليات المنطقية في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">733</guid><pubDate>Tue, 17 Sep 2019 18:02:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x627;&#x644;&#x639;&#x645;&#x644;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x646;&#x637;&#x642;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r732/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d6108e1d6323_.jpg.5863920e9cb76ff7a19f0d1a35366443.jpg" /></p>
<p>
	هناك قيمتان فقط لنوع <a href="https://wiki.hsoub.com/Python/boolean" rel="external">البيانات المنطقية</a>، وهما <strong>True</strong> و <strong>False</strong>. تُستخدم الحسابات المنطقية في البرمجة لإجراء الموازنات، والتحكم في مسار البرنامج.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
}

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<p>
	تمثِّل القيم المنطقية قيم الحقيقة (truth values) في علم المنطق في الرياضيات. وتٌكتب القيمتان <code>True</code> و <code>False</code> دائمًا بالحرفين الكبيرين T و F على التوالي، لأنهما قيمتان خاصتان في بايثون.
</p>

<p>
	في هذه المقالة، سنتعرف على العمليات المنطقية في بايثون، بما في ذلك الموازنة المنطقية، والعوامل المنطقية، وجداول الحقيقة.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31146" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d6108de0fe90_.jpg.284c0d0b84ffe880521c69a494f9183b.jpg" rel="" data-fileext="jpg"><img alt="فهم العمليات المنطقية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31146" data-unique="1zh2ujcqh" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d6108de256ca_.thumb.jpg.811f64c86e274edddf5ce4ed8cf7ceb3.jpg"></a>
</p>

<h2 id="-">
	عوامل الموازنة
</h2>

<p>
	في البرمجة، تُستخدم عوامل الموازنة للموازنة بين القيم، وتعيد إحدى القيمتين المنطقتين <code>True</code> و <code>False</code>.
</p>

<p>
	يوضح الجدول أدناه عوامل الموازنة المنطقية.
</p>

<table>
	<tbody>
		<tr>
			<th>
				العامل
			</th>
			<th>
				الشرح
			</th>
		</tr>
		<tr>
			<td>
				==
			</td>
			<td>
				تساوي
			</td>
		</tr>
		<tr>
			<td>
				!=
			</td>
			<td>
				تخالف
			</td>
		</tr>
		<tr>
			<td>
				&lt;
			</td>
			<td>
				أصغر من
			</td>
		</tr>
		<tr>
			<td>
				&gt;
			</td>
			<td>
				أكبر من
			</td>
		</tr>
		<tr>
			<td>
				&lt;=
			</td>
			<td>
				أصغر من أو تساوي
			</td>
		</tr>
		<tr>
			<td>
				&gt;=
			</td>
			<td>
				أكبر من أو تساوي
			</td>
		</tr>
	</tbody>
</table>

<p>
	لفهم كيفية عمل هذه العوامل، سنستخدم المتغيرين التاليين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_7" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">8</span></pre>

<p>
	في هذا المثال، لمّا كان <code>x</code> يساوي <code>5</code>، فهو أصغر من <code>y</code> ذي القيمة <code>8</code>.
</p>

<p>
	باستخدام هذين المتغيرين والقيم المرتبطة بهما، سنجرّب العوامل من الجدول أعلاه. سنطلب من بايثون أن تطبع ناتج عملية الموازنة، إما True أو False. لتوضيح المثال أكثر، سنطبع <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a> لتوضيح ما جرى تقييمه.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_9" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">8</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x == y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">==</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x != y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">!=</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x &lt; y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">&lt;</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x &gt; y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">&gt;</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x &lt;= y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">&lt;=</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"x &gt;= y:"</span><span class="pun">,</span><span class="pln"> x </span><span class="pun">&gt;=</span><span class="pln"> y</span><span class="pun">)</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_11" style=""><span class="pln">x </span><span class="pun">==</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pln">
x </span><span class="pun">!=</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
x </span><span class="pun">&lt;</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
x </span><span class="pun">&gt;</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span><span class="pln">
x </span><span class="pun">&lt;=</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
x </span><span class="pun">&gt;=</span><span class="pln"> y</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">False</span></pre>

<p>
	باتباع المنطق الرياضي، في كل من التعبيرات المذكورة أعلاه، هذه نتيجة الموازنات:
</p>

<ul>
	<li>
		5 (<code>x</code>) تساوي 8 (<code>y</code>)؟ <strong>خطأ</strong>
	</li>
	<li>
		5 تخالف 8؟ <strong>صح</strong>
	</li>
	<li>
		5 أصغر من 8؟ <strong>صح</strong>
	</li>
	<li>
		5 أكبر من 8؟ <strong>خطأ</strong>
	</li>
	<li>
		5 أصغر من أو يساوي 8؟ <strong>صح</strong>
	</li>
	<li>
		5 ليس أصغر من أو يساوي 8؟ <strong>خطأ</strong>
	</li>
</ul>

<p>
	رغم أننا استخدمنا <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> هنا، إلا أنه بإمكاننا استبدال <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> بها.
</p>

<p>
	يمكن أيضًا استخدام <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> مع العوامل المنطقية. وهي حساسة لحالة الأحرف، ما لم تستخدم <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r412/" rel="">تابعًا إضافيًا للسلاسل النصية</a>.
</p>

<p>
	المثال التالي يوضح كيفية موازنة <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_13" style=""><span class="typ">Sammy</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">
sammy </span><span class="pun">=</span><span class="pln"> </span><span class="str">"sammy"</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy == sammy: "</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Sammy</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> sammy</span><span class="pun">)</span><span class="pln">        </span><span class="com"># Sammy == sammy:  False</span></pre>

<p>
	السلسلة <code>"Sammy"</code> أعلاه لا تساوي السلسلة النصية <code>"sammy"</code>، لأنهما ليستا متماثلتين تمامًا؛ فإحداهما تبدأ بحرف كبير <code>S</code>، والأخرى بحرف صغير <code>s</code>. ولكن لو أضفنا متغيرًا آخر قيمته "Sammy"، فستكونان متساويتين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_15" style=""><span class="typ">Sammy</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">
sammy </span><span class="pun">=</span><span class="pln"> </span><span class="str">"sammy"</span><span class="pln">
also_Sammy </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy == sammy: "</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Sammy</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> sammy</span><span class="pun">)</span><span class="pln">                   </span><span class="com"># Sammy == sammy:  False</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy == also_Sammy"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Sammy</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> also_Sammy</span><span class="pun">)</span><span class="pln">   </span><span class="com"># Sammy == also_Sammy:  True</span></pre>

<p>
	يمكنك أيضًا استخدام عوامل الموازنة الأخرى، بما في ذلك <code>&gt;</code> و <code>&lt;</code> لموازنة سلسلتين نصيتين. ستوازن بايثون هذه السلاسل النصية بحسب الترتيب المعجمي في نظام محارف ASCII.
</p>

<p>
	يمكننا أيضًا تقييم القيم المنطقية باستخدام عوامل الموازنة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_17" style=""><span class="pln">t </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
f </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">False</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"t != f: "</span><span class="pun">,</span><span class="pln"> t </span><span class="pun">!=</span><span class="pln"> f</span><span class="pun">)</span><span class="pln">      </span><span class="com">#   t != f:  True</span></pre>

<p>
	تبيّن الشيفرة البرمجية أعلاه أنّ <code>True</code> لا تساوي <code>False</code>.
</p>

<p>
	لاحظ الفرق بين العاملين <code>=</code> و <code>==</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_19" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> y   </span><span class="com"># x إلى  y إسناد قيمة</span><span class="pln">
x </span><span class="pun">==</span><span class="pln"> y  </span><span class="com"># متساويين  x و  y تتحقق مما إذا كان</span></pre>

<p>
	الأول <code>=</code>، هو عامل الإسناد (assignment operator)، والذي سيحدد قيمة أحد المتغيرين، ويجعلها مساوية لقيمة الآخر. الثاني <code>==</code>، وهو عامل الموازنة الذي سيحدد ما إذا كانت القيمتان متساويتان.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2 id="-">
	العوامل المنطقية
</h2>

<p>
	هناك ثلاثة عوامل منطقية تُستخدم لموازنة القيم. وتعيد إما <code>True</code> أو <code>False</code>. هذه العوامل هي، <code>and</code> (و)، و <code>or</code> (أو)، و <code>not</code> (النفي)، وقد عرّفناها في الجدول أدناه.
</p>

<table>
	<tbody>
		<tr>
			<th>
				العامل
			</th>
			<th>
				الشرح
			</th>
			<th>
				الصياغة
			</th>
		</tr>
		<tr>
			<td>
				and
			</td>
			<td>
				إن كان كلا التعبيرين صحيحين True
			</td>
			<td>
				<code>x and y</code>
			</td>
		</tr>
		<tr>
			<td>
				or
			</td>
			<td>
				إن كان أحد التعبيرين على الأقل صحيحًا True
			</td>
			<td>
				<code>x or y</code>
			</td>
		</tr>
		<tr>
			<td>
				not
			</td>
			<td>
				إن كان التعبير خطأ True
			</td>
			<td>
				<code>not x</code>
			</td>
		</tr>
	</tbody>
</table>

<p>
	عادةً ما تُستخدم العوامل المنطقية لتقييم ما إذا كان تعبيران منطقيان صحيحان أم لا. على سبيل المثال، يمكن استخدامها لتحديد ما إذا كان الطالب قد نجح، وأنه مُسجل في الفصل، وإذا كانت كلتا الحالتان صحيحتان، فسيتم إدخال الطالب إلى النظام. مثال آخر هو تحديد ما إذا كان المستخدم عميلًا نشطًا لمتجر إلكتروني استنادًا إلى ما إذا كان لديه رصيد في المتجر، أو أنه اشترى خلال الأشهر الستة الماضية.
</p>

<p>
	لفهم كيفية عمل العوامل المنطقية، دعنا نقيّم التعبيرات الثلاث التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_21" style=""><span class="kwd">print</span><span class="pun">((</span><span class="lit">9</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">4</span><span class="pun">))</span><span class="pln">    </span><span class="com"># كلا التعبيرين صحيحان</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">((</span><span class="lit">8</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">8</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="pun">(</span><span class="lit">6</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">6</span><span class="pun">))</span><span class="pln">   </span><span class="com"># أحد التعبيرين صحيح </span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="kwd">not</span><span class="pun">(</span><span class="lit">3</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">))</span><span class="pln">             </span><span class="com"># التعبير الأصلي  خاطئ</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode"><span class="hljs-literal">True</span>
<span class="hljs-literal">True</span>
<span class="hljs-literal">True</span>
</pre>

<p>
	في الحالة الأولى، <code>((9&gt; 7) و (2 &lt;4))print</code>، كلا التعبيرين <code>‎</code>9&gt; 7 و <code>‎</code>2 &lt;4 ينبغي أن يكونا صحيحين لأنّ العامل <code>and</code> مُستخدَم.
</p>

<p>
	في الحالة الثانية، <code>print((8 == <span class="ipsEmoji">?</span> or (6 != 6))‎</code>بما أنّ قيمة <code>8 == 8</code> تم تقييمها بـ <code>True</code>، فإنّ نتيجة تقييم <code>‎6 != 6‎</code>لا تهم. لكن لو استخدمنا العامل <code>and</code>، لتمّ تقييم العبارة المنطقية بالقيمة <code>False</code>.
</p>

<p>
	في الحالة الثالثة، <code>print(not(3 &lt;= 1))‎</code>، العامل <code>not</code> ينفي القيمة <code>False</code> التي تعيدها العملية المنطقية <code>3 &lt;= 1</code>.
</p>

<p>
	في المثال التالي سنستبدل <a href="https://wiki.hsoub.com/Python/float" rel="external">بالأعداد العشرية</a> <a href="https://wiki.hsoub.com/Python/int" rel="external">أعدادًا صحيحة</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_23" style=""><span class="kwd">print</span><span class="pun">((-</span><span class="lit">0.2</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">1.4</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="lit">0.8</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">3.1</span><span class="pun">))</span><span class="pln">    </span><span class="com"># أحد التعبيرين خاطئ </span><span class="pln">
</span><span class="kwd">print</span><span class="pun">((</span><span class="lit">7.5</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">8.9</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="pun">(</span><span class="lit">9.2</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">9.2</span><span class="pun">))</span><span class="pln">     </span><span class="com"># كلا التعبيرين خاطئان</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="kwd">not</span><span class="pun">(-</span><span class="lit">5.7</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">0.3</span><span class="pun">))</span><span class="pln">                  </span><span class="com"># التعبير الأصلي صحيح</span></pre>

<p>
	في المثال أعلاه:
</p>

<ul>
	<li>
		<code>and</code>: يجب أن يكون واحد على الأقل من التعبيرين خاطئًا لتعيد القيمة <code>False</code>،
	</li>
	<li>
		<code>or</code>: يجب أن يكون كلا التعبيرين خاطئين لتعيد القيمة <code>False</code>،
	</li>
	<li>
		<code>not</code>: يجب أن يكون التعبير المرافق لها صحيحًا حتى تعيد القيمة <code>False</code>.
	</li>
</ul>

<p>
	إذا لم تكن النتائج أعلاه واضحة لك، فسنعرض بعض جداول الحقيقة أدناه لتفهم الأمر بشكل أفضل.
</p>

<p>
	يمكنك أيضًا كتابة عبارات مركبة باستخدام <code>and</code>, و <code>or</code>, و <code>not</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_25" style=""><span class="kwd">not</span><span class="pun">((-</span><span class="lit">0.2</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">1.4</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">((</span><span class="lit">0.8</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">3.1</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="pun">(</span><span class="lit">0.1</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">)))</span></pre>

<p>
	التعبير الداخلي: <code>(0.8 &lt;3.1) أو (0.1 == 0.1)</code>. يعيد القيمة <code>True</code>، لأنّ كلا العبارتين الرياضيتين تعيدان <code>True</code>.
</p>

<p>
	الآن، نأخذ القيمة المُعادة <code>True</code> ونجمعها مع التعبير المنطقي التالي: <code>(‎-0.2&gt; 1.4) and (True)</code>. هذا المثال يعيد <code>False</code>، لأنّ العبارة <code>‎-0.2&gt; 1.4</code> تعيد القيمة <code>False</code>، و <code>‎(False) and (True)‎</code> تعيد <code>False</code>.
</p>

<p>
	أخيرًا، يعيد التعبير الخارجي: <code>not (False)‎</code> القيمة <code>True</code>، وبالتالي ستكون القيمة النهائية المعادة هي:
</p>

<pre class="ipsCode"><span class="hljs-literal">True</span>
</pre>

<h2 id="-truth-tables-">
	جداول الحقيقة (Truth Tables)
</h2>

<p>
	المنطق مجال واسع، وسنكتفي في هذه المقالة ببعض الأفكار المهمة التي يمكن أن تساعدك على تحسين طريقة تفكيرك وخوارزمياتك.
</p>

<p>
	فيما يلي جداول الحقيقة لعامل الموازنة <code>==</code>، والعوامل المنطقية <code>and</code>, و <code>or</code>, و <code>not</code>. من المفيد أن تحفظ كيفية عملها، فذلك سيجعلك أسرع في اتخاذ القرارات أثناء كتابة الشيفرات البرمجية.
</p>

<h3 id="-">
	جدول الحقيقة الخاص بالعامل <code>==</code>
</h3>

<table>
	<tbody>
		<tr>
			<th>
				x
			</th>
			<th>
				==
			</th>
			<th>
				y
			</th>
			<th>
				القيمة المُعادة
			</th>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				==
			</td>
			<td>
				True
			</td>
			<td>
				True
			</td>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				==
			</td>
			<td>
				False
			</td>
			<td>
				False
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				==
			</td>
			<td>
				True
			</td>
			<td>
				False
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				==
			</td>
			<td>
				False
			</td>
			<td>
				True
			</td>
		</tr>
	</tbody>
</table>

<h3 id="-and-">
	جدول الحقيقة الخاص بالعامل <code>AND</code>
</h3>

<table>
	<tbody>
		<tr>
			<th>
				x
			</th>
			<th>
				and
			</th>
			<th>
				y
			</th>
			<th>
				القيمة المُعادة
			</th>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				and
			</td>
			<td>
				True
			</td>
			<td>
				True
			</td>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				and
			</td>
			<td>
				False
			</td>
			<td>
				False
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				and
			</td>
			<td>
				True
			</td>
			<td>
				False
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				and
			</td>
			<td>
				False
			</td>
			<td>
				False
			</td>
		</tr>
	</tbody>
</table>

<h3 id="-or-">
	جدول الحقيقة الخاص بالعامل <code>OR</code>
</h3>

<table>
	<tbody>
		<tr>
			<th>
				x
			</th>
			<th>
				or
			</th>
			<th>
				y
			</th>
			<th>
				القيمة المُعادة
			</th>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				or
			</td>
			<td>
				True
			</td>
			<td>
				True
			</td>
		</tr>
		<tr>
			<td>
				True
			</td>
			<td>
				or
			</td>
			<td>
				False
			</td>
			<td>
				True
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				or
			</td>
			<td>
				True
			</td>
			<td>
				True
			</td>
		</tr>
		<tr>
			<td>
				False
			</td>
			<td>
				and
			</td>
			<td>
				False
			</td>
			<td>
				False
			</td>
		</tr>
	</tbody>
</table>

<h3 id="-not-">
	جدول الحقيقة الخاص بالعامل <code>NOT</code>
</h3>

<table>
	<tbody>
		<tr>
			<th>
				not
			</th>
			<th>
				x
			</th>
			<th>
				القيمة المُعادة
			</th>
		</tr>
		<tr>
			<td>
				not
			</td>
			<td>
				True
			</td>
			<td>
				False
			</td>
		</tr>
		<tr>
			<td>
				not
			</td>
			<td>
				False
			</td>
			<td>
				True
			</td>
		</tr>
	</tbody>
</table>

<p>
	تُستخدم جداول الحقيقة في المنطق الرياضياتي كثيرًا، وهي مفيدة، ويجب حفظها ووضعها في الحسبان عند إنشاء الخوارزميات البرمجية.
</p>

<h2 id="-">
	استخدام العوامل المنطقية للتحكم في مسار البرنامج
</h2>

<p>
	للتحكم في مسار ونتائج البرنامج عبر العبارات الشرطية (flow control statements)، يمكننا استخدام <strong>شرط</strong> (condition) متبوعًا <strong>بعبارة برمجية</strong> (clause).
</p>

<p>
	يتم تقييم الشرط بإحدى القيمتين True أو False، تلك القيمة تُستخدم لاتخاذ قرار في البرنامج. أما العبارة (clause) فهي الكتلة البرمجية التي تعقب الشرط وتحدِّد نتيجة البرنامج وما ينبغي فعله في حال تحقق الشرط.
</p>

<p>
	تُظهر الشيفرة أدناه مثالًا على عوامل الموازنة التي تعمل مع العبارات الشرطية للتحكم في مسار البرنامج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_943_27" style=""><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">65</span><span class="pun">:</span><span class="pln">                 </span><span class="com"># شرط</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Passing grade"</span><span class="pun">)</span><span class="pln">      </span><span class="com"># بند</span><span class="pln">

</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Failing grade"</span><span class="pun">)</span></pre>

<p>
	سيحدد هذا البرنامج ما إذا كان الطالب سينجح أم يرسب. في حال كانت الدرجة التي حصل عليها الطالب تساوي 83 مثلًا، فتقييم العبارة الأولى سيكون <code>True</code>، وسيُطبَع النص <code>"Passing grade</code>. أما إن كانت درجة الطالب هي <code>59</code>، فتقييم العبارة الأولى سيكون <code>False</code>، وبالتالي سينتقل البرنامج لتنفيذ العبارة المرتبطة بالتعبير <code>else</code>، أي سيطبع <code>Failing grade</code>.
</p>

<p>
	يمكن تقييم كل كائنات بايثون بإحدى القيمتين <code>True</code> أو <code>False</code>، لذلك <a href="http://legacy.python.org/dev/peps/pep-0008/" rel="external nofollow">يوصي الدليل PEP 8</a> بعدم موازنة كائن بإحدى القيمتين <code>True</code> أو <code>False</code>، لأنّ ذلك قد يؤدي إلى إعادة قيم منطقية غير متوقعة. على سبيل المثال، عليك تجنب استخدام مثل هذه العبارة <code>sammy == True</code> في برامجك.
</p>

<p>
	تساعد العوامل المنطقية على صياغة شروط يمكن استخدامها لتحديد النتيجة النهائية للبرنامج من خلال التحكم في مسار التنفيذ.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	ألقينا في هذه المقالة نظرة على الموازنات والعوامل المنطقية، بالإضافة إلى جداول الحقيقة، وكيفية استخدام القيم المنطقية للتحكم في مسار البرنامج.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-boolean-logic-in-python-3" rel="external nofollow">Understanding Boolean Logic in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r733/" rel="">مدخل إلى القوائم</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B6%D9%85%D9%86%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r731/" rel="">الدوال الرياضية المضمّنة في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">732</guid><pubDate>Sat, 14 Sep 2019 13:04:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62F;&#x648;&#x627;&#x644; &#x627;&#x644;&#x631;&#x64A;&#x627;&#x636;&#x64A;&#x629; &#x627;&#x644;&#x645;&#x636;&#x645;&#x646;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B6%D9%85%D9%86%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r731/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d6122f053c92_4.jpg.fb68b3558a84553c584c74e6cd1e29e5.jpg" /></p>
<p>
	تتضمّن بايثون 3 العديد من الدوال التي يمكنك استخدامها بسهولة في أي برنامج. تتيح لك بعض تلك الدوال تحويل أنواع البيانات، والبعض الآخر خاص بنوع معين، مثل <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a>.
</p>

<p>
	سنستعرض في هذه المقالة بعض الدوال الرياضية المُضمّنة التي يمكن استخدامها مع أنواع البيانات العددية في بايثون 3. سنلقي نظرة على الدوال التالية:
</p>

<ul>
	<li>
		abs()<code>‎</code>: للحصول على القيمة المطلقة
	</li>
	<li>
		divmod()<code>‎</code>: للحصول على الحاصل والباقي في وقت واحد
	</li>
	<li>
		pow()<code>‎</code>: لرفع عدد لقوة معينة
	</li>
	<li>
		round()<code>‎</code>: لتقريب عدد بمنازل عشرية محددة
	</li>
	<li>
		sum()<code>‎</code>: لحساب مجموع العناصر في كائن قابلٍ للتكرار (iterable)
	</li>
</ul>

<p>
	فهم هذه التوابع سيمنحك مرونة أكبر في البرمجة، ويساعدك على اتخاذ قرارات مدروسة عند تحديد العوامل والدوال التي عليك استخدامها. سنتطرق إلى بعض هذه الدوال في هذه المقالة، مع تقديم بعض الأمثلة.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31151" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d6122d6d902a_4.jpg.fb6ebb5751373d7b1634180dfafa43ce.jpg" rel="" data-fileext="jpg"><img alt="الدوال الرياضية المضمنة4.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31151" data-unique="f4l2cjcwt" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d6122d6ee6a3_4.thumb.jpg.84ea005d8dac27566e56efd9b4583cbe.jpg"></a>
</p>

<h2 id="-">
	القيمة المطلقة
</h2>

<p>
	تعيد الدالة المضمّنة abs()<code>‎</code> القيمة المطلقة للعدد الذي يُمرر إليها. في الرياضيات، تشير القيمة المطلقة إلى العدد نفسه إن كانت القيمة موجبة، أو القيمة المعاكسة إن كانت القيمة سالبة.
</p>

<p>
	مثلًا، القيمة المطلقة للعدد <code>15</code> هي <code>15</code>، والقيمة المطلقة للعدد <code>‎-74</code> هي <code>74</code>، والقيمة المطلقة للعدد <code>0</code> هي <code>0</code>.
</p>

<p>
	القيمة المطلقة مفهوم مهم في الحساب والتحليل، كما أنّها مفيدة كذلك في المواقف اليومية، مثل حساب المسافة المقطوعة. على سبيل المثال، إذا كنت تحاول الوصول إلى مكان يبعد 58 ميلًا، ولكنك تجاوزت ذلك المكان، وسافرت 93 <a href="https://ar.wikipedia.org/wiki/%D9%81%D8%B1%D8%B3%D8%AE" rel="external nofollow">فرسخًا</a>. فإن حسبت عدد الفراسخ التي ينبغي أن تقطعها الآن للوصول إلى الوجهة المقصودة، فسوف ينتهي بك المطاف بعدد سالب، لكن لا يمكنك السفر عددًا سالبًا من الفراسخ!
</p>

<p>
	سنستخدم الدالة abs()<code>‎</code> لحل هذه المشكلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_7" style=""><span class="pln">miles_from_origin </span><span class="pun">=</span><span class="pln"> </span><span class="lit">58</span><span class="pln">   </span><span class="com"># عدد الفراسخ التي تفصلنا عن الوجهة انطلاقًا من المُنطلق </span><span class="pln">
miles_travelled </span><span class="pun">=</span><span class="pln"> </span><span class="lit">93</span><span class="pln">       </span><span class="com"># الفراسخ المقطوعة من المُنطَلق إلى الوجهة</span><span class="pln">

</span><span class="com"># حساب عدد الفراسخ من الموقع الحالي</span><span class="pln">
miles_to_go </span><span class="pun">=</span><span class="pln"> miles_from_origin </span><span class="pun">-</span><span class="pln"> miles_travelled   

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">miles_to_go</span><span class="pun">)</span><span class="pln">            </span><span class="com"># طباعة عدد الفراسخ المتبقية - عدد سالب</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">abs</span><span class="pun">(</span><span class="pln">miles_to_go</span><span class="pun">))</span><span class="pln">    </span><span class="com"># حساب القيمة المطلقة للعدد السالب</span></pre>

<p>
	المخرجات ستكون:
</p>

<pre class="ipsCode">-<span class="ruby"><span class="hljs-number">35</span>
</span>35
</pre>

<p>
	لولا استخدام الدالة abs()<code>‎</code>، لحصلنا على عدد سالب، أي <code>‎</code>-35. ورغم أنّ <code>miles_travelled</code> أصغر من <code>miles_from_origin</code>، فإنّ الدالة abs()<code>‎</code> تحل إشكالية العدد السالب.
</p>

<p>
	عندما نمرّر لها عددًا سالبًا، ستعيد الدالة abs()<code>‎</code> عددًا موجبًا، لأنّ القيمة المطلقة دائمًا تعيد أعدادًا موجبة أو معدومة.
</p>

<p>
	في المثال التالي، سنمرر للدالة abs()<code>‎</code> عددًا موجبًا، وكذلك الصفر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_9" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">abs</span><span class="pun">(</span><span class="lit">89.9</span><span class="pun">))</span><span class="pln">     </span><span class="com">#  89.9 </span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">abs</span><span class="pun">(</span><span class="lit">0</span><span class="pun">))</span><span class="pln">          </span><span class="com"># 0</span></pre>

<h2 id="-">
	العثور على الحاصل والباقي بدالة واحدة
</h2>

<p>
	القسمة التحتية (floor division، التي تُعيد حاصل القسمة [quotient])، وقسمة الباقي (modulo division، التي تعيد باقي القسمة [remainder])، مرتبطان ارتباطًا وثيقًا، وقد يكون من المفيد استخدام دالة تجمع بين العمليتين معًا.
</p>

<p>
	تجمع الدالة المضمّنة <code>divmod()‎</code> بين العمليتين، إذ تعيد أولًا حاصل عملية القسمة التحتية، ثم الباقي. ينبغي تمرير عددين إلى الدالة <code>divmod()‎</code>، على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_11" style=""><span class="pln">divmod</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln">b</span><span class="pun">)</span></pre>

<p>
	تكافئ هذه الدالة العمليتين التاليتين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_13" style=""><span class="pln">a </span><span class="pun">//</span><span class="pln"> b
a </span><span class="pun">&amp;</span><span class="pln"> b</span></pre>

<p>
	لنفترض أننا كتبنا كتابًا يحتوي 80 ألف كلمة. يريد الناشر أن تحتوي كل صفحة من الكتاب ما بين 300 و 250 كلمة، ونود أن نعرف عدد الصفحات التي ستشكل الكتاب بحسب عدد كلمات الصفحة الذي اخترناه. باستخدام الدالة <code>divmod()‎</code>، يمكننا أن نعرف على الفور عدد الصفحات في الكتاب، وعدد الكلمات المتبقية التي ستُنقل إلى صفحة إضافية.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_15" style=""><span class="pln">words </span><span class="pun">=</span><span class="pln"> </span><span class="lit">80000</span><span class="pln">     </span><span class="com"># كم عدد الكلمات في كتابنا</span><span class="pln">
per_page_A </span><span class="pun">=</span><span class="pln"> </span><span class="lit">300</span><span class="pln">    </span><span class="com"># 300 عدد كلمات الصفحة هو :A الخيار</span><span class="pln">
per_page_B </span><span class="pun">=</span><span class="pln"> </span><span class="lit">250</span><span class="pln">    </span><span class="com"># عدد كلمات الصفحة هو 250 :B الخيار </span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">divmod</span><span class="pun">(</span><span class="pln">words</span><span class="pun">,</span><span class="pln">per_page_A</span><span class="pun">))</span><span class="pln"> </span><span class="com"># A حساب الخيار</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">divmod</span><span class="pun">(</span><span class="pln">words</span><span class="pun">,</span><span class="pln">per_page_B</span><span class="pun">))</span><span class="pln"> </span><span class="com"># B حساب الخيار</span></pre>

<p>
	وسينتج عن هذه الشيفرة:
</p>

<pre class="ipsCode">(<span class="hljs-number">266</span>, <span class="hljs-number">200</span>)
(<span class="hljs-number">320</span>, <span class="hljs-number">0</span>)
</pre>

<p>
	في الخيار A، سنحصل على 266 صفحة مليئة بالكلمات، و 200 كلمة متبقية (ثلثا صفحة)، والمجموع هو 267 صفحة، وفي الخيار B، سنحصل على كتاب من 320 صفحة. إن أردنا الحفاظ على البيئة، فالخيار A قد يكون أفضل، ولكن إذا أردنا تصميمًا جذابًا، أو الكتابة بحجم خط كبير، فقد نختار الخيار "B".
</p>

<p>
	تقبل الدالة <code>divmod()‎</code> ا<a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> و<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>، في المثال التالي سنمرر عددًا عشريًّا إلى الدالة <code>divmod()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_18" style=""><span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">985.5</span><span class="pln">
b </span><span class="pun">=</span><span class="pln"> </span><span class="lit">115.25</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">divmod</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln">b</span><span class="pun">))</span><span class="pln">   </span><span class="com">#  (8.0, 63.5)</span></pre>

<p>
	في هذا المثال، العدد <code>8.0</code> هو حاصل القسمة التحتية للعدد 985.5 مقسومًا على 115.25، و <code>63.5</code> هو الباقي.
</p>

<p>
	يمكنك استخدام عامل القسمة التحتية <code>//</code> و عامل الباقي<code>%</code> للتحقق من نتيجة <code>divmod()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_20" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">a</span><span class="pun">//</span><span class="pln">b</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  8.0</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">a</span><span class="pun">%</span><span class="pln">b</span><span class="pun">)</span><span class="pln">   </span><span class="com"># 63.5</span></pre>

<h2 id="-power-">
	القوة (Power)
</h2>

<p>
	في بايثون، يمكنك استخدام عامل القوة <code>**</code> (أو الأس) لرفع عدد إلى قوة معينة، أو يمكنك استخدام الدالة <code>pow()‎</code> المضمّنة التي تأخذ عددين وتجري العملية نفسها.
</p>

<p>
	لتوضيح كيفية عمل الدالة <code>pow()‎</code>، لنقل أننا نجري أبحاثًا على البكتيريا، ونريد أن نقدّر عدد البكتيريا التي سنحصل عليها في نهاية اليوم إذا بدأنا ببكتيريا واحدة. تتضاعف البكتيريا التي نعمل عليها في كل ساعة، لذلك النتيجة النهائية ستكون 2 قوة العدد الكلي لعدد الساعات التي مرت (24 في حالتنا).
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_22" style=""><span class="pln">hours </span><span class="pun">=</span><span class="pln"> </span><span class="lit">24</span><span class="pln">
total_bacteria </span><span class="pun">=</span><span class="pln"> pow</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln">hours</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">total_bacteria</span><span class="pun">)</span><span class="pln">   </span><span class="com"># 16777216</span></pre>

<p>
	لقد مرّرنا عددين صحيحين للدالة <code>pow()‎</code>، والنتيجة التي حصلنا عليها، والتي تمثِّل عدد البكتيريا بحلول نهاية اليوم، هي أكثر من 16 مليون بكتيريا.
</p>

<p>
	في الرياضيات، نكتب "3 أسّ 3" بشكل عام على النحو التالي: 3<sup>³</sup> والتي تكافئ 3 × 3 × 3، أي 27. ولحساب 3<sup>³</sup> في بايثون، نكتب <code>pow(3,3)‎</code>. تقبل الدالة <code>pow()‎</code> <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> و<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>، وتوفّر بديلًا لعامل الأس <code>**</code>.
</p>

<h2 id="-">
	تقريب الأعداد
</h2>

<p>
	تقريب الأعداد (Rounding Numbers) ضروري عند العمل مع <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> التي تحتوي على الكثير من المنازل (الأجزاء) العشرية. تقبل الدالة المضمنة round()<code>‎</code> عددين: أحدها يمثِّل العدد المراد تقريبه والآخر يحدّد عدد المنازل العشرية المراد الإبقاء عليها (أي قيمة التقريب).
</p>

<p>
	سنستخدم هذه الدالة لتقريب <a href="https://wiki.hsoub.com/Python/float" rel="external">عدد عشري</a> له أكثر من 10 منازل عشرية والحصول على عدد بأربعة منازل عشرية فقط:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_24" style=""><span class="pln">i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">17.34989436516001</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">round</span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="lit">4</span><span class="pun">))</span><span class="pln">   </span><span class="com"># 17.3499</span></pre>

<p>
	في المثال أعلاه، تم تقريب العدد <code>17.34989436516001</code> إلى <code>17.3499</code> لأننا حددنا عدد المنازل العشرية التي ينبغي الاقتصار عليها بأربعة.
</p>

<p>
	لاحظ أيضًا أنّ الدالة round()<code>‎</code> تقرّب الأعداد إلى الأعلى، لذا بدلًا من إعادة <code>17.3498</code>، فقد أعادت <code>17.3499</code>، لأنّ الرقم الذي يلي المنزل العشري 8 هو الرقم 9. وسيتم تقريب أي عدد متبوع بالعدد 5 أو أكبر إلى العدد الصحيح التالي.
</p>

<p>
	في الحياة اليومية، نُقرِّب الأعداد لأسباب كثيرة، وخاصة في التعاملات المالية؛ فلا يمكننا تقسيم فلس واحد بالتساوي بين عدة أصدقاء مثلًا.
</p>

<p>
	سنكتب في المثال التالي برنامجًا بسيطًا يمكنه حساب البقشيش. في هذا المثال سنحدد قيم المتغيرات، ولكن يمكنك إعادة كتابة البرنامج لجعل المستخدمين يدخلون القيم. في هذا المثال، ذهب 3 أصدقاء إلى مطعم، وأرادوا تقسيم الفاتورة، والتي تبلغ 87.93 دولارًا بالتساوي، بالإضافة إلى إكرامية (بقشيش) بنسبة 20٪.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_28" style=""><span class="pln">bill </span><span class="pun">=</span><span class="pln"> </span><span class="lit">87.93</span><span class="pln">                   </span><span class="com"># إجمالي الفاتورة</span><span class="pln">
tip </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pln">                      </span><span class="com"># ٪ 20 بقشيش</span><span class="pln">
split </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">                      </span><span class="com"># عدد الناس الذين سيتشاركون الفاتورة</span><span class="pln">

total </span><span class="pun">=</span><span class="pln"> bill </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="pln">bill </span><span class="pun">*</span><span class="pln"> tip</span><span class="pun">)</span><span class="pln">    </span><span class="com"># حساب الفاتورة الإجمالية</span><span class="pln">
each_pay </span><span class="pun">=</span><span class="pln"> total </span><span class="pun">/</span><span class="pln"> split       </span><span class="com"># حساب ما ينبغي أن يدفعه كل شخص</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">each_pay</span><span class="pun">)</span><span class="pln">                </span><span class="com"># ما ينبغي أن يدفعه كل شخص قبل التقريب</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">round</span><span class="pun">(</span><span class="pln">each_pay</span><span class="pun">,</span><span class="lit">2</span><span class="pun">))</span><span class="pln">       </span><span class="com"># تقريب العدد - لا يمكننا تقسيم الفلسات</span></pre>

<p>
	والمخرجات ستكون:
</p>

<pre class="ipsCode">35<span class="hljs-selector-class">.172000000000004</span>
35<span class="hljs-selector-class">.17</span>
</pre>

<p>
	في هذا البرنامج، نطلب أولًا إخراج العدد بعد حساب إجمالي الفاتورة والإكراميات مقسومًا على 3، النتيجة ستكون عددًا يتضمّن الكثير من المنازل العشرية: <code>35.172000000000004</code>. نظرًا لأنّ هذا العدد ليس له معنى كمبلغ مالي، فإننا نستخدم الدالة round()<code>‎</code>، ونقصر المنازل العشرية على 2، حتى نتمكن من توفير ناتج يمكن للأصدقاء الثلاثة أن يدفعوه: <code>35.17</code>.
</p>

<p>
	إذا كنت تفضل التقريب إلى عدد بلا منازل عشرية، يمكنك تمرير <code>0</code> كمعامل ثان إلى الدالة round()<code>‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_30" style=""><span class="pln">round</span><span class="pun">(</span><span class="lit">345.9874590348545304636</span><span class="pun">,</span><span class="lit">0</span><span class="pun">)</span></pre>

<p>
	القيمة الناتجة ستكون <code>346.0</code>.
</p>

<p>
	يمكنك أيضًا تمرير <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> إلى round()<code>‎</code> دون الخوف من تلقي خطأ، وهذا مفيد في حال تلقيت من المستخدم عددًا صحيحًا بدلًا من عدد عشري. وفي هذه الحالة، سيُعاد عدد صحيح.
</p>

<h2 id="-">
	حساب المجموع
</h2>

<p>
	تُستخدم الدالة sum()<code>‎</code> لحساب مجاميع أنواع البيانات العددية المركبة (numeric compound data types)، بما في ذلك <a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>، و<a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a>، و<a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a>.
</p>

<p>
	يمكننا تمرير <a href="https://wiki.hsoub.com/Python/list" rel="external">قائمة</a> إلى الدالة sum()<code>‎</code> لجمع كل عناصرها بالترتيب من اليسار إلى اليمين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_32" style=""><span class="pln">some_floats </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">1.1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2.2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3.3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4.4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6.6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7.7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8.8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9.9</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sum</span><span class="pun">(</span><span class="pln">some_floats</span><span class="pun">))</span><span class="pln">    </span><span class="com">#  49.5</span></pre>

<p>
	نفس النتيجة سنحصل عليها إن استخدمنا <a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a> و<a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_34" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">sum</span><span class="pun">((</span><span class="lit">8</span><span class="pun">,</span><span class="lit">16</span><span class="pun">,</span><span class="lit">64</span><span class="pun">,</span><span class="lit">512</span><span class="pun">)))</span><span class="pln">  </span><span class="com"># حساب مجموع الأعداد في الصف</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sum</span><span class="pun">({-</span><span class="lit">10</span><span class="pun">:</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">20</span><span class="pun">:</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">30</span><span class="pun">:</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">}))</span><span class="pln">  </span><span class="com"># حساب مجموع الأعداد في القاموس</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode"><span class="hljs-number">60</span>
<span class="hljs-number">-60</span>
</pre>

<p>
	يمكن أن تأخذ الدالة sum()<code>‎</code> وسيطين، الوسيط الثاني سيُضاف إلى المجموع الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9115_36" style=""><span class="pln">some_floats </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">1.1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2.2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3.3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4.4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6.6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7.7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8.8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9.9</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sum</span><span class="pun">(</span><span class="pln">some_floats</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.5</span><span class="pun">))</span><span class="pln">                     </span><span class="com"># 50.0</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sum</span><span class="pun">({-</span><span class="lit">10</span><span class="pun">:</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">20</span><span class="pun">:</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">30</span><span class="pun">:</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">},</span><span class="lit">60</span><span class="pun">))</span><span class="pln">    </span><span class="com"># 0</span></pre>

<p>
	القيمة الافتراضية للوسيط الثاني هي 0.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	غطينا في هذه المقالة بعض التوابع المضمّنة التي يمكنك استخدامها مع أنواع البيانات العددية في بايثون.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/built-in-python-3-functions-for-working-with-numbers" rel="external nofollow">Built-in Python 3 Functions for Working with Numbers</a> لصاحبته Lisa Tagliaferri
</p>

<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r732/" rel="">فهم العمليات المنطقية في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B3%D8%A7%D8%A8%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r730/" rel="">كيفية إجراء العمليات الحسابية في بايثون 3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/python/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">731</guid><pubDate>Tue, 10 Sep 2019 18:05:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x62C;&#x631;&#x627;&#x621; &#x627;&#x644;&#x639;&#x645;&#x644;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x62D;&#x633;&#x627;&#x628;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B3%D8%A7%D8%A8%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r730/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60eb193793b_.jpg.9b0ce74abc4c143c8eb2cce25a97c808.jpg" /></p>
<p>
	الأعداد شائعةٌ جدًا في البرمجة، إذ تُستخدم لتمثيل مختلف القيم، مثل أبعاد حجم الشاشة، والمواقع الجغرافية، والمبالغ المالية، ومقدار الوقت الذي مر منذ بداية فيديو، والألوان وغير ذلك.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
}

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<p>
	تعد القدرة على تنفيذ العمليات الرياضية بفعالية في البرمجة مهارة مهمة، لأنّك ستعمل على الأعداد كثيرًا. الفهم الجيد للرياضيات يمكن أن يساعدك على أن تصبح مبرمجًا أفضل، إلا أنه ليس شرطًا أساسيًا. فالرياضيات أداة لتحقيق ما ترغب في تحقيقه، وطريقة لتحسين خططك.
</p>

<p>
	سنعمل مع أكثر نوعي البيانات استخدامًا في بايثون، وهما <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> و<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>:
</p>

<ul>
	<li>
		<a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> هي أعداد كاملة يمكن أن تكون موجبة أو سالبة أو معدومة (...، <code>‎-1</code>، <code>0</code>، <code>1</code>، ...).
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> هي أعداد حقيقية تحتوي على فاصلة عشرية (كما في <code>9.0</code> أو <code>‎</code>-2.25).
	</li>
</ul>

<p>
	سنلقي في هذه المقالة نظرة على العوامل (operators) التي يمكن استخدامها مع أنواع البيانات العددية في بايثون.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="31145" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d60eb1b207e2_.jpg.00f47e86f88378b9ff8fd0e7aceb87d1.jpg" rel=""><img alt="كيفية إجراء العمليات الحسابية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31145" data-unique="a3m0pnoe5" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60eb1b35d1f_.thumb.jpg.c53eb5c8f38d907a547ad82a0b5d4805.jpg"></a>
</p>

<h2 id="-">
	العوامل
</h2>

<p>
	<strong>العامل</strong> (operator) هو رمز أو دالة تمثل عملية حسابية. على سبيل المثال، في الرياضيات، علامة الجمع أو <code>+</code> هي العامل الذي يشير إلى عملية الجمع.
</p>

<p>
	في بايثون، سنرى بعض العوامل المألوفة، والتي استُعيرَت من الرياضيات، لكن هناك عوامل أخرى خاصة بمجال البرمجة.
</p>

<p>
	الجدول التالي مرجعٌ سريعٌ للعوامل الحسابية في بايثون. سنغطي جميع هذه العمليات في مقالتنا هذه.
</p>

<table>
	<tbody>
		<tr>
			<th>
				العملية
			</th>
			<th>
				الناتج
			</th>
		</tr>
		<tr>
			<td>
				x + y
			</td>
			<td>
				مجموع <code>x</code> مع <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				x - y
			</td>
			<td>
				طرح <code>x</code> من <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				‎-x
			</td>
			<td>
				تغيير إشارة x
			</td>
		</tr>
		<tr>
			<td>
				‎+x
			</td>
			<td>
				قيمة x نفسها
			</td>
		</tr>
		<tr>
			<td>
				x * <em> y</em>
			</td>
			<td>
				ضرب <code> x</code> بـ <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				x / y
			</td>
			<td>
				قسمة <code>x</code> على <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				x // y
			</td>
			<td>
				حاصل القسمة التحتية لـ <code>x</code> على <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				x % y
			</td>
			<td>
				باقي قسمة <code>x</code> على <code>y</code>
			</td>
		</tr>
		<tr>
			<td>
				x ** y
			</td>
			<td>
				قيمة x مرفوعةً للقوة y
			</td>
		</tr>
	</tbody>
</table>

<p>
	سنتحدث أيضًا عن عوامل الإسناد المركبة (compound assignment operators)، بما في ذلك <code>‎+=‎</code> و <code>‎*=‎</code>، التي تجمع عاملًا حسابيًا مع العامل <code>=</code>.
</p>

<h2 id="-">
	الجمع والطرح
</h2>

<p>
	في بايثون، يعمل عاملا الجمع والطرح كما هو معروف في الرياضيات. في الواقع، يمكنك استخدام لغة بايثون آلةً حاسبةً.
</p>

<p>
	لنلقِ نظرة على بعض الأمثلة، بدءًا من <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_7" style=""><span class="kwd">print</span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">5</span><span class="pun">)</span></pre>

<p>
	والناتج:
</p>

<pre class="ipsCode"><span class="hljs-number">6</span>
</pre>

<p>
	بدلًا من تمرير <a href="https://wiki.hsoub.com/Python/int" rel="external">أعداد صحيحة</a> مباشرة إلى الدالة <code>print</code>، يمكننا تهيئة المتغيرات بأعداد صحيحة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_9" style=""><span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">88</span><span class="pln">
b </span><span class="pun">=</span><span class="pln"> </span><span class="lit">103</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">a </span><span class="pun">+</span><span class="pln"> b</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode"><span class="hljs-number">191</span>
</pre>

<p>
	<a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> يمكن أن تكون موجبة أو سالبة (أو معدومة أيضًا)، لذلك يمكننا إضافة عدد سالب إلى عدد موجب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_11" style=""><span class="pln">c </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">36</span><span class="pln">
d </span><span class="pun">=</span><span class="pln"> </span><span class="lit">25</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">c </span><span class="pun">+</span><span class="pln"> d</span><span class="pun">)</span><span class="pln">  </span><span class="com">#  -11</span></pre>

<p>
	الجمع سيكون مشابهًا مع <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_13" style=""><span class="pln">e </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5.5</span><span class="pln">
f </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.5</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">e </span><span class="pun">+</span><span class="pln"> f</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  8.0</span></pre>

<p>
	إذا جمعنا <a href="https://wiki.hsoub.com/Python/float" rel="external">عددين عشريين</a> معًا، ستعيد بايثون عددًا عشريًّا.
</p>

<p>
	صياغة الطرح تشبه صياغة الجمع، ما عدا أنك ستستبدل بعامل الطرح (<code>-</code>) عامل الجمع (<code>+</code><span class="ipsEmoji">?</span>
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_15" style=""><span class="pln">g </span><span class="pun">=</span><span class="pln"> </span><span class="lit">75.67</span><span class="pln">
h </span><span class="pun">=</span><span class="pln"> </span><span class="lit">32</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">g </span><span class="pun">-</span><span class="pln"> h</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  43.67</span></pre>

<p>
	هنا، طرحنا عددًا صحيحًا من عدد عشري. ستعيد بايثون عددًا عشريًّا إذا كان أحد الأعداد المتضمنة في المعادلة عشريًّا.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2 id="-">
	العمليات الحسابية الأحادية
</h2>

<p>
	يتكون التعبير الرياضي الأحادي (unary mathematical expression) من مكوّن أو عنصر واحد فقط، ويمكن في بايثون استخدام العلامتين <code>+</code> و <code>-</code> بمفردهما عبر اقترانهما بقيمة لإعادة القيمة نفسها (<code>+</code>)، أو تغيير إشارة القيمة (<code>-</code>) .
</p>

<p>
	رغم أنها لا تُستخدم كثيرًا، تشير علامة الجمع إلى هوية القيمة (identity of the value)، أي تعيد القيمة نفسها. يمكننا استخدام علامة الجمع مع القيم الموجبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_17" style=""><span class="pln">i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3.3</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(+</span><span class="pln">i</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  3.3</span></pre>

<p>
	عندما نستخدم علامة الجمع مع قيمة سالبة، فستُعيد القيمة نفسها، وفي هذه الحالة ستكون قيمة سالبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_19" style=""><span class="pln">j </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">19</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(+</span><span class="pln">j</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  -19</span></pre>

<p>
	عند استخدامها مع قيمة سالبة، ستعيد علامة الجمع القيمة السالبة نفسها.
</p>

<p>
	علامة الطرح، على خلاف علامة الجمع، تغيّر إشارة القيمة. لذلك، عندما نضعها مع قيمة موجبة، ستُعاد القيمة السالبة منها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_21" style=""><span class="pln">i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3.3</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(-</span><span class="pln">i</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  -3.3</span></pre>

<p>
	بالمقابل، عندما نستخدم عامل الطرح الأحادي (minus sign unary operator) مع قيمة سالبة، فستُعاد القيمة الموجبة منها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_23" style=""><span class="pln">j </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">19</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(-</span><span class="pln">j</span><span class="pun">)</span><span class="pln">   </span><span class="com"># 19</span></pre>

<p>
	ستُعيِد العمليتان الحسابيتان الأحاديتان <code>+</code> و <code>-</code> إمَّا هوية القيمة المعطاة، أو القيمة المعاكسة في الإشارة للقيمة المعطاة على التوالي.
</p>

<h2 id="-">
	الضرب والقسمة
</h2>

<p>
	مثل الجمع والطرح، الضرب والقسمة في بايثون مشابهان لما هو معروف في الرياضيات. علامة الضرب في بايثون هي <code>*</code>، وعلامة القسمة هي <code>/</code>.
</p>

<p>
	فيما يلي مثال على ضرب <a href="https://wiki.hsoub.com/Python/float" rel="external">عددين عشريين</a> في بايثون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_25" style=""><span class="pln">k </span><span class="pun">=</span><span class="pln"> </span><span class="lit">100.1</span><span class="pln">
l </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10.1</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">k </span><span class="pun">*</span><span class="pln"> l</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  1011.0099999999999</span></pre>

<p>
	عندما تُجري عملية القسمة في بايثون 3، فسيكون العدد المُعاد دائمًا <a href="https://wiki.hsoub.com/Python/float" rel="external">عشريًّا</a>، حتى لو استخدمت <a href="https://wiki.hsoub.com/Python/int" rel="external">عددين صحيحين</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_27" style=""><span class="pln">m </span><span class="pun">=</span><span class="pln"> </span><span class="lit">80</span><span class="pln">
n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">m </span><span class="pun">/</span><span class="pln"> n</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  16.0</span></pre>

<p>
	هذا أحد <a href="https://academy.hsoub.com/programming/python/%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%85%D8%A7-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-2-%D9%88-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r483/" rel="">الاختلافات الرئيسية بين بايثون 2 و بايثون 3</a>. الإجابة في بايثون 3 تكون كسرية، فعند استخدام <code>/</code> لتقسيم <code>11</code> على <code>2</code> مثلًا، فستُعاد القيمة <code>5.5</code>. أمَّا في بايثون 2، فحاصل التعبير <code>11/2</code> هو <code>5</code>.
</p>

<p>
	يُجرِي العامل <code>/</code> في بايثون 2 <strong>قسمة تحتية</strong> (floor division)، إذ أنّه إن كان حاصل القسمة يساوي <code>x</code>، فسيكون ناتج عملية القسمة في بايثون 2 أكبر عدد من الأعداد الصحيحة الأصغر من أو تساوي <code>x</code>. إذا نفَّذت المثال <code>print(80 / 5)‎</code> أعلاه في بايثون 2 بدلًا من بايثون 3، فسيكون الناتج هو <code>16</code>، وبدون الجزء العشري.
</p>

<p>
	في بايثون 3، يمكنك استخدام العامل <code>//</code> لإجراء القسمة التحتية. التعبير <code>‎100 // 40‎</code> سيعيد القيمة <code>2</code>. القسمة التحتية مفيدة في حال كنت تريد أن يكون حاصل القسمة عددًا صحيحًا.
</p>

<h2 id="-modulo-">
	معامل باقي القسمة (Modulo)
</h2>

<p>
	العامل <code>%</code> هو عامل الباقي (modulo)، والذي يُرجع باقي عملية القسمة. هذا مفيد للعثور على الأعداد التي هي مضاعفات لنفس العدد، على سبيل المثال.
</p>

<p>
	المثال التالي يوضح كيفية استخدام عامل الباقي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_29" style=""><span class="pln">o </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
p </span><span class="pun">=</span><span class="pln"> </span><span class="lit">15</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">o </span><span class="pun">%</span><span class="pln"> p</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  10</span></pre>

<p>
	حاصل قسمة <code>85</code> على <code>15</code> هو <code>5</code>، والباقي <code>10</code>. القيمة <code>10</code> هي التي ستُعاد هنا لأنَّ عامل الباقي يعيد باقي عملية القسمة.
</p>

<p>
	إذا استخدمنا <a href="https://wiki.hsoub.com/Python/float" rel="external">عددين عشريين</a> مع عامل الباقي، فسيُعاد عدد عشري:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_31" style=""><span class="pln">q </span><span class="pun">=</span><span class="pln"> </span><span class="lit">36.0</span><span class="pln">
r </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6.0</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">o </span><span class="pun">%</span><span class="pln"> p</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  0.0</span></pre>

<p>
	في حال قسمة <code>36.0</code> على <code>6.0</code>، فلن يكون هناك باقٍ، لذلك تعاد القيمة <code>0.0</code>.
</p>

<h2 id="-power-">
	القوة (Power)
</h2>

<p>
	يُستخدم عامل القوة <code>**</code> (يقال له أحيًانًا «الأس») في بايثون لرفع العدد على اليسار لقوة الأس على اليمين. وهذا يعني أنه في التعبير <code>5 ** 3</code>، العدد <code>5</code> سيُرفع إلى القوة <code>3</code>. في الرياضيات، غالبًا ما نرى هذا التعبير يُكتب على الشكل 5<sup>³</sup>، حيث يُضرب العدد <code>5</code> في نفسه 3 مرات. في بايثون، التعبيران <code>5 ** 3</code> و <code>5 * 5 * 5</code> سيعطيان النتيجة نفسها.
</p>

<p>
	سنستخدم في المثال التالي المتغيرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_33" style=""><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="lit">52.25</span><span class="pln">
t </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">s </span><span class="pun">**</span><span class="pln"> t</span><span class="pun">)</span><span class="pln">     </span><span class="com">#  1063173305051.292</span></pre>

<p>
	رفع العدد العشري <code>52.25</code> إلى القوة <code>7</code> عبر عامل الأسّ <code>**</code> سينتج عنه عدد عشري كبير.
</p>

<h2 id="-">
	أسبقية العوامل
</h2>

<p>
	في بايثون، كما هو الحال في الرياضيات، علينا أن نضع في حساباتنا أنَّ العوامل ستُقيَّم وفقًا لنظام الأسبقية، وليس من اليسار إلى اليمين، أو من اليمين إلى اليسار.
</p>

<p>
	إذا نظرنا إلى التعبير التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_35" style=""><span class="pln">u </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">5</span></pre>

<p>
	قد نقرأه من اليسار إلى اليمين، ولكن تذكّر أنّ عملية الضرب ستُجرى أولًا، لذا إن استدعينا <code>print(u)‎</code>، فسنحصل على القيمة التالية:
</p>

<pre class="ipsCode"><span class="hljs-number">60</span>
</pre>

<p>
	هذا لأنّ <code>10 * 5</code> ستُقيّم أولًا، وسينتج عنها العدد <code>50</code>، ثم نضيف إليها <code>10</code> لنحصل على <code>60</code> كنتيجة نهائية.
</p>

<p>
	إذا أردنا بدلًا من ذلك إضافة القيمة <code>10</code> إلى <code>10</code>، ثم ضرب المجموع في <code>5</code>، فيمكننا استخدام الأقواس كما نفعل في الرياضيات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_37" style=""><span class="pln">u </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">u</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  100</span></pre>

<p>
	إحدى الطرق البسيطة لتذكر الأسبقيات هي حفظ الجملتين «قم أبعد ضيقًا ... قم جد طريقًا» لتذكر أوائل كلماتهما:
</p>

<table>
	<tbody>
		<tr>
			<th>
				الأسبقية
			</th>
			<th>
				الحرف
			</th>
			<th>
				المعنى
			</th>
		</tr>
		<tr>
			<td>
				1
			</td>
			<td>
				<strong>ق</strong>م
			</td>
			<td>
				أقواس
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				<strong>أ</strong>بعد
			</td>
			<td>
				الأس
			</td>
		</tr>
		<tr>
			<td>
				3
			</td>
			<td>
				<strong>ض</strong>يقًا
			</td>
			<td>
				الضرب
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				<strong>ق</strong>م
			</td>
			<td>
				القسمة
			</td>
		</tr>
		<tr>
			<td>
				5
			</td>
			<td>
				<strong>ج</strong>د
			</td>
			<td>
				الجمع
			</td>
		</tr>
		<tr>
			<td>
				6
			</td>
			<td>
				<strong>ط</strong>ريقًا
			</td>
			<td>
				الطرح
			</td>
		</tr>
	</tbody>
</table>

<p>
	<strong>ملاحظة</strong>: انتبه إلى أن الضرب ليس بالضرورة قبل القسمة كما هو مذكور في الجدول، بل أيهما أسبق بالمعادلة (في حال لم تكن هنالك أية أقواس)، فإن جاءت عملية القسمة قبل الضرب، فستُنفَّذ أولًا وفقًا لذلك الترتيب (ترتيب التنفيذ من اليسار إلى اليمين)، وكذلك الأمر بالنسبة لعملية الجمع والطرح، فليس الجمع دائما قبل الطرح، بل أيهما أسبق.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9039_7" style=""><span class="pln">u </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">4</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">u</span><span class="pun">)</span><span class="pln">    </span><span class="com">#  5</span></pre>

<h2 id="-assignment-operators-">
	عامل الإسناد (Assignment Operators)
</h2>

<p>
	أكثر عوامل الإسناد استخدامًا هو إشارة التساوي <code>=</code>. يُسنِد عامل الإسناد (أو عامل التعيين) <code>=</code> القيمة الموجودة على اليمين إلى المتغير الموضوع على اليسار. على سبيل المثال، يُسنِد التعبير <code>v = 23</code> العدد الصحيح <code>23</code> للمتغير <code>v</code>.
</p>

<p>
	من الشائع استخدام عوامل الإسناد المركبة التي تجري عملية رياضية على قيمة المتغير، ثم تُسنِد القيمة الجديدة الناتجة إلى ذلك المتغير. تجمع عوامل الإسناد المركبة بين عامل رياضي والعامل <code>=</code>؛ ففي حال الجمع، نستخدم <code>+</code> مع <code>=</code> للحصول على عامل الإسناد المركب <code>‎+=‎</code>. لنطبِّق ذلك في مثال عملي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_39" style=""><span class="pln">w </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
w </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">w</span><span class="pun">)</span><span class="pln">   </span><span class="com">#  6</span></pre>

<p>
	أولاً، نعيّن المتغير <code>‎</code>w إلى القيمة <code>5</code>، ثم نستخدم عامل الإسناد المركب <code>‎+=‎</code> لإضافة العدد الصحيح إلى قيمة المتغير الأيسر، ثم نُسنِد النتيجة إلى المتغير <code>w</code>.
</p>

<p>
	تُستخدم عوامل الإسناد المركبة بشكل متكرر مع <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-while-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r509/" rel="">حلقات for التكرارية</a>، والتي ستستخدمها عندما تريد تكرار عمليةٍ عدة مرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_41" style=""><span class="kwd">for</span><span class="pln"> x </span><span class="kwd">in</span><span class="pln"> range </span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">):</span><span class="pln">
    x </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span></pre>

<p>
	والناتج سيكون:
</p>

<pre class="ipsCode"><span class="hljs-number">0</span>
<span class="hljs-number">2</span>
<span class="hljs-number">4</span>
<span class="hljs-number">6</span>
<span class="hljs-number">8</span>
<span class="hljs-number">10</span>
<span class="hljs-number">12</span>
</pre>

<p>
	باستخدام الحلقة <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-for-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r513/" rel="">for</a>، تمكنا من أتمتة العملية <code>‎*=‎</code> التي تضرب قيمة المتغير <code>w</code> بالعدد 2، ثم تُسنِد النتيجة إلى المتغير <code>w</code> لأجل استخدامها في التكرار التالي في الحلقة.
</p>

<p>
	لدى بايثون عامل إسناد مركب مقابل لكل من العوامل الحسابية التي تم التطرق إليها في هذه المقالة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8139_43" style=""><span class="pln">y </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">     </span><span class="com"># إضافة القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">-=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">     </span><span class="com"># طرح القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">      </span><span class="com"># ضرب القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">/=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">      </span><span class="com"># تقسيم القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">//</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">    </span><span class="com"># تقسيم سفلي القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">**=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">     </span><span class="com"># تنفيذ عامل الأس على القيمة ثم إسنادها</span><span class="pln">
y </span><span class="pun">%=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">     </span><span class="com"># إعادة باقي قسمة القيمة ثم إسناده</span></pre>

<p>
	يمكن أن يكون عامل الإسناد المركب مفيدًا عندما تحتاج إلى الزيادة أو الإنقاص التدريجي، أو عندما تحتاج إلى أتمتة عمليات معينة في برنامجك.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	غطّينا في هذه المقالة العديد من العوامل التي ستستخدمها مع الأعداد الصحيحة والعشرية. يمكنك قراءة المزيد عن الأعداد في المقالة: <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">الدوال العددية المضمّنة في بايثون 3</a>.
</p>

<p>
	لمعرفة المزيد حول أنواع البيانات الأخرى، ألق نظرة على المقالة: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r720/" rel="">فهم أنواع البيانات في بايثون 3</a>، وتعرف على كيفية تحويل أنواع البيانات في المقالة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A8%D9%8A%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r728/" rel="">كيفية تحويل أنواع البيانات في بايثون 3</a>.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-do-math-in-python-3-with-operators" rel="external nofollow">How To Do Math in Python 3 with Operators</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B6%D9%85%D9%86%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r731/" rel="">الدوال الرياضية المضمّنة في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A2%D9%84%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r492/" rel="">كيفية استخدام آلية تنسيق السلاسل النصية</a>
	</li>
	<li>
		صفحة: <a href="https://academy.hsoub.com/python/" rel="">تعلم بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">730</guid><pubDate>Sat, 07 Sep 2019 13:09:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x622;&#x644;&#x64A;&#x629; &#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x627;&#x644;&#x646;&#x635;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A2%D9%84%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r492/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60e854bc156_.jpg.0e83851205bee77bc94f36fe42a01a24.jpg" /></p>

<p>
	الدالة <code>str.format()‎</code> المتوافرة للسلاسل النصية تسمح لك باستبدال المتغيرات وتنسيق القيم. مما يمنحك القدرة على تجميع العناصر مع بعضها عبر إدخالها في مواضع معينة.<br>
	سيشرح لك هذا الدرس أشهر الاستخدامات لآلية تنسيق السلاسل النصية في بايثون، والتي ستساعدك في جعل شيفرتك وبرنامجك أسهل قراءةً واستخدامًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31144" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d60e84f24aea_.jpg.bbd4a8a3b65648348fe970c6d8266c48.jpg" rel=""><img alt="كيفية استخدام آلية تنسيق السلاسل النصية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31144" data-unique="v6jvt7bpd" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60e84f3c550_.thumb.jpg.cb84325143e349a0c66562e1c27d0cea.jpg"></a>
</p>

<h2 id="استخدام-المنسقات">
	استخدام «المُنسِّقات»
</h2>

<p>
	تعمل المُنسِّقات (formatters) بوضع حقول قابلة للاستبدال تُعرَّف عبر وضع قوسين معقوفين <code>{}</code> في السلسلة النصية ثم استدعاء الدالة <code>str.format()‎</code>، إذ ستُمرَّر القيمة التي تريد وضعها ضمن السلسلة النصية إلى الدالة <code>format()‎</code> وستوضع هذه القيمة في نفس مكان الحقل القابل للاستبدال الموجود في السلسلة الأصلية عندما تُشغِّل برنامجك.<br>
	لنطبع سلسلةً نصيةً تستخدم «مُنسِّقًا» (formatter):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy has {} balloons."</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="lit">5</span><span class="pun">))</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs oxygene"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">has</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln"> balloons</span><span class="pun">.</span></code></pre>

<p>
	أنشأنا في المثال السابق سلسلةً نصيةً تحتوي على قوسين معقوفين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs bash"><span class="hljs-string"><span class="str">"Sammy has {} balloons."</span></span></code></pre>

<p>
	ثم أضفنا الدالة <code>str.format()‎</code> ومررنا إليها القيمة الرقمية <code>5</code> وهذا يعني أنَّ القيمة <code>5</code> ستوضع مكان القوسين المعقوفين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs oxygene"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">has</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln"> balloons</span><span class="pun">.</span></code></pre>

<p>
	يمكننا أيضًا إسناد السلسلة النصية الأصلية التي تحتوي مُنسِّقًا إلى متغير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="pln">open_string </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Sammy loves {}."</span></span><span class="pln">
</span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">open_string</span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"open source"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs fsharp"><span class="typ">Sammy</span><span class="pln"> loves </span><span class="hljs-keyword"><span class="pln">open</span></span><span class="pln"> source</span><span class="pun">.</span></code></pre>

<p>
	أضفنا في المثال السابق السلسلة النصية <code>"open source"</code> إلى سلسلةٍ نصيةٍ أكبر باستبدالها للقوسين المعقوفين الموجودَين في السلسلة الأصلية.<br>
	تسمح لك المُنسِّقات في بايثون باستخدام الأقواس المعقوفة لحجز أماكن للقيم التي ستمررها مستقبلًا عبر الدالة <code>str.format()‎</code>.
</p>

<h2 id="استخدام-المنسقات-لحجز-أكثر-من-مكان">
	استخدام المُنسِّقات لحجز أكثر من مكان
</h2>

<p>
	يمكنك استخدام أكثر من زوج من الأقواس المعقوفة عند استعمال المُنسِّقات؛ فيمكنك أن تضيف سلسلةً نصيةً أخرى إلى المثال السابق وذلك بإضافة زوج آخر من الأقواس المعقوفة وتمرير قيمة ثانية إلى الدالة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="pln">new_open_string </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Sammy loves {} {}."</span></span><span class="pln">                      </span><span class="hljs-comment"><span class="com"># {} مكانين محجوزين عبر</span></span><span class="pln">
</span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">new_open_string</span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"open-source"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"software"</span></span><span class="pun">))</span><span class="pln">    </span><span class="hljs-comment"><span class="com"># تمرير قيمتين إلى الدالة مفصولٌ بينهما بفاصلة</span></span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs fsharp"><span class="typ">Sammy</span><span class="pln"> loves </span><span class="hljs-keyword"><span class="pln">open</span></span><span class="pun">-</span><span class="pln">source software</span><span class="pun">.</span></code></pre>

<p>
	أضفنا زوجًا آخر من الأقواس المعقوفة إلى السلسلة النصية للسماح بوضع قيمة ثانية، ثم مررنا سلسلتين نصيتين إلى الدالة <code>str.format()‎</code> مفصولٌ بينهما بفاصلة.<br>
	سنضيف عمليات استبدال أخرى عبر اتباع نفس الآلية التي شرحناها أعلاه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="pln">sammy_string </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Sammy loves {} {}, and has {} {}."</span></span><span class="pln">                      
</span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">sammy_string</span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"open-source"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"software"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"balloons"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs fsharp"><span class="typ">Sammy</span><span class="pln"> loves </span><span class="hljs-keyword"><span class="pln">open</span></span><span class="pun">-</span><span class="pln">source software</span><span class="pun">,</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">and</span></span><span class="pln"> has </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln"> balloons</span><span class="pun">.</span></code></pre>

<h2 id="إعادة-ترتيب-المنسقات-عبر-المعاملات-الموضعية">
	إعادة ترتيب المنسقات عبر المعاملات الموضعية
</h2>

<p>
	عندما نترك الأقواس المعقوفة دون معاملات (parameters) ممررة إليها، فستضع بايثون القيم المُمرَّرة إلى الدالة <code>str.format()‎</code> بالترتيب. هذا تعبيرٌ فيه زوجين من الأقواس المعقوفة يوضع مكانهما سلسلتان نصيتان شبيهٌ بما رأيناه سابقًا في هذا الدرس:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {} has a pet {}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pilot fish"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-operator"><span class="pln">the</span></span><span class="pln"> shark has </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pet pilot fish</span><span class="pun">!</span></code></pre>

<p>
	اُستبدِل أوّل زوجٍ من الأقواس المعقوفة ووضعت مكانه القيمة <code>"shark"</code>، ووضعت القيمة <code>"pilot fish"</code> مكان الزوج الثاني من الأقواس.<br>
	القيم التي مررناها إلى الدالة <code>str.format()‎</code> كانت بهذا الترتيب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs lisp"><span class="hljs-list"><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pilot fish"</span></span><span class="pun">)</span></span></code></pre>

<p>
	إن سبق لك دراسة أنواع البيانات المُختلفة على بايثون فقد تلاحظ أنَّ القيمة السابقة هي من النوع tuple، ويمكن الوصول إلى كل قيمة موجودة فيها عبر فهرسٍ رقميٍ تابعٍ لها، والذي يبدأ من الفهرس 0.<br>
	يمكننا تمرير أرقام الفهارس إلى داخل القوسين المعقوفين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {0} has a pet {1}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pilot fish"</span></span><span class="pun">))</span></code></pre>

<p>
	سنحصل بعد تنفيذ المثال السابق على نفس الناتج التي ظهر دون تحديد أرقام الفهارس يدويًا، وذلك لأننا استدعينا القيم بالترتيب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-operator"><span class="pln">the</span></span><span class="pln"> shark has </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pet pilot fish</span><span class="pun">!</span></code></pre>

<p>
	لكن إن عكسنا أرقام الفهارس في معاملات الأقواس المعقوفة فسنتمكن من عكس ترتيب القيم المُمرَّرة إلى السلسلة النصية الأصلية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {1} has a pet {0}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pilot fish"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-operator"><span class="pln">the</span></span><span class="pln"> pilot fish has </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pet shark</span><span class="pun">!</span></code></pre>

<p>
	لكن إن حاولت استخدام الفهرس ذي الرقم 2 ولم تكن لديك إلا قيمتين موجودتين في الفهرسين 0 و 1، فأنت تستدعي قيمةً خارج المجال المسموح، ولهذا السبب ستظهر رسالة خطأ:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {2} has a pet {1}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pilot fish"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs oxygene"><span class="typ">IndexError</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">tuple</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">index</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">out</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">of</span></span><span class="pln"> range</span></code></pre>

<p>
	تُشير رسالة الخطأ إلى وجود قيمتين فقط ومكانهما هو 0 و1، لذا كان الفهرس 2 غير مرتبطٍ بقيمةٍ وكان خارج المجال المسموح.<br>
	لنضف الآن مكانين محجوزين إلى السلسلة النصية ولنمرر بضع قيم إلى الدالة <code>str.format()‎</code> لكي نفهم آلية إعادة الترتيب فهمًا تامًا. هذه هي السلسلة النصية الجديدة التي فيها أربعة أزواج من الأقواس المعقوفة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy is a {}, {}, and {} {}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"happy"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"smiling"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"blue"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs python"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">is</span></span><span class="pln"> a happy</span><span class="pun">,</span><span class="pln"> smiling </span><span class="hljs-keyword"><span class="kwd">and</span></span><span class="pln"> blue shark</span><span class="pun">!</span></code></pre>

<p>
	ستوضع القيم المُمرَّرة إلى الدالة <code>str.format()‎</code> بنفس ترتيب ورودها في حال لم نستعمل المعاملات داخل الأقواس المعقوفة.<br>
	تملك السلاسل النصية المُمرَّرة إلى الدالة <code>str.format()‎</code> الفهارس الآتية المرتبطة بها:
</p>

<center>
	<table border="1"><tbody>
<tr>
<td style="padding: 5px 10px; text-align: center; background-color: rgb(251, 252, 252);">
					“happy”
				</td>
				<td style="padding: 5px 10px; text-align: center; background-color: rgb(251, 252, 252);">
					“smiling”
				</td>
				<td style="padding: 5px 10px; text-align: center; background-color: rgb(251, 252, 252);">
					“blue”
				</td>
				<td style="padding: 5px 10px; text-align: center; background-color: rgb(251, 252, 252);">
					“shark”
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px; text-align: center;">
					0
				</td>
				<td style="padding: 5px 10px; text-align: center;">
					1
				</td>
				<td style="padding: 5px 10px; text-align: center;">
					2
				</td>
				<td style="padding: 5px 10px; text-align: center;">
					3
				</td>
			</tr>
</tbody></table>
</center>

<p>
	<br>
	لنستخدم الآن أرقام الفهارس لتغيير ترتيب ظهور القيم المرتبطة بها في السلسلة النصية:
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy is a {3}, {2}, and {1} {0}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"happy"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"smiling"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"blue"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs python"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">is</span></span><span class="pln"> a shark</span><span class="pun">,</span><span class="pln"> blue</span><span class="pun">,</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">and</span></span><span class="pln"> smiling happy</span><span class="pun">!</span></code></pre>

<p>
	ولمّا كنّا قد بدأنا بالفهرس ذي الرقم 3، فستظهر القيمة <code>"shark"</code> أولًا. أي أنَّ وضع رقم الفهرس بين القوسين كمعامل سيؤدي إلى تغيير ترتيب ظهور القيم في السلسلة النصية الأصلية.<br>
	نستطيع -بالإضافة إلى المعاملات الموضعية الرقمية- أن نربط بين القيم وبين كلمات محجوزة مخصصة ومن ثم نستدعيها عبر وضع الكلمة المحجوزة بين القوسين المعقوفين كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {0} {1} a {pr}."</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"made"</span></span><span class="pun">,</span><span class="pln"> pr </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pull request"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-operator"><span class="pln">the</span></span><span class="pln"> shark made </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pull request</span><span class="pun">.</span></code></pre>

<p>
	أظهر المثال السابق استخدام كلمة محجوزة كوسيط بالإضافة إلى المعاملات الموضعية، يمكنك استخدام الكلمة المحجوزة <code>pr</code> كوسيط بالإضافة إلى أرقام الفهارس، وتستطيع أيضًا إعادة ترتيب تلك الوسائط كيفما شئت:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy the {pr} {1} a {0}."</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"shark"</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"made"</span></span><span class="pun">,</span><span class="pln"> pr </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pull request"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> </span><span class="hljs-operator"><span class="pln">the</span></span><span class="pln"> pull request made </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> shark</span><span class="pun">.</span></code></pre>

<p>
	استخدام المعاملات الموضعية والكلمات المحجوزة سيمنحنا تحكمًا أكبر بكيفية معالجة السلسلة النصية الأصلية عبر إعادة ترتيب القيم المُمرَّرة إليها.
</p>

<h2 id="تحديد-نوع-القيمة">
	تحديد نوع القيمة
</h2>

<p>
	يمكنك وضع معاملات أخرى ضمن القوسين المعقوفين، سنستخدم الصيغة الآتية <code>{field_name:conversion}</code> حيث <code>field_name</code> هو الفهرس الرقمي للوسيط الممرَّر إلى الدالة <code>str.format()‎</code> والذي شرحناه تفصيليًا في القسم السابق، و <code>conversion</code> هو الرمز المستعمل للتحويل إلى نوع البيانات الذي تريده.<br>
	«رمز التحويل» يعني رمزًا من حرفٍ وحيد الذي تستخدمه بايثون لمعرفة نوع القيمة المُراد «تنسيقها». الرموز التي سنستخدمها في أمثلتنا هي <code>s</code> للسلاسل النصية و <code>d</code> لإظهار الأرقام بنظام العد العشري (ذي الأساس 10) و <code>f</code> لإظهار الأعداد ذات الفاصلة. يمكنك قراءة المزيد من التفاصيل عن رموز التنسيق في بايثون 3 (وغير ذلك من المواضيع المرتبطة بهذا المجال) في <a href="https://docs.python.org/3.6/library/string.html#format-specification-mini-language" rel="external nofollow">التوثيق الرسمي</a>.<br>
	لننظر إلى مثالٍ نُمرِّر فيه رقمًا صحيحًا عبر الدالة <code>format()‎</code> لكننا نريد إظهاره كعددٍ ذي فاصلة عبر رمز التحويل <code>f</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:f} percent of a {1}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"pizza"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> ate </span><span class="hljs-number"><span class="lit">75.000000</span></span><span class="pln"> percent </span><span class="hljs-operator"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pizza</span><span class="pun">!</span></code></pre>

<p>
	وضعت القيمة -مكان أوّل ورود للصيغة <code>{field_name:conversion}</code>- كعددٍ ذي فاصلة، أما ثاني ورود للقوسين المعقوفين فكان بالصيغة <code>{field_name}</code>.<br>
	لاحظ في المثال السابق وجود عدد كبير من الأرقام الظاهرة بعد الفاصلة العشرية، لكنك تستطيع تقليل عددها. فعندما نستخدم الرمز <code>f</code> للقيم ذات الفاصلة نستطيع أيضًا تحديد دقة القيمة الناتجة بتضمين رمز النقطة <code>.</code> متبوعًا بعدد الأرقام بعد الفاصلة التي نود عرضها.<br>
	حتى لو أكل سامي 75.765367% من قطعة البيتزا فلن نحتاج إلى هذا القدر الكبير من الدقة، إذ يمكننا مثلًا أن نجعل عدد المنازل العشرية ثلاث منازل بعد الفاصلة بوضعنا <code>‎.3</code> قبل رمز التحويل <code>f</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:.3f} percent of a pizza!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75.765367</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> ate </span><span class="hljs-number"><span class="lit">75.765</span></span><span class="pln"> percent </span><span class="hljs-operator"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pizza</span><span class="pun">!</span></code></pre>

<p>
	أما إذا أردنا عرض منزلة عشرية وحيدة، فيمكننا إعادة كتابة السلسلة السابقة كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:.1f} percent of a pizza!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75.765367</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> ate </span><span class="hljs-number"><span class="lit">75.8</span></span><span class="pln"> percent </span><span class="hljs-operator"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pizza</span><span class="pun">!</span></code></pre>

<p>
	لاحظ كيف أدى تعديل دقة الأرقام العشرية إلى تقريب الرقم (وفق قواعد التقريب الاعتيادية).<br>
	وصحيحٌ أننا عرضنا رقمًا دون منازل عشرية كعددٍ ذي فاصلة، إلا أننا إذا حاولنا تحويل عدد عشري إلى عدد صحيح باستخدام رمز التحويل <code>d</code> فسنحصل على خطأ:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:.d} percent of a pizza!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75.765367</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs ocaml"><span class="typ">ValueError</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Unknown</span><span class="pln"> format code </span><span class="hljs-string"><span class="str">'d'</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">object</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-class"><span class="hljs-keyword"><span class="pln">type</span></span><span class="pln"> </span><span class="str">'</span><span class="hljs-title"><span class="str">float</span></span><span class="str">'</span></span></code></pre>

<p>
	إذا لم ترغب بعرض أيّة منازل عشرية، فيمكنك كتابة تعبير كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:.0f} percent of a pizza!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75.765367</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> ate </span><span class="hljs-number"><span class="lit">76</span></span><span class="pln"> percent </span><span class="hljs-operator"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pizza</span><span class="pun">!</span></code></pre>

<p>
	لن يؤدي ما سبق إلى تحويل العدد العشري إلى عددٍ صحيح، وإنما سيؤدي إلى تقليل عدد المنازل العشرية الظاهرة بعد الفاصلة.
</p>

<h2 id="إضافة-حواشي">
	إضافة حواشي
</h2>

<p>
	لمّا كانت الأماكن المحجوزة عبر القوسين المعقوفين هي حقول قابلة للاستبدال (أي ليست قيمًا فعليةً) فيمكنك إضافة حاشية (padding) أو إضافة فراغ حول العنصر بزيادة حجم الحقل عبر معاملات إضافية، قد تستفيد من هذا الأمر عندما تحتاج إلى تنظيم البيانات بصريًا.<br>
	يمكننا إضافة حقلٍ بحجمٍ معيّن (مُقاسًا بعدد المحارف) بتحديد ذاك الحجم بعد النقطتين الرأسيتين <code>:</code> كما في المثال الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy has {0:4} red {1:16}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"balloons"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs erlang-repl"><span class="hljs-variable"><span class="typ">Sammy</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">has</span></span><span class="pln">    </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">red</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">balloons</span></span><span class="pln">        </span><span class="hljs-exclamation_mark"><span class="pun">!</span></span></code></pre>

<p>
	أعطينا في المثال السابق حقلًا بحجم 4 محارف للعدد <code>5</code>، وأعطينا حقلًا بحجم 16 محرفًا للسلسلة النصية <code>balloons</code> (لأنها سلسلة طويلة نسبيًا).<br>
	وكما رأينا من ناتج المثال السابق، يتم محاذاة السلاسل النصية افتراضيًا إلى اليسار والأعداد إلى اليمين، يمكنك أن تُغيّر من هذا بوضع رمز خاص للمحاذاة بعد النقطتين الرأسيتين مباشرةً. إذ سيؤدي الرمز <code>&gt;</code> إلى محاذاة النص إلى يسار الحقل، أما الرمز <code>^</code> فسيوسِّط النص في الحقل، والرمز <code>&lt;</code> سيؤدي إلى محاذاته إلى اليمين.<br>
	لنجعل محاذاة العدد إلى اليسار ونوسِّط السلسلة النصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy has {0:&lt;4} red {1:^16}!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-string"><span class="str">"balloons"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs erlang-repl"><span class="hljs-variable"><span class="typ">Sammy</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">has</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pln">    </span><span class="hljs-function_or_atom"><span class="pln">red</span></span><span class="pln">     </span><span class="hljs-function_or_atom"><span class="pln">balloons</span></span><span class="pln">    </span><span class="hljs-exclamation_mark"><span class="pun">!</span></span></code></pre>

<p>
	نلاحظ الآن أنَّ محاذاة العدد <code>5</code> إلى اليسار، مما يعطي مساحة فارغةً في الحقل قبل الكلمة <code>red</code>، وستظهر السلسلة النصية <code>balloons</code> في منتصف الحقل وتوجد مسافة فارغة على يمينها ويسارها.<br>
	عندما نُنسِّق الحقل لنجعله أكبر من حجمه الطبيعي فستملأ بايثون الحقل افتراضيًا بالفراغات، إلا أننا نستطيع تغيير محرف الملء إلى محرفٍ آخر بوضعه مباشرةً بعد النقطتين الرأسيتين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"{:</span><span class="hljs-variable"><span class="str">*^</span></span><span class="str">20s}"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy"</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs markdown"><span class="hljs-strong"><span class="pun">*****</span></span><span class="hljs-strong"><span class="pun">**</span><span class="typ">Sammy</span><span class="pun">**</span></span><span class="hljs-strong"><span class="pun">*****</span></span><span class="pun">*</span></code></pre>

<p>
	ستضع بايثون السلسلة النصية المُمرَّرة إلى الدالة <code>str.format()‎</code> ذات الفهرس 0 مكان القوسين المعقوفين لأننا لم نطلب منها عكس ذلك، ومن ثم سنضع النقطتين الرأسيتين ثم سنُحدِّد أننا سنستعمل المحرف <code>*</code> بدلًا من الفراغات لملء الحقل، ثم سنوسِّط السلسلة النصية عبر استعمال الرمز <code>^</code> مُحدِّدين أنَّ حجم الحقل هو 20 محرف، ومُشيرين في نفس الوقت إلى أنَّ الحقل هو حقلٌ نصيٌ عبر وضع الرمز <code>s</code>.<br>
	يمكننا استخدام هذه المعاملات مع المعاملات التي استخدمناها وشرحناها في الأقسام السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy ate {0:5.0f} percent of a pizza!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="hljs-number"><span class="lit">75.765367</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs livecodeserver"><span class="typ">Sammy</span><span class="pln"> ate    </span><span class="hljs-number"><span class="lit">76</span></span><span class="pln"> percent </span><span class="hljs-operator"><span class="pln">of</span></span><span class="pln"> </span><span class="hljs-operator"><span class="pln">a</span></span><span class="pln"> pizza</span><span class="pun">!</span></code></pre>

<p>
	حدِّدنا داخل القوسين المعقوفين رقم فهرس القيمة العددية ثم وضعنا النقطتين الرأسيتين ثم اخترنا حجم الحقل ثم وضعنا نقطةً <code>.</code> لنضبط عدد المنازل العشرية الظاهرة، ثم اخترنا نوع الحقل عبر رمز التحويل <code>f</code>.
</p>

<h2 id="استخدام-المتغيرات">
	استخدام المتغيرات
</h2>

<p>
	مرَّرنا منذ بداية هذا الدرس وإلى الآن الأعداد والسلاسل النصية إلى الدالة <code>str.format()‎</code> مباشرةً، لكننا نستطيع تمرير المتغيرات أيضًا، وذلك بنفس الآلية المعتادة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="pln">nBalloons </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pln">
</span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"Sammy has {} balloons today!"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="pln">nBalloons</span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs erlang-repl"><span class="hljs-variable"><span class="typ">Sammy</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">has</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">balloons</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">today</span></span><span class="hljs-exclamation_mark"><span class="pun">!</span></span></code></pre>

<p>
	يمكننا أيضًا استخدام المتغيرات لتخزين السلسلة النصية الأصلية بالإضافة إلى القيم التي ستُمرَّر إلى الدالة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Sammy has {} balloons today!"</span></span><span class="pln">
nBalloons </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pln">
</span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="pln">nBalloons</span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs erlang-repl"><span class="hljs-variable"><span class="typ">Sammy</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">has</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">balloons</span></span><span class="pln"> </span><span class="hljs-function_or_atom"><span class="pln">today</span></span><span class="hljs-exclamation_mark"><span class="pun">!</span></span></code></pre>

<p>
	ستُسهِّل المتغيرات من التعامل مع تعبيرات التنسيق وتُبسِّط عملية إسناد مدخلات المستخدم وإظهارها مُنسَّقةً في السلسلة النصية النهائية.
</p>

<h2 id="استخدام-المنسقات-لتنظيم-البيانات">
	استخدام المُنسِّقات لتنظيم البيانات
</h2>

<p>
	يسطع نجم آلية التنسيق التي نشرحها في هذا الدرس عندما تُستخدَم لتنظيم البيانات بصريًا، فلو أردنا إظهار نتائج قاعدة البيانات إلى المستخدمين، فيمكننا استعمال المُنسِّقات لزيادة حجم الحقل وتعديل المحاذاة لجعل الناتج أسهل قراءةً.<br>
	لننظر إلى حلقة تكرار تقليدية في بايثون التي تطبع <code>i</code> و <code>i*i</code> و <code>i*i*i</code> لمجالٍ من الأعداد من 3 إلى 13:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs matlab"><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="hljs-number"><span class="lit">13</span></span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">*</span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">*</span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">*</span><span class="hljs-built_in"><span class="pln">i</span></span><span class="pun">)</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs "><span class="lit">3</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="lit">27</span><span class="pln">
</span><span class="lit">4</span><span class="pln"> </span><span class="lit">16</span><span class="pln"> </span><span class="lit">64</span><span class="pln">
</span><span class="lit">5</span><span class="pln"> </span><span class="lit">25</span><span class="pln"> </span><span class="lit">125</span><span class="pln">
</span><span class="lit">6</span><span class="pln"> </span><span class="lit">36</span><span class="pln"> </span><span class="lit">216</span><span class="pln">
</span><span class="lit">7</span><span class="pln"> </span><span class="lit">49</span><span class="pln"> </span><span class="lit">343</span><span class="pln">
</span><span class="lit">8</span><span class="pln"> </span><span class="lit">64</span><span class="pln"> </span><span class="lit">512</span><span class="pln">
</span><span class="lit">9</span><span class="pln"> </span><span class="lit">81</span><span class="pln"> </span><span class="lit">729</span><span class="pln">
</span><span class="lit">10</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="lit">1000</span><span class="pln">
</span><span class="lit">11</span><span class="pln"> </span><span class="lit">121</span><span class="pln"> </span><span class="lit">1331</span><span class="pln">
</span><span class="lit">12</span><span class="pln"> </span><span class="lit">144</span><span class="pln"> </span><span class="lit">1728</span></code></pre>

<p>
	صحيحٌ أنَّ الناتج مُنظَّمٌ قليلًا، إلا أنَّ الأعداد تتداخل مع بعضها بصريًا مما يُصعِّب قراءة الأسطر الأخيرة من الناتج، وإذا كنتَ تتعامل مع مجموعة أكبر من البيانات التي يتواجد فيها أعداد أكبر (أو أصغر) مما عرضناه في مثالنا، فقد تبدو لك المشكلة جليةً حينها.<br>
	لنحاول تنسيق الناتج السابق لإعطاء مساحة أكبر لإظهار الأعداد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="hljs-number"><span class="lit">13</span></span><span class="pun">):</span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"{:3d} {:4d} {:5d}"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> i</span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="pun">,</span><span class="pln"> i</span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="pun">))</span></code></pre>

<p>
	لم نُحدِّد في المثال السابق ترتيب الحقل وبدأنا مباشرةً بكتابة النقطتين الرأسيتين متبوعةً بحجم الحقل ورمز التحويل <code>d</code> (لأننا نتعامل مع أعداد صحيحة).<br>
	أعطينا في المثال السابق حجمًا للحقل مساويًا لعدد أرقام العدد الذي نتوقع طباعته في الحقل المعني مضافًا إليه 2، لذا سيبدو الناتج كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs "><span class="pln">  </span><span class="lit">3</span><span class="pln">    </span><span class="lit">9</span><span class="pln">    </span><span class="lit">27</span><span class="pln">
  </span><span class="lit">4</span><span class="pln">   </span><span class="lit">16</span><span class="pln">    </span><span class="lit">64</span><span class="pln">
  </span><span class="lit">5</span><span class="pln">   </span><span class="lit">25</span><span class="pln">   </span><span class="lit">125</span><span class="pln">
  </span><span class="lit">6</span><span class="pln">   </span><span class="lit">36</span><span class="pln">   </span><span class="lit">216</span><span class="pln">
  </span><span class="lit">7</span><span class="pln">   </span><span class="lit">49</span><span class="pln">   </span><span class="lit">343</span><span class="pln">
  </span><span class="lit">8</span><span class="pln">   </span><span class="lit">64</span><span class="pln">   </span><span class="lit">512</span><span class="pln">
  </span><span class="lit">9</span><span class="pln">   </span><span class="lit">81</span><span class="pln">   </span><span class="lit">729</span><span class="pln">
 </span><span class="lit">10</span><span class="pln">  </span><span class="lit">100</span><span class="pln">  </span><span class="lit">1000</span><span class="pln">
 </span><span class="lit">11</span><span class="pln">  </span><span class="lit">121</span><span class="pln">  </span><span class="lit">1331</span><span class="pln">
 </span><span class="lit">12</span><span class="pln">  </span><span class="lit">144</span><span class="pln">  </span><span class="lit">1728</span></code></pre>

<p>
	يمكننا أيضًا تحديد حجم ثابت للحقل لنحصل على أعمدة متساوية العرض، مما يضمن إظهار الأعداد الكبيرة بصورة صحيحة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs perl"><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="hljs-number"><span class="lit">3</span></span><span class="pun">,</span><span class="hljs-number"><span class="lit">13</span></span><span class="pun">):</span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">print</span></span><span class="pun">(</span><span class="hljs-string"><span class="str">"{:6d} {:6d} {:6d}"</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">format</span></span><span class="pun">(</span><span class="pln">i</span><span class="pun">,</span><span class="pln"> i</span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="pun">,</span><span class="pln"> i</span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="hljs-variable"><span class="pun">*</span><span class="pln">i</span></span><span class="pun">))</span></code></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9265_7" style="">
<code class="hljs "><span class="pln">     </span><span class="lit">3</span><span class="pln">      </span><span class="lit">9</span><span class="pln">     </span><span class="lit">27</span><span class="pln">
     </span><span class="lit">4</span><span class="pln">     </span><span class="lit">16</span><span class="pln">     </span><span class="lit">64</span><span class="pln">
     </span><span class="lit">5</span><span class="pln">     </span><span class="lit">25</span><span class="pln">    </span><span class="lit">125</span><span class="pln">
     </span><span class="lit">6</span><span class="pln">     </span><span class="lit">36</span><span class="pln">    </span><span class="lit">216</span><span class="pln">
     </span><span class="lit">7</span><span class="pln">     </span><span class="lit">49</span><span class="pln">    </span><span class="lit">343</span><span class="pln">
     </span><span class="lit">8</span><span class="pln">     </span><span class="lit">64</span><span class="pln">    </span><span class="lit">512</span><span class="pln">
     </span><span class="lit">9</span><span class="pln">     </span><span class="lit">81</span><span class="pln">    </span><span class="lit">729</span><span class="pln">
    </span><span class="lit">10</span><span class="pln">    </span><span class="lit">100</span><span class="pln">   </span><span class="lit">1000</span><span class="pln">
    </span><span class="lit">11</span><span class="pln">    </span><span class="lit">121</span><span class="pln">   </span><span class="lit">1331</span><span class="pln">
    </span><span class="lit">12</span><span class="pln">    </span><span class="lit">144</span><span class="pln">   </span><span class="lit">1728</span></code></pre>

<p>
	يمكننا أيضًا تعديل محاذاة النص الموجود في الأعمدة باستخدام الرموز <code>&gt;</code> و <code>^</code> و <code>&lt;</code>، وتبديل <code>d</code> إلى <code>f</code> لإظهار منازل عشرية، وغير ذلك مما تعلمناه في هذا الدرس لإظهار البيانات الناتجة كما نرغب.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	قد يكون استخدام المنسقات لوضع القيم في سلسلةٍ نصيةٍ أمرًا مفيدًا لتسهيل تنظيم البيانات والقيم، فالمنسقات هي آليةٌ تساعد في جعل الناتج مقروءًا للمستخدم.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3" rel="external nofollow">How To Use String Formatters in Python 3</a> لصاحبته Lisa Tagliaferri.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B3%D8%A7%D8%A8%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r730/" rel="">كيفية إجراء العمليات الحسابية</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r729/" rel="">كيفية استخدام المتغيرات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">492</guid><pubDate>Tue, 03 Sep 2019 18:01:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x645;&#x62A;&#x63A;&#x64A;&#x631;&#x627;&#x62A; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r729/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60e3a328442_.jpg.fbb0055ac6608ee5480e0c0ff2906d62.jpg" /></p>
<p>
	<strong>المتغيرات</strong> هي مفهوم برمجي مهم. إنَّها رموز تدل على القيم التي تستخدمها في برنامجك.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
}

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<p>
	ستغطي هذه المقالة بعض أساسيات المتغيرات، وكيفية استخدامها بالشكل الصحيح في برامج بايثون 3.
</p>

<h2 id="-">
	فهم المتغيرات
</h2>

<p>
	من الناحية الفنية، يُخصَّص للمتغير مساحة تخزينية في الذاكرة توضع القيمة المرتبطة به فيها. يُستخدم اسم المتغير للإشارة إلى تلك القيمة المُخزَّنة في ذاكرة البرنامج التي هي جزء من ذاكرة الحاسوب.
</p>

<p>
	المُتغيِّر أشبه بعنوان تُلصقه على قيمة مُعيَّنة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="31143" href="https://academy.hsoub.com/uploads/monthly_2019_08/variable_value.png.7389901470de0d8c09aa622e5ebf227a.png" rel=""><img alt="variable_value.png" class="ipsImage ipsImage_thumbnailed" data-fileid="31143" data-unique="crqdqrjgy" src="https://academy.hsoub.com/uploads/monthly_2019_08/variable_value.thumb.png.eee3344d46b3ee3a80aa54f8bd5bbd9d.png"></a>
</p>

<p>
	لنفترض أنّ لدينا <a href="https://wiki.hsoub.com/Python/int" rel="external">عددًا صحيحًا</a> يساوي <code>103204934813</code>، ونريد تخزينه في متغيِّر بدلًا من إعادة كتابة هذا العدد الطويل كل مرة، لذلك سنستخدم شيئًا يُسهِّل تذكُّره، مثل المتغير <code>my_int</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_6" style=""><span class="pln">my_int </span><span class="pun">=</span><span class="pln"> </span><span class="lit">103204934813</span></pre>

<p>
	إذا نظرنا إليه على أنَّه عنوانٌ مرتبط بقيمة، فسيبدو على النحو التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="31142" href="https://academy.hsoub.com/uploads/monthly_2019_08/variable_example.png.fab420f4914ae01666acc09cfa188e53.png" rel=""><img alt="variable_example.png" class="ipsImage ipsImage_thumbnailed" data-fileid="31142" data-unique="w4e8iitik" src="https://academy.hsoub.com/uploads/monthly_2019_08/variable_example.thumb.png.bbdd3d370861f1d511f237debf7df628.png"></a>
</p>

<p>
	عنوان القيمة هو <code>my_int</code> المكتوب عليها، والقيمة هي <code>103204934813</code> (نوعها عدد صحيح).
</p>

<p>
	العبارة <code>my_int = 103204934813</code> هي تعليمة إسناد (assignment statement)، وتتألف من الأجزاء التالية:
</p>

<ul>
	<li>
		اسم المتغير (<code>my_int</code>)
	</li>
	<li>
		معامل الإسناد، المعروف أيضًا باسم "علامة المساواة" (<code>=</code>)
	</li>
	<li>
		القيمة التي أُسنِدَت إلى اسم المتغير (<code>103204934813</code>)
	</li>
</ul>

<p>
	تشكل هذه الأجزاء الثلاثة معًا العبارة التي تُسنِد على المتغير <code>my_int</code> القيمة العددية الصحيحة <code>103204934813</code> .
</p>

<p>
	بمجرد تعيين قيمة متغير ما، نكون قد هيّئنا أو أنشأنا ذلك المتغير. وبعد ذلك، يمكننا استخدام ذلك المتغير بدلًا من القيمة. في بايثون، لا يلزم التصريح عن المتغيرات قبل استخدامها كما هو الحال في بعض لغات البرمجة الأخرى؛ إذ يمكنك البدء في استخدام المتغير على الفور.
</p>

<p>
	بمجرد تعيين <code>my_int</code> عند القيمة <code>103204934813</code>، يمكننا استخدام <code>my_int</code> في مكان العدد الصحيح، كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_8" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_int</span><span class="pun">)</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode"><span class="hljs-number">103204934813</span>
</pre>

<p>
	استخدام المتغيرات يسهل علينا إجراء العمليات الحسابية. في المثال التالي، سنستخدم العبارة السابقة <code>my_int = 1040</code> ، ثم سنطرح من المتغير <code>my_int</code> القيمة <code>813</code> :
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_11" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_int </span><span class="pun">-</span><span class="pln"> </span><span class="lit">813</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode"><span class="hljs-number">103204934000</span>
</pre>

<p>
	في هذا المثال، يجري بايثون العملية الحسابية، ويطرح <code>813</code> من المتغير <code>my_int</code> ، ويعيد القيمة <code>103204934000</code> .
</p>

<p>
	يمكن ضبط المتغيرات وجعلها تساوي ناتج عملية حسابية. دعنا نجمع عددين معًا، ونخزِّن قيمة المجموع في المتغير <code>x</code> :
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_13" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">76</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">145</span></pre>

<p>
	يشبه المثال أعلاه إحدى المعادلات التي تراها في كتب الجبر. في الجبر، تُستخدَم الحروف والرموز لتمثيل الأعداد والكميات داخل الصيغ والمعادلات، وبشكل مماثل، المتغيرات أسماء رمزية تمثل قيمة من نوع بيانات معيّن. الفرق في لغة بايثون، أنّ عليك التأكد دائمًا من أنّ المتغير موضوع على الجانب الأيسر من المعادلة.
</p>

<p>
	لنطبع <code>x</code> :
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_15" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span></pre>

<p>
	والمخرجات:
</p>

<pre class="ipsCode"><span class="hljs-number">221</span>
</pre>

<p>
	أعادت بايثون القيمة <code>221</code> لأنَّه أُسنِد إلى المتغير <code>x</code> مجموع <code>76</code> و <code>145</code> .
</p>

<p>
	يمكن أن تمثل المتغيرات أي نوع بيانات، وليس الأعداد الصحيحة فقط:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_18" style=""><span class="pln">my_string </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hello, World!'</span><span class="pln">
my_flt </span><span class="pun">=</span><span class="pln"> </span><span class="lit">45.06</span><span class="pln">
my_bool </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="com"># True أو False القيم المنطقية ستعيد إما</span><span class="pln">
my_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'item_1'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_2'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_3'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_4'</span><span class="pun">]</span><span class="pln">
my_tuple </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'one'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'two'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'three'</span><span class="pun">)</span><span class="pln">
my_dict </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'letter'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'g'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'number'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'seven'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'symbol'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'&amp;'</span><span class="pun">}</span></pre>

<p>
	إذا طبعت أيًّا من المتغيرات المذكورة أعلاه، فستعيد بايثون قيمة المتغير. على سبيل المثال، في الشيفرة التالية سنطبع متغيرًا يحتوي "<a href="https://wiki.hsoub.com/Python/list" rel="external">قائمة</a>":
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_20" style=""><span class="pln">my_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'item_1'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_2'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_3'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_4'</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_list</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_22" style=""><span class="pun">[</span><span class="str">'item_1'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_2'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_3'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'item_4'</span><span class="pun">]</span></pre>

<p>
	لقد مرّرنا القيمة <code>['item_1' و 'item_2' و 'item_3' و 'item_4']</code> إلى المتغير <code>my_list</code>، ثم استخدمنا الدالة <code>print()‎</code> لطباعة تلك القيمة باستدعاء <code>my_list</code>.
</p>

<p>
	تُخصِّص المتغيرات مساحة صغيرة من ذاكرة الحاسوب، وتقبل قيمًا تُوضَع بعد ذلك في تلك المساحة.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2 id="-">
	قواعد تسمية المتغيرات
</h2>

<p>
	تتسم تسمية المتغيرات بمرونة عالية، ولكن هناك بعض القواعد التي عليك أخذها في الحسبان:
</p>

<ul>
	<li>
		يجب أن تكون أسماء المتغيرات من كلمة واحدة فقط (بدون مسافات)
	</li>
	<li>
		يجب أن تتكوّن أسماء المتغيرات من الأحرف والأرقام والشرطة السفلية (<code>_</code>) فقط
	</li>
	<li>
		لا ينبغي أن تبدأ أسماء المتغيرات برقم
	</li>
</ul>

<p>
	باتباع القواعد المذكورة أعلاه، دعنا نلقي نظرة على بعض الأمثلة:
</p>

<table>
	<tbody>
		<tr>
			<th>
				صالح
			</th>
			<th>
				غير صالح
			</th>
			<th>
				لماذا غير صالح
			</th>
		</tr>
		<tr>
			<td>
				my_int
			</td>
			<td>
				my-int
			</td>
			<td>
				غير مسموح بالشرطات
			</td>
		</tr>
		<tr>
			<td>
				int4
			</td>
			<td>
				4int
			</td>
			<td>
				لا يمكن البدء برقم
			</td>
		</tr>
		<tr>
			<td>
				MY_INT
			</td>
			<td>
				‎$MY_INT
			</td>
			<td>
				لا يمكن استخدام أيّ رمز غير الشرطة السفلية
			</td>
		</tr>
		<tr>
			<td>
				another_int
			</td>
			<td>
				another int
			</td>
			<td>
				المتغير لا ينبغي أن يتكون من أكثر من كلمة واحدة
			</td>
		</tr>
	</tbody>
</table>

<p>
	من الأمور التي يجب أخذها في الحسبان عند تسمية المتغيرات، هو أنَّها حساسة لحالة الأحرف، وهذا يعني أنَّ <code>my_int</code> و <code>MY_INT</code> و <code>My_Int</code> و <code>mY_iNt</code> كلها مختلفة. ينبغي أن تتجنب استخدام أسماء متغيرات متماثلة لضمان ألا يحدث خلط عندك أو عند المتعاونين معك، سواء الحاليين والمستقبليّين.
</p>

<p>
	أخيرًا، هذه بعض الملاحظات حول أسلوب التسمية. من المتعارف عليه عند تسمية المتغيرات أن تبدأ اسم المتغير بحرف صغير، وأن تستخدم الشرطة السفلية عند فصل الكلمات. البدء بحرف كبير مقبول أيضًا، وقد يفضّل بعض الأشخاص تنسيق سنام الجمل (camelCase)، أو الخلط بين الأحرف الكبيرة والصغيرة عند كتابة المتغيرات، ولكنّ هذه الخيارات أقل شهرة.
</p>

<table>
	<tbody>
		<tr>
			<th>
				تنسيق متعارف عليه
			</th>
			<th>
				تنسيق غير متعارف عليه
			</th>
			<th>
				لماذا غير متعارف عليه
			</th>
		</tr>
		<tr>
			<td>
				my_int
			</td>
			<td>
				myInt
			</td>
			<td>
				أسلوب سنام الجمل (camelCase) غير تقليدي
			</td>
		</tr>
		<tr>
			<td>
				int4
			</td>
			<td>
				Int4
			</td>
			<td>
				الحرف الأول كبير - غير تقليدية
			</td>
		</tr>
		<tr>
			<td>
				my_first_string
			</td>
			<td>
				myFirstString
			</td>
			<td>
				أسلوب سنام الجمل (camelCase) غير تقليدي
			</td>
		</tr>
	</tbody>
</table>

<p>
	الخيار الأهم الذي عليك التمسك به هو الاتساق. إذا بدأت العمل في مشروع يستخدم تنسيق سنام الجمل في تسمية المتغيرات، فمن الأفضل الاستمرار في استخدام ذلك التنسيق.
</p>

<p>
	يمكنك مراجعة مقالة <a href="https://wiki.hsoub.com/Python/coding-style" rel="external">تنسيق الشيفرات البرمجية في بايثون</a> لمزيد من التفاصيل.
</p>

<h2 id="-">
	تغيير قيم المتغيرات
</h2>

<p>
	كما تشير إلى ذلك كلمة "متغير"، يمكن تغيير قيم المتغيرات في بايثون بسهولة. هذا يعني أنَّه يمكنك تعيين قيمة مختلفة إلى متغير أُسنِدَت له قيمة مسبقًا بسهولة بالغة.
</p>

<p>
	إنّ القدرة على إعادة التعيين مفيدة للغاية، لأنك قد تحتاج خلال أطوار برنامجك إلى قبول قيم ينشئها المستخدم وتُحيلها على متغير.
</p>

<p>
	سهولة إعادة تعيين المتغيرات مفيد أيضًا في البرامج الكبيرة التي قد تحتاج خلالها إلى تغيير القيم باستمرار.
</p>

<p>
	سنعيّن إلى المتغير <code>x</code> أولًا <a href="https://wiki.hsoub.com/Python/int" rel="external">عددًا صحيحًا</a>، ثم نعيد تعيينه <a href="https://wiki.hsoub.com/Python/str" rel="external">بسلسلة نصية</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_24" style=""><span class="com"># x إسناد قيمة عددية إلى</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">76</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">

</span><span class="com"># إلى سلسلة نصية x إعادة تعيين</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode"><span class="hljs-number">76</span>
Sammy
</pre>

<p>
	يوضح المثال أعلاه أنه يمكننا أولًا تعيين المتغير <code>x</code> وإعطاؤه قيمة عددية، ثم إعادة تعيينه بقيمة نصية.
</p>

<p>
	إذا أعدنا كتابة البرنامج بهذه الطريقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_27" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">76</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span></pre>

<p>
	لن نتلقى سوى القيمة المعيّنة الثانية في المخرجات، لأنَّ تلك القيمة كانت أحدث تعيين:
</p>

<pre class="ipsCode"><span class="hljs-attribute">Sammy</span>
</pre>

<p>
	قد تكون إعادة تعيين المتغيرات مفيدة في بعض الحالات، لكن عليك أن تبقي عينك على مقروئية الشيفرة، وأن تحرص على جعل البرنامج واضحًا قدر الإمكان.
</p>

<h2 id="-multiple-assignment-">
	الإسناد المتعدد (Multiple Assignment)
</h2>

<p>
	في بايثون، يمكنك إسناد قيمة واحدة إلى عدة متغيرات في الوقت نفسه. يتيح لك هذا تهيئة عدَّة متغيرات دفعةً واحدةً، والتي يمكنك إعادة تعيينها لاحقًا، أو من خلال مدخلات المستخدم.
</p>

<p>
	يمكنك من خلال التعيينات المتعددة ضبط المتغيرات <code>x</code> و<code>y</code> و <code>z</code> عند القيمة <code>0</code> في سطر واحد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_29" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> z </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">z</span><span class="pun">)</span></pre>

<p>
	الناتج سيكون:
</p>

<pre class="ipsCode"><span class="hljs-number">0</span>
<span class="hljs-number">0</span>
<span class="hljs-number">0</span>
</pre>

<p>
	في هذا المثال، عيّنّا المتغيرات الثلاثة (<code>x</code> و <code>y</code> و <code>z</code>) في نفس موقع الذاكرة. وكلها تساوي القيمة <code>0</code>.
</p>

<p>
	تسمح لك بايثون أيضًا بتعيين عدة قيم لعدة متغيرات ضمن السطر نفسه. هذه القيم يمكن أن تكون من أنواع بيانات مختلفة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_32" style=""><span class="pln">j</span><span class="pun">,</span><span class="pln"> k</span><span class="pun">,</span><span class="pln"> l </span><span class="pun">=</span><span class="pln"> </span><span class="str">"shark"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2.05</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">j</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">k</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">l</span><span class="pun">)</span></pre>

<p>
	وهذه هي المخرجات:
</p>

<pre class="ipsCode">shark
<span class="hljs-number">2.05</span>
<span class="hljs-number">15</span>
</pre>

<p>
	في المثال أعلاه، أُسندَت السلسلة النصية <code>"shark"</code> إلى المتغير <code>j</code>، والعدد العشري <code>2.05</code> إلى المتغير <code>k</code>، والعدد الصحيح <code>15</code> إلى المتغير <code>l</code>.
</p>

<p>
	تعيين عدة متغيرات بعدة قيم في سطر واحد يمكن أن يجعل الشيفرة مختصرة ويقلل من عدد الأسطر، ولكن تأكد من أنّ ذلك ليس على حساب المقروئية.
</p>

<h2 id="-">
	المتغيرات العامة والمحلية
</h2>

<p>
	عند استخدام المتغيرات داخل البرنامج، من المهم أن تضع نطاق (scope) المتغير في حساباتك. يشير نطاق المتغير إلى المواضع التي يمكن الوصول منها إلى المتغير داخل الشيفرة، لأنَّه لا يمكن الوصول إلى جميع المتغيرات من جميع أجزاء البرنامج، فبعض المتغيرات <strong>عامة</strong> (global)، وبعضها <strong>محلي</strong> (local).
</p>

<p>
	تُعرّف المتغيرات العامة خارج الدوال. أمَّا المتغيرات المحلية، فتوجد داخل الدوال.
</p>

<p>
	المثال التالي يعطي فكرة عن المتغيرات العامة والمحلية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_34" style=""><span class="com"># إنشاء متغير عام، خارج الدالة</span><span class="pln">
glb_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"global"</span><span class="pln">



</span><span class="kwd">def</span><span class="pln"> var_function</span><span class="pun">():</span><span class="pln">
    lcl_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"local"</span><span class="pln">   </span><span class="com"># إنشاء متغير محلي داخل دالة</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lcl_var</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء دالة لطباعة المتغير المحلي</span><span class="pln">
var_function</span><span class="pun">()</span><span class="pln">

</span><span class="com"># طباعة متغير عام خارج دالة</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">glb_var</span><span class="pun">)</span></pre>

<p>
	المخرجات الناتجة:
</p>

<pre class="ipsCode"><span class="hljs-keyword">local</span>
<span class="hljs-keyword">global</span>
</pre>

<p>
	يُسنِد البرنامج أعلاه سلسلة نصية إلى المتغير العمومي <code>glb_var</code> خارج الدالة، ثم يعرّف الدالة <code>var_function()‎</code>. وسيُنشِئ داخل تلك الدالة متغيِّرًا محليًّا باسم <code>lcl_var</code>، ثم يطبعه قيمته. ينتهي البرنامج باستدعاء الدالة <code>var_function()‎</code>، وطباعة قيمة المتغير <code>glb_var</code>.
</p>

<p>
	لمَّا كان <code>glb_var</code> متغيرًا عامًّا، فيمكننا الوصول إليه داخل الدالة <code>var_function()‎</code>. المثال التالي يبيّن ذلك:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_36" style=""><span class="pln">glb_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"global"</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> var_function</span><span class="pun">():</span><span class="pln">
    lcl_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"local"</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lcl_var</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">glb_var</span><span class="pun">)</span><span class="pln"> </span><span class="com"># داخل الدالة glb_var طباعة </span><span class="pln">

var_function</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">glb_var</span><span class="pun">)</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode"><span class="hljs-keyword">local</span>
<span class="hljs-keyword">global</span>
<span class="hljs-keyword">global</span>
</pre>

<p>
	لقد طبعنا المتغير العام <code>glb_var</code> مرتين، حيث طُبع داخل الدالة وخارجها.
</p>

<p>
	ماذا لو حاولنا استدعاء المتغير المحلي خارج الدالة؟
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_38" style=""><span class="pln">glb_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"global"</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> var_function</span><span class="pun">():</span><span class="pln">
    lcl_var </span><span class="pun">=</span><span class="pln"> </span><span class="str">"local"</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lcl_var</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lcl_var</span><span class="pun">)</span></pre>

<p>
	لا يمكننا استخدام متغير محلي خارج الدالة التي صُرِّح عنه فيها. إذا حاولنا القيام بذلك، فسيُطلق الخطأ <code>NameError</code>.
</p>

<pre class="ipsCode">NameError: <span class="hljs-keyword">name</span> <span class="hljs-string">'lcl_var'</span> <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> defined
</pre>

<p>
	دعنا ننظر إلى مثال آخر، حيث سنستخدم الاسم نفسه لمتغير عام وآخر محلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_41" style=""><span class="pln">num1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="com"># متغير عام</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> my_function</span><span class="pun">():</span><span class="pln">
    num1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="com"># num1 استخدام نفس اسم المتغير</span><span class="pln">
    num2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pln">  </span><span class="com"># تعيين متغير محلي </span><span class="pln">

    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">num1</span><span class="pun">)</span><span class="pln"> </span><span class="com"># num1 طباعة المتغير المحلي</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">num2</span><span class="pun">)</span><span class="pln"> </span><span class="com"># num2 طباعة المتغير المحلي</span><span class="pln">

</span><span class="com"># my_function() استدعاء</span><span class="pln">
my_function</span><span class="pun">()</span><span class="pln">

</span><span class="com"># num1 طباعة المتغير العام</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">num1</span><span class="pun">)</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode"><span class="hljs-number">10</span>
<span class="hljs-number">7</span>
<span class="hljs-number">5</span>
</pre>

<p>
	نظرًا لأنّ المتغير المحلي <code>num1</code> صُرِّح عنه محليًا داخل إحدى الدوال، فسنرى أنّ <code>num1</code> يساوي القيمة المحلية <code>10</code> عند استدعاء الدالة. عندما نطبع القيمة العامة للمتغير <code>num1</code> بعد استدعاء الدالة <code>my_function()‎</code>، سنرى أنّ المتغير العام <code>num1</code> لا يزال مساويًا للقيمة <code>5</code>.
</p>

<p>
	من الممكن تعيين المتغيرات العامة داخل دالة باستخدام الكلمة المفتاحية <code>global</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3635_43" style=""><span class="kwd">def</span><span class="pln"> new_shark</span><span class="pun">():</span><span class="pln">
    </span><span class="com"># جعل المتغير عاما</span><span class="pln">
    </span><span class="kwd">global</span><span class="pln"> shark
    shark </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">

</span><span class="com"># new_shark() استدعاء الدالة</span><span class="pln">
new_shark</span><span class="pun">()</span><span class="pln">

</span><span class="com"># shark طباعة المتغير العام</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">shark</span><span class="pun">)</span></pre>

<p>
	رغم أنّ المتغير المحلي <code>shark</code> عُيِّن داخل الدالة <code>new_shark()‎</code>، إلا أنه يمكن الوصول إليه من خارج الدالة بسبب العبارة <code>global</code> المستخدمة قبل تعيين المتغير داخل الدالة.
</p>

<p>
	بسبب استخدام العبارة <code>global</code>، فلن يُطلق أيّ خطأ عندما نستدعي print(shark)<code>‎</code> خارج الدالة. رغم أنَّه يمكنك تعيين متغير عام داخل دالة، إلا أنّها من العادات غير المستحبة في البرمجة، لأنها قد تؤثر على مقروئية الشيفرة.
</p>

<p>
	هناك شيء آخر يجب تذكره، وهو أنَّك إذا أشرت إلى متغير داخل دالة، دون تعيين قيمة له، فسيُعَدّ هذا المتغير عامًا بشكل ضمني. للحصول على متغير محلي، يجب عليك إسناد قيمة له داخل متن الدالة.
</p>

<p>
	عند التعامل مع المتغيرات، من المهم أن تختار بين استخدام المتغيرات العامة أو المحلية. يُفضل في العادة استخدام المتغيرات المحلية، ولكن إن وجدت نفسك تستخدم نفس المتغير في عدة دوال، فقد ترغب في جعله عامًا. أما إن كنت تحتاج المتغير داخل دالة أو صنف واحد فقط، فقد يكون الأولى استخدام متغير محلي.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	لقد مررنا في هذه المقالة على بعض حالات الاستخدام الشائعة للمتغيرات في بايثون 3. المتغيرات هي لبنة مهمة في البرمجة، إذ تُمثِّل حاضنةً لمختلف أنواع البيانات في بايثون.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-variables-in-python-3" rel="external nofollow">How To Use Variables in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A2%D9%84%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r492/" rel="">كيفية استخدام آلية تنسيق السلاسل النصية</a><span style="display: none;"> </span>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A8%D9%8A%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r728/" rel="">كيفية التحويل بين أنواع البيانات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/python/" rel="">تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">729</guid><pubDate>Sat, 31 Aug 2019 13:05:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x645;&#x631;&#x62C;&#x639; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644; &#x625;&#x644;&#x649; &#x62A;&#x639;&#x644;&#x645; &#x644;&#x63A;&#x629; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/-----.png.2b032073c7bd2a7844845eee3d7c54dd.png" /></p>
<p>
	تعد بايثون Python واحدة من أشهر لغات البرمجة وأكثرها استخدامًا، وهي لغة ممتازة ليبدأ بها المبرمجون الجدد. يمكن استخدامها في كل المجالات، بدءًا من ألعاب الفيديو ومعالجة اللغات، وصولًا لتحليل البيانات والتعلم الآلي.
</p>

<p>
	بايثون هي لغة برمجة عالية المستوى، ومُفسرة interpreted وتفاعلية وكائنية، وتتمتع بمقروئية عالية، إذ تستخدم كلمات إنجليزية بسيطة، على خلاف اللغات الأخرى التي تستخدم الرموز، كما أنّ قواعدها الإملائية والصياغية بسيطة ومفهومة، ما يجعل <a href="https://academy.hsoub.com/python/" rel="">تعلم لغة بايثون</a> سهلًا مقارنةً بلغات برمجة أخرى.
</p>

<p>
	هذا المقال هو دليلك الشامل إلى التعرف على كل ما يخص لغة بايثون وكيفية تعلمها بأقصر السبل.
</p>

<h2 id="-">
	جدول المحتويات
</h2>

<p>
	حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار:
</p>

<ul>
	<li>
		<a href="#%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">تاريخ بايثون</a>
	</li>
	<li>
		<a href="#%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">مميزات لغة بايثون</a>
	</li>
	<li>
		<a href="#%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">تطبيقات ومجالات استخدام لغة بايثون</a>
	</li>
	<li>
		<a href="#%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">لماذا بايثون؟</a>
	</li>
	<li>
		<a href="#%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">أهمية تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="#%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">كيفية تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="#%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86" rel="">نصائح لتعلم لغة بايثون</a>
	</li>
</ul>

<h2 id="تاريخ-بايثون">
	تاريخ بايثون
</h2>

<p>
	ظهرت لغة <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> في أواخر الثمانينيات على يد المبرمج الهولندي جايدو فان روسم Guido van Rossum، وقد عُدَّت خليفة للغة <a href="https://en.wikipedia.org/wiki/ABC_(programming_language" rel="external nofollow">ABC</a>. كما استفادت من الكثير من اللغات السابقة لها، مثل Modula-3 و C و C++‎ و Algol-68 و SmallTalk، وغيرها من اللغات وأحدثت ثورة في عالم البرمجة لسهولتها وتعدد استخداماتها.
</p>

<p>
	نُشِر الإصدار 2.0 من لغة بايثون عام 2000، وقدّم العديد من الميزات الجديدة التي سهلت كتابة الكود على المبرمجين، مثل <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-list-comprehensions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r515/" rel="">القوائم الفهمية List Comprehensions</a>، ونظام كنس المُهملات garbage collection إلا أن هناك بعض العيوب التصميمية وأوجه القصور التي لم تتمكن سلسلة إصدارات ‎2.x‎ من تداركها.
</p>

<p>
	أطلق بعدها الإصدار 3.0 من لغة بايثون المعروف أيضًا باسم Python 3000 أو Py3k في عام 2008، والذي شكّل طفرة في اللغة وصحح العديد من عيوبها، لكنه <a href="%5Bhttps://academy.hsoub.com/programming/python/%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%85%D8%A7-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-2-%D9%88-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r483/%5D(https://academy.hsoub.com/programming/python/%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%85%D8%A7-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-2-%D9%88-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r483/" rel="">لم يكن متوافقًا تمامًا مع الإصدارات السابقة</a>)، ولهذا السبب قرر فريق التطوير الاستمرار ودعم إصدار أخير من سلسلة بايثون ‎2.x‎، وهو بايثون 2.7 لغاية عام 2020 وبعدها توقف الدعم ولم يعد الإصدار يتلقى أي تحديثات أو ميزات جديدة.
</p>

<p>
	النسخة الحالية من بايثون هي Python 3.11 وقد صدرت في السادس من ديسمبر/كانون الأول عام 2022، وتضمنت عدة تحسينات أبرزها تحسين سرعة التنفيذ، وتحسين رسائل الخطأ لتساعد المبرمج على تحديد الموقع الدقيق للخطأ ضمن البرنامج والعمل على تصحيحه بسرعة أكبر.
</p>

<h2 id="مميزات-لغة-بايثون">
	مميزات لغة بايثون
</h2>

<p>
	تتميز بايثون بعدة أمور عن غيرها من <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغات البرمجة</a>، من أبرزها:
</p>

<ul>
	<li>
		<strong>سهولة التعلم</strong>: يسهل تعلم لغة بايثون، إذ تتألف من عدد قليل من الكلمات المفتاحية، وتتميز بصياغة بسيطة وواضحة.
	</li>
	<li>
		<strong>المقروئية</strong>: شيفرة لغة بايثون واضحة ومنظمة وسهلة القراءة وتحاكي اللغة الطبيعية.
	</li>
	<li>
		<strong>سهولة الصيانة</strong>: شيفرة بايثون سهلة الصيانة إلى حد بعيد.
	</li>
	<li>
		<strong>مفتوحة المصدر</strong> حيث يمكن لأي شخص الاطلاع على شيفرة بايثون وإضافة تعديلات و ميزات جديدة عليها أو تطوير مكتبات تلبي مختلف المتطلبات.
	</li>
	<li>
		<strong>مكتبة قياسية واسعة</strong>: تحتوي مكتبة بايثون القياسية على عدد كبير من الحزم المحمولة التي تتوافق مع الأنظمة الشبيهة بيونكس و Windows و macOS.
	</li>
	<li>
		<strong>الوضع التفاعلي</strong>: تدعم بايثون الوضع التفاعلي، مما يتيح إمكانية تنفيذ الشيفرات مباشرةً على سطر الأوامر وتنقيح هذه الشيفرات بسهولة.
	</li>
	<li>
		<strong>محمولية بايثون</strong>: يمكن تشغيل لغة بايثون على طيف واسع من المنصات والأجهزة، مع الاحتفاظ بنفس الواجهة على جميع تلك المنصات.
	</li>
	<li>
		<strong>التوسعية</strong>: من أهم <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">مميزات بايثون</a> هو توفرها على عدد هائل من الوحدات والمكتبات، التي يمكنها توسيع قدرات اللغة في كل المجالات.
	</li>
	<li>
		<strong>دعم البرمجة الكائنية <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr></strong>: وهذا يمكن المبرمجين من كتابة تعليمات برمجية قابلة لإعادة الاستخدام ويسرع وتيرة عملهم.
	</li>
	<li>
		<strong>قواعد البيانات</strong>: توفر بايثون واجهات لجميع <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">قواعد البيانات</a> الأساسية.
	</li>
	<li>
		<strong>الرسوميات</strong>: تدعم بايثون التطبيقات الرسومية.
	</li>
	<li>
		<strong>دعم البرامج الكبيرة</strong>: بايثون مناسبة للبرامج الكبيرة والمعقدة.
	</li>
</ul>

<p>
	سأضرب مثالًا على الميزتين الأكثر شيوعًا بين الداخلين الجدد على المجال <a href="https://academy.hsoub.com/learn-programming/" rel="">تعلم البرمجة</a> وهما سهولة التعلم والمقروئية العالية بما أنهما تسهلان طريق التعلم ولتوضيح هاتين الميزتين، لذا إليك المثال البسيط التالي الذي يطبع كلمة مرحبًا على الشاشة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8417_7" style=""><span class="kwd">print</span><span class="pun">(</span><span class="str">'مرحبًا'</span><span class="pun">)</span></pre>

<p>
	لاحظ كيف يبدو البرنامج بلغة بايثون في حين يكون البرنامج نفسه الذي يقوم بطباعة هذه الكلمة بلغة أخرى مثل C كما يلي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8417_9" style=""><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
   printf</span><span class="pun">(</span><span class="str">"مرحبًا"</span><span class="pun">);</span><span class="pln">
   </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما تلاحظ التعليمة في لغة بايثون واضحة ومباشرة في حين تتضمن لغة C كلمات ورموزًا غريبة وصعبة الفهم على المبتدئين مثل <code>‎#include‎</code> ووجود حرف f ملحقًا بكلمة print التي تعني "اطبع".
</p>

<p>
	رغم بساطة هذا المثال إلا أنه يعطيك فكرة عن مدى البساطة في كتابة شيفرات لغة بايثون ما يجعلها لغة مثالية للأشخاص الذين يبدأون للتو في تعلم البرمجة، وستدرك الفرق في سرعة كتابة الأكواد وسهولة الصيانة واكتشاف وتصحيح الخطأ بشكل أوضح عند كتابة برامج أكثر تعقيدًا.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2 id="مجالات-استخدام-لغة-بايثون">
	تطبيقات ومجالات استخدام لغة بايثون
</h2>

<p>
	تُستخدم لغة بايثون في شتى المجالات، فهي لغة برمجة متعددة الأغراض General Purpose ولها عدة تطبيقات لا يتسع المقال لذكرها لذا سنكتفي هنا بذكر أبرز مجالات استخدام لغة بايثون وهي:
</p>

<ul>
	<li>
		تحليل البيانات
	</li>
	<li>
		تطوير مواقع الويب واستخراج بيانات المواقع
	</li>
	<li>
		الذكاء الاصطناعي وتعلم الآلة
	</li>
	<li>
		تطوير تطبيقات سطح المكتب والألعاب
	</li>
	<li>
		برمجة العتاد واللوحات الإلكترونية
	</li>
</ul>

<p style="text-align: center;">
	<img alt="تطبيقات لغة بايثون" class="ipsImage ipsImage_thumbnailed" data-fileid="116980" data-ratio="50.00" data-unique="02xgn4ind" style="width: 697px; height: auto;" width="800" src="https://academy.hsoub.com/uploads/monthly_2023_01/12761316_--.png.3460d23fe4d47de9e1a3799b0918c57c.png">
</p>

<p>
	دعنا نستكشف المزيد عن كل مجال من هذه المجالات ونتعرف على أهميته ومساهمة لغة بايثون فيه.
</p>

<h3 id="1-">
	1. تحليل البيانات
</h3>

<p>
	أصبحت لغة بايثون إحدى اللغات البارزة في مجال <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علم البيانات</a> لما توفره من مكتبات متخصصة مثل <a href="https://academy.hsoub.com/tags/numpy/" rel="">NumPy</a> و Pandas و Matplotlib التي تسهل على المبرمجين تطوير برامج لتحليل البيانات والتعلم الآلي وتمكن علماء ومحللي البيانات من معالجة هذه البيانات وإجراء الحسابات الإحصائية المعقدة عليها بل وتمثيلها بيانيًا واستخراج المعلومات منها بسرعة وكفاءة أكبر.
</p>

<h3 id="2-">
	2. تطوير مواقع الويب واستخراج بيانات المواقع
</h3>

<p>
	تعد لغة بايثون لغة ملائمة جدًا لتطوير مواقع الويب وبالتحديد الواجهة الخلفية لمواقع الويب، فهي لغة تعمل من طرف الخادم ويمكنها التواصل مع قواعد البيانات ومعالجة بياناتها بسهولة، كما أنها توفر العديد من أطر العمل التي تسرع وتيرة تطوير مواقع وتطبيقات ويب احترافية وآمنة من أشهرها <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو Django</a> و <a href="https://academy.hsoub.com/programming/python/flask/" rel="">فلاسك Flask</a>.
</p>

<p>
	وتوفر مكتبات تسمى مكتبات ORM توفر طرقًا مبتكرة للاستعلام عن البيانات من قاعدة بيانات ومعالجتها باستخدام نموذج موجه للكائنات Object-relational mapping مثل SQLAlchemy و Django ORM وهي أسهل وأسرع من كتابة استعلامات بلغة <a href="https://academy.hsoub.com/programming/sql/" rel="">SQL</a> التقليدية.
</p>

<p>
	كما تلبي لغة بايثون طلبك إن كنت مهتمًا بموضوع استخراج البيانات من صفحات الويب أو المتاجر الإلكترونية المختلفة بهدف دراستها والبحث ضمنها ومقارنة الأسعار فيما بينها، فهي قادرة على استخراج البيانات تلقائيًا من المواقع Web Scraping بسرعة وتنسيقها بطريقة منظمة، وتمثيلها رسوميًا من خلال كتابة أكواد مختصرة ومباشرة بفضل مكتباتها المتنوعة التي توفر كافة الوظائف الضرورية للقيام بذلك وأبرزها Beautiful Soup و Scrapy و Selenium.
</p>





<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			احصل على موقع إلكتروني مخصص لأعمالك
		</p>

		<p class="banner-subtitle">
			أبهر زوارك بموقع احترافي ومميز بالاستعانة بأفضل خدمات تطوير وتحسين المواقع على خمسات
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://khamsat.com/create-website" rel="external">أنشئ موقعك الآن</a>
		</div>
	</div>
</div>





<h3 id="3-">
	3. الذكاء الاصطناعي وتعلم الآلة
</h3>

<p>
	لم يعد <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي</a> وتعلم الآلة مصطلحات غريبة في عصرنا الحالي بل أصبحت من المواضيع الرائجة والمطبقة بكثرة، وهنا أيضًا تبرز لغة بايثون كلغة ملائمة بشكل مثالي لتطبيق مفاهيم الذكاء الاصطناعي وجعل الحواسيب والأجهزة التي نتعامل معها في حياتنا اليومية ذكية وقادرة على التعلم بنفسها ومساعدتنا في اتخاذ القرارات، ومن أشهر المكتبات التي توفرها بايثون في مجال الذكاء الاصطناعي نذكر <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D9%85%D8%AA%D9%82%D8%AF%D9%85%D8%A9-%D8%AD%D9%88%D9%84-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-numpy-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1809/" rel="">NumPy</a> و Pandas و Scikit-Learn ...إلخ.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h3 id="4-">
	4. تطوير تطبيقات سطح المكتب والألعاب.
</h3>

<p>
	تستخدم لغة بايثون بشكل كبير لتطوير و<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">برمجة تطبيقات سطح المكتب</a> ذات الواجهات الرسومية GUI سواء التطبيقات البسيطة كالآلة الحاسبة أو تطبيقات تشغيل الوسائط أو التطبيقات الأكثر تعقيدًا من خلال توفير مجموعة مكتبات قوية ومليئة بأدوات واجهة المستخدم مثل <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%85%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-tkinter-r1378/" rel="">Tkinter</a> و wxPython و PyQt التي تسهل على المبرمج تخطيط وإنشاء تطبيقات سطح مكتب متوافقة مع مختلف أنظمة التشغيل.
</p>

<p>
	كما تعتبر بايثون ملائمة بشكل مثالي لتطوير الألعاب فهي توفر العديد من المكتبات وأطر العمل المساعدة مثل PyGame و Pyglet و PyKyra و PyOpenGL و Panda3D ...إلخ. التي تجعل من إنشاء الألعاب التفاعلية أسهل بكثير من استخدام لغات برمجة أخرى.
</p>

<h3 id="5-">
	5. برمجة العتاد واللوحات الإلكترونية
</h3>

<p>
	إذا كنت مهتمًا ببرمجة العتاد واللوحات الإلكترونية و<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">برمجة التطبيقات</a> المضمنة Embedded Product وانترنت الأشياء فيمكنك البدء باستخدام شريحة راسبيري باي <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D9%85%D8%A7-%D9%87%D9%88-%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-raspberry-pi%D8%9F-r1578/" rel="">Raspberry Pi</a> التي تعتبر حاسوبًا أوليًّا يعمل بنظام لينكس Linux ويستخدم لغة بايثون بشكل ضمني ليمكن المبرمجين والمتعلمين من تطوير مشاريع عملية رائعة مثل ساعة ذكية تعرض الوقت أو بوت للرد الآلي أو تطبيق بث مباشر على يوتيوب أو تطبيق للتحكم بالكاميرا وجعلها تلتقط الصور وتسجل مقاطع الفيديو ...إلخ. بكل سهولة.
</p>

<p>
	هذه كانت بعض المجالات البارزة التي تستخدم فيها لغة بايثون، إضافة إلى الكثير من المجالات الأخرى التي لا يسعنا حصرها هنا.
</p>

<h2 id="لماذا-بايثون">
	لماذا بايثون؟
</h2>

<p>
	إنّ تحديد أفضل لغة برمجة للتعلم قد يكون مهمة صعبة ولو سألت عدة أشخاص عن لغة البرمجة التي يجب تعلمها، فستحصل على عدة إجابات، ويكفي أن تدخل على جوجل وتكتب <a href="https://blog.khamsat.com/best-programming-languages-to-learn-in-2019/" rel="external">أفضل لغة برمجة</a>، وستجد آراءً مختلفةً، وجدالًا لا ينتهي حول هذا الموضوع.
</p>

<p>
	لا أريد أن أبدأ حرب لغات البرمجة هنا، ولكنني سأحاول في هذه الفقرة تقديم بعض الحجج لتبرير لماذا أرى أنّ بايثون هي لغة المستقبل، وأن تعلم لغة بايثون مثالي للمبتدئين الذين يريدون دخول عالم البرمجة وعلوم الحاسوب.
</p>

<h3 id="-">
	شعبية لغة بايثون
</h3>

<p>
	بحسب استطلاع موقع <a href="https://survey.stackoverflow.co/2022/#technology" rel="external nofollow">stackoverflow</a>، تحتل لغة بايثون المرتبة الرابعة في لغات البرمجة الأكثر استخدامًا من قبل المبرمجين والمطورين حول العالم بعد <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> و <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a>/<a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و <a href="https://wiki.hsoub.com/SQL" rel="external">SQL</a>، متفوقة على لغات مثل جافا و ++C و C#‎‏‎‏‎‎‎‎، كما أنها سادس أكثر لغة برمجة مرغوبة من قبل المبرمجين.
</p>

<p>
	فبايثون ليست لغة قوية وفعالة فحسب، بل هي فوق ذلك محبوبة من قبل المبرمجين، ولا عجب في ذلك فهي سهلة ومرنة وتوفر مكتبات هائلة للمبرمجين تسهل عليهم الكثير من الجهود في كتابة الكود، فهل لا يزال لديك شك في أن تعلم لغة بايثون هو خيار مثالي لك؟!
</p>

<p>
	يوضح المخطط التالي <a href="https://survey.stackoverflow.co/2022/#most-popular-technologies-language" rel="external nofollow">إحصائية أجرتها منصة StackOverlow عام 2022</a> عن أكثر لغة شعبية مفضلة في أوساط المبرمجين وموضع لغة بايثون فيها:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="116982" href="https://academy.hsoub.com/uploads/monthly_2023_01/1971839596_Stack-Overflow-Developer-Survey----.png.3cc35bd556d1f61a06b749740a33e88e.png" rel=""><img alt="أكثر لغة برمجة شعبية مع لغة بايثون" class="ipsImage ipsImage_thumbnailed" data-fileid="116982" data-ratio="57.33" data-unique="bexgyju34" style="width: 600px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_01/904314825_Stack-Overflow-Developer-Survey----.thumb.png.3cad21dc4633060fa1e752ae0521c702.png"></a>
</p>

<p>
	كما يوضح المخطط التالي <a href="https://survey.stackoverflow.co/2022/#most-loved-dreaded-and-wanted-language-love-dread" rel="external nofollow">إحصائية أخرى أجرتها منصة StackOverlfow أيضًا عام 2022</a> عما إذا كانت لغة البرمجة محبوبة (الأزرق) أم مخفية (البنفسجي) وللغة بايثون نصيب جيد من المحبوبية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="116981" href="https://academy.hsoub.com/uploads/monthly_2023_01/625120004_Stack-Overflow-Developer-Survey----.png.e472a941e068f743637a51b37a4c81d4.png" rel=""><img alt="أكثر لغة برمجة محبوبة" class="ipsImage ipsImage_thumbnailed" data-fileid="116981" data-ratio="48.50" data-unique="ekryvq1jw" style="width: 600px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_01/598012481_Stack-Overflow-Developer-Survey----.thumb.png.1509dbea8c0d6aaefe8fea2a0a5764a7.png"></a>
</p>

<h3 id="-">
	دعم لغة بايثون
</h3>

<p>
	نظرًا لشعبيتها الكبيرة، تتمتع بايثون بدعم جيد على جميع المستويات تقريبًا. وباعتبارها اللغة المفضلة للمبتدئين، فهناك مجتمع داعم كبير ومتعاون وكم هائل من المراجع والمواد والدورات التعليمية التي تشرح مفاهيم البرمجة الأساسية، إضافة إلى صياغة اللغة وتطبيقاتها.
</p>

<p>
	فسواء كنت هاويًا، وتحب تعلم البرمجة كهواية، أو لأجل استخدامها في مجال عملك، مثل تحليل البيانات ومعالجة اللغات الطبيعية وغير ذلك، أو كنت تريد أن تعمل كمستقل، أو تدخل سوق العمل وتحقق دخلًا من البرمجة، ففي جميع هذه الحالات، سيكون تعلم لغة بايثون خيارًا مثاليًا لك.
</p>

<h3 id="-">
	بايثون مطلوبة في السوق
</h3>

<p>
	تُستخدم لغة بايثون من قبل بعض أكبر الشركات في مجال التكنولوجيا، مثل Uber و PayPal و Google و Facebook و Instagram و Netflix و Dropbox و Reddit. إضافةً إلى هذا، تُستخدم بايثون بكثافة في مجال الذكاء الاصطناعي والتعلم الآلي وتحليل البيانات ومراقبة الأنظمة وغير ذلك.
</p>

<p>
	يقدر موقع <a href="https://survey.stackoverflow.co/2022/#top-paying-technologies-programming-scripting-and-markup-languages" rel="external nofollow">stackoverflow</a>، الدخل السنوي لمطوري بايثون بحوالي 71 ألف دولار، وبالرغم من أن الاستبيان الذي أجراه الموقع مبني على مشاركين معظمهم من الولايات المتحدة والهند وألمانيا ولا يعكس الرواتب في منطقتنا العربية إلا أن الرقم كبير بالمقارنة مع باقي المهن، ويدل على أهمية هذه اللغة وأجرها المرتفع في سوق العمل.
</p>

<p>
	ولا ننسى أن لغة بايثون كما أشرنا لغة عامة الأغراض وقادرة على إيجاد الحلول الفعالة في العديد من المجالات المختلفة وهذا من شأنه بكل تأكيد حث أرباب العمل على توظيف مطوري بايثون والاستفادة من مهاراتهم وخبراتهم في عدة مجالات.
</p>

<h2 id="أهمية-تعلم-لغة-بايثون">
	أهمية تعلم لغة بايثون
</h2>

<p>
	قد تمكنت لغة بايثون طيلة هذه السنوات من لحظة انطلاقها إلى اليوم من إثبات إمكانياتها لتعد واحدة من أهم لغات البرمجة وأكثرها شعبية وجدارة كما أشرنا، ويبرز اسمها بين أوساط المبرمجين والمطورين والطلاب على حد سواء كما أن مختلف الجامعات بدأت بتدريسها في الفصول الأولى للطلاب وتراها المخيمات والدورات البرمجة خيارها الأول لتعليم البرمجة لغير المختصين.
</p>

<p>
	أضف إلى ذلك أن لغة بايثون نالت ثقة الكثير من المواقع والشركات العملاقة واليوم تستخدمها كل من شركات Spotify و Google و Amazon بشكل أساسي إضافة إلى Facebook التي تستخدم بايثون لمعالجة الصور وإدارة بنيتها التحتية، وفي كل يوم تتحول شركات جديدة معروفة عالميًا إلى استخدام بايثون مثل YouTube و DropBox و Instagram التي قررت كذلك استخدامها وفضلتها على PHP.
</p>

<p>
	كما تُستخدم لغة بايثون أيضًا من قبل بعض الجهات العلمية والبحثية، مثل وكالة الفضاء الأمريكية ناسا، والتي لها <a href="https://code.nasa.gov/?q=python" rel="external nofollow">مستودع خاص بالمشاريع المُطورة ببايثون</a> كما أنها تقدم دورات تدريبية لتعليم لغة بايثون من الصفر للاحتراف لعلمائها ومهندسيها ليتمكنوا من معالجة بياناتهم بشكل أفضل وأسرع.
</p>

<h2 id="كيفية-تعلم-لغة-بايثون">
	كيفية تعلم لغة بايثون
</h2>

<p>
	تعرفت إلى الآن على بايثون وأهميتها ومميزاتها واستخدامات لغة بايثون المختلفة وفرص العمل فيها، واقتنعت بأهمية تعلم لغة بايثون لذا قد تتساءل من أين تبدأ؟ سأجيبك في هذا القسم بالتفصيل.
</p>

<p>
	هنالك مساران لتعلم البرمجة عمومًا وتعلم لغة بايثون خصوصًا، إما في أروقة الجامعة أو عبر دورات متخصصة، أما في مسار الجامعة فستتكفل بوضع خطة تعلم عبر فصولها وسنواتها وفي كل الأحوال قد تلجأ إلى الدورات حتى لو دخلت الجامعة بسبب الكم النظري الكبير الذي تعطيه الجامعة غافلة الجانب العملي التطبيقي أو بسبب نسيان اللغة وعدم البرمجة فيها إن جرى تدريسها في السنوات الأولى وهنا تجد نفسك تبحث عن دورات برمجة متخصصة.
</p>

<p>
	سأختصر عليك الطريق وأشير إلى أفضل دورة برمجة متخصصة لتعلم لغة بايثون وهي <a href="https://academy.hsoub.com/store/9-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-python/" rel="">دورة تطوير التطبيقات بلغة بايثون</a> من أكاديمية حسوب وهي دورة منهجية شاملة بعدد ساعات يزيد عن 60 معدة من قبل مبرمجين أكفاء تأخذ بيدك خطوة بخطوة لتعلم لغة بايثون من الصفر وحتى الاحتراف وتبني خلالها الكثير من التطبيقات العملية، وهي كفيلة بأن تؤهلك لبدء حياتك المهنية كمطور بايثون ودخول سوق العمل والحصول على أول وظيفة خلال ستة أشهر.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_5257_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="دورة تطوير التطبيقات بلغة بايثون - أكاديمية حسوب" width="853" data-embed-src="https://www.youtube.com/embed/1niwEWY7CN4"></iframe>
</p>

<p>
	وإن كنت ممن يفضلون التعلم من خلال الكتب الإلكترونية لما توفره من شمولية وتنظيم في المعلومات، فيمكنك تنزيل كتاب <a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">البرمجة بلغة باثيون</a> من أكاديمية حسوب.
</p>

<p>
	هل تريد المزيد من المصادر؟ ما رأيك بزيارة <a href="https://wiki.hsoub.com" rel="external">موسوعة حسوب</a> الشاملة التي تضم توثيقات الكثير من لغات البرمجة، بما في ذلك <a href="https://wiki.hsoub.com/Python" rel="external">توثيق لغة بايثون</a>.
</p>

<p>
	ننصحك أيضًا بالاطلاع على قسم <a href="https://academy.hsoub.com/programming/python/" rel="">دروس ومقالات متنوعة حول لغة بايثون</a> وهذه الدروس تُحدَّث باستمرار لذا كن على اطلاع دائم عليها لتواكب كل جديد وإن كنت مهتمًا بتعلم لغات برمجة أخرى، فيمكنك زيارة قسم <a href="https://academy.hsoub.com/programming/" rel="">البرمجة</a> في الأكاديمية.
</p>

<p>
	وإن أشكل عليك شيء ما فيمكنك أن تسأل عنه في <a href="https://academy.hsoub.com/questions/c3-programming/" rel="">قسم الأسئلة والأجوبة</a> الخاص بالأكاديمية ليجيبك عنه أحد المبرمجين أو تطرحه للنقاش مع المهتمين في <a href="https://io.hsoub.com/python" rel="external">مجتمع حسوب IO</a>.
</p>

<h2 id="نصائح-لتعلم-لغة-بايثون">
	نصائح لتعلم لغة بايثون
</h2>

<p>
	أخيرًا وليس آخرًا، إليك أهم النصائح التي عليك اتباعها لتعلم لغة بايثون من الصفر حتى الاحتراف.
</p>

<h3 id="1-">
	1. حدد المجال الذي تريد التخصص فيه
</h3>

<p>
	مجالات العمل في بايثون متنوعة وتحديد المجال أو المسار الوظيفي الذي تنوي التخصص فيه سيمكنك من تحديد المفاهيم والمهارات الفنية التي يتوجب عليك تعلمها والتركيز عليها دون سواها، وضع خطة زمنية لإتقان جميع المهارات اللازمة لتحقيق هدفك والتزم بها قدر المستطاع.
</p>

<p>
	فإذا كان هدفك من تعلم بايثون هو إنشاء مواقع ويب ضع في خطتك تعلم Django أو Flask، وإذا كان هدفك هو تطوير الألعاب فضع في خطتك التعرف على إحدى المكتبات القوية في تطوير الألعاب مثل Pyglet أو Panda3D أو Pygame ...إلخ.
</p>

<h3 id="2-">
	2. تعلم أساسيات لغة بايثون
</h3>

<p>
	أيًا كان المجال الذي حددته في الخطوة السابقة فلا بد لك في البداية من تعلم أساسيات لغة البايثون التي تمثل أساسًا لأي لغة برمجة والتي تشمل:
</p>

<ul>
	<li>
		طريقة تثبيت لغة بايثون على جهازك وإنشاء بيئة افتراضية.
	</li>
	<li>
		صياغة الجمل والعبارات في بايثون
	</li>
	<li>
		تعريف المتغيرات وأنواع البيانات الأولية.
	</li>
	<li>
		العمليات الحسابية والمنطقية الأساسية.
	</li>
	<li>
		عمليات الإدخال والإخراج ومفهوم الاستثناءات وطرق معالجتها.
	</li>
	<li>
		الدوال البرمجية وطريقة تعريفها واستدعائها.
	</li>
	<li>
		هياكل البيانات المركبة مثل القوائم والمجموعات والقواميس
	</li>
	<li>
		تعليمات التحكم بتدفق البرنامج مثل التعليمات الشرطية والحلقات التكرارية.
	</li>
	<li>
		مفاهيم البرمجة كائنية التوجه
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A3%D9%87%D9%85-8-%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D8%B5%D8%BA%D9%8A%D8%B1%D8%A9-r654/" rel="">أهم المكتبات القياسية</a> التي تستخدم في العديد من المشاريع.
	</li>
	<li>
		طرق التعامل مع الملفات.
	</li>
</ul>

<p>
	الخبر الجيد هنا أن تعلم هذه الأساسيات لن يستغرق منك الكثير من الوقت لأن بايثون كما أشرنا لغة سلسة وبسيطة وسهلة التعلم.
</p>

<h3 id="3-">
	3. تعلم المواضيع المتقدمة التي تخدم أهدافك
</h3>

<p>
	بعد إتقان المفاهيم الأساسية عليك الانتقال خطوة للأمام والتعرف على مواضيع متقدمة تتعلق بشكل مباشر بالتخصص الذي تنوي العمل به والمسار هنا يختلف حسب التخصص الذي اخترته لنفسك والبدء بإتقان جميع المهارات اللازمة لتحقيق هدفك.
</p>

<p>
	يمكنك في هذه المرحلة على سبيل المثال التعرف على مفاهيم مثل قواعد البيانات والتعامل معها، وتعلم مكتبات بايثون والتدريب على استخدامها من خلال تطبيقها في برامج عملية بالطبع ستتطلب المشاريع المختلفة مكتبات مختلفة لذا من المهم التعرف على المكتبات الأكثر شيوعًا في مجالك والتركيز عليها.
</p>

<p>
	كما ستحتاج لتعلم أحد أطر عمل بايثون Python Frameworks التي تساعدك على تطوير مشاريعك وكما ذكرنا بالنسبة للمكتبات ستعتمد الأطر التي عليك تعلمها على التخصص الذي تنوع العمل به.
</p>

<h3 id="4-">
	4. عزز ما تعلمته في مشاريع عملية
</h3>

<p>
	يفترض الآن أنك تملك كافة المهارات اللازمة والأسس النظرية، لكن المعرفة التقنية وحدها لا تكفي لذا حان الوقت لبدء التدرب على تطوير مشاريع لصقل كل هذه المهارات. لذلك من الضروري أن تتدرب على تطوير مجموعة من المشاريع في مجال تخصصك وتبني معرض أعمال يظهر هذه المهارات فهذا يعزز فرصتك للحصول على وظائف فعلية وبدء حياتك المهنية كمطور بايثون.
</p>

<p>
	يمكنك ريثما تحصل على فرصة عمل مناسبة أن تعمل بشكل مستقل على مواقع العمل الحر مثل <a href="https://mostaql.com/" rel="external">مستقل</a> و<a href="https://khamsat.com/" rel="external">خمسات</a> وتنجز المشاريع للعملاء عبر هذه المنصات.
</p>

<h3 id="5-">
	5. لا تهمل مهاراتك الناعمة
</h3>

<p>
	لاشك أن المهارات الفنية ومعرض الأعمال القوي أمر ضروري لأي مبرمج لكن هناك نوعًا آخر من المهارات الضرورية لأي مبرمج والتي يفضل أصحاب العمل توفرها لدى المطورين والمبرمجين وأهمها:
</p>

<ul>
	<li>
		مهارات حل المشكلات والتفكير المنطقي
	</li>
	<li>
		الرغبة في التعلم المستمر والاطلاع على كل جديد في مجالك.
	</li>
	<li>
		مهارات التواصل الفعال والعمل الجماعي
	</li>
</ul>

<h2 id="-">
	خاتمة
</h2>

<p>
	تعرفنا في مقال اليوم على لغة بايثون ورأينا كيف أنها تجمع بين البساطة والسهولة من جهة وبين القوة والفعالية من جهة أخرى، وتعرفنا على أهم <span ipsnoautolink="true">مميزات بايثون</span> ومستقبلها الواعد الذي يفتح لمتعلمها الكثير من الفرص والآفاق. وختمنا المقال بأهم الخطوات والنصائح لتتعلم بايثون بسرعة واحترافية.
</p>

<p>
	هل أنت متحمس لتعلم بايثون أو بدأت فعلًا بتعلمها ولديك أي استفسار حول أي من المواضيع التي ذكرناها في المقال؟ اكتبها في قسم التعليقات أسفل المقال وسنحرص على الإجابة عليها بأقرب فرصة. وفّقك الله تعالى.
</p>
]]></description><guid isPermaLink="false">735</guid><pubDate>Tue, 27 Aug 2019 18:02:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x644;&#x62A;&#x62D;&#x648;&#x64A;&#x644; &#x628;&#x64A;&#x646; &#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A8%D9%8A%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r728/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60dd966d039_.jpg.e35aad51ff1cdece86b93919ff506e00.jpg" /></p>
<p>
	تُستخدَم أنواع البيانات في <a href="%5Bhttps://wiki.hsoub.com/Python%5D(https://wiki.hsoub.com/Python)" rel="">بايثون</a> لتصنيف نوع معيَّن من البيانات، وتحديد القيم التي يمكنك تعيينها لذلك النوع، والعمليات التي يمكنك إجراؤها عليها. هناك أوقات نحتاج إلى تحويل القيم من نوع إلى آخر لأجل معالجتها بطريقة مختلفة. على سبيل المثال، قد نحتاج إلى ضم (concatenate) القيم العددية إلى <a href="%5Bhttps://wiki.hsoub.com/Python/str%5D(https://wiki.hsoub.com/Python/str)" rel="">سلاسل نصية</a>.
</p>

<p>
	سترشدك هذه المقالة إلى كيفية تحويل الأعداد و<a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> و<a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a> و<a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>، بالإضافة إلى تقديم بعض الأمثلة التوضيحية.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31141" href="https://academy.hsoub.com/uploads/monthly_2019_08/5d60dda0a2153_.jpg.5b26541c6be96e89d4f7f579298caac9.jpg" rel="" data-fileext="jpg"><img alt="كيفية التحويل بين أنواع البيانات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31141" data-unique="19ip1tia5" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d60dda0b76c6_.thumb.jpg.7e7bebcb3c45fb0da15499e1cbce0f21.jpg"></a>
</p>

<h2 id="تحويل-الأنواع-العددية">
	تحويل الأنواع العددية
</h2>

<p>
	هناك نوعان من البيانات العددية في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>: <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> و<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>. ستعمل في بعض الأحيان على شيفرة برمجية كتبها شخص آخر، وقد تحتاج إلى تحويل <a href="https://wiki.hsoub.com/Python/int" rel="external">عدد صحيح</a> إلى <a href="https://wiki.hsoub.com/Python/float" rel="external">عدد عشري</a>، أو العكس، أو قد تجد أنك تستخدم عددًا صحيحًا في الوقت الذي تحتاج إلى أعداد عشرية. يتوفر في <a href="%5Bhttps://wiki.hsoub.com/Python%5D(https://wiki.hsoub.com/Python)" rel="">بايثون</a> توابع مضمّنة تُسهِّل عليك تحويل الأعداد الصحيحة إلى أعداد عشرية، أو العكس.
</p>

<h3 id="تحويل-الأعداد-الصحيحة-إلى-أعداد-عشرية">
	تحويل الأعداد الصحيحة إلى أعداد عشرية
</h3>

<p>
	يحوّل التابع <code>float()</code>‎ <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> إلى <a href="https://wiki.hsoub.com/Python/float" rel="external">أعداد عشرية</a>. لاستخدام هذه الدالة، ضع عددًا صحيحًا بين القوسين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_6" style=""><span class="pln">float</span><span class="pun">(</span><span class="lit">57</span><span class="pun">)</span></pre>

<p>
	في هذه الحالة، سيتم تحويل <code>57</code> إلى <code>57.0</code>.
</p>

<p>
	يمكنك أيضًا استخدام هذه الدالة مع المتغيرات. لنُحِل على المتغير <code>f</code> القيمة <code>57</code>، ثم نطبع العدد العشري الجديد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_8" style=""><span class="pln">f </span><span class="pun">=</span><span class="pln"> </span><span class="lit">57</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">float</span><span class="pun">(</span><span class="pln">f</span><span class="pun">))</span></pre>

<p>
	الناتج سيكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_10" style=""><span class="lit">57.0</span></pre>

<p>
	يمكننا باستخدام الدالة <code>float()</code>‎ تحويل الأعداد الصحيحة إلى أعداد عشرية.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h3 id="تحويل-الأعداد-العشرية-إلى-أعداد-صحيحة">
	تحويل الأعداد العشرية إلى أعداد صحيحة
</h3>

<p>
	<a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> لديه دالة أخرى مضمَّنة لتحويل <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد عشرية</a> إلى <a href="https://wiki.hsoub.com/Python/int" rel="external">أعداد صحيحة</a>: وهي <code>int()</code>‎.
</p>

<p>
	تعمل الدالة <code>int()</code>‎ بشكل مشابه للدالة <code>float()</code>‎: يمكنك إضافة عدد عشري داخل القوسين لتحويله إلى عدد صحيح:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_12" style=""><span class="pln">int</span><span class="pun">(</span><span class="lit">390.8</span><span class="pun">)</span></pre>

<p>
	في هذه الحالة، سيتم تحويل <code>390.8</code> إلى <code>390</code>.
</p>

<p>
	يمكنك أيضا استخدام هذه الدالة مع المتغيرات. لنصرِّح أنَّ <code>b</code> يساوي <code>125.0</code>، وأنَّ <code>c</code> يساوي <code>390.8</code>، ثم نطبع <a href="https://wiki.hsoub.com/Python/float" rel="external">العددين العشريين</a> الجديدين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_14" style=""><span class="pln">b </span><span class="pun">=</span><span class="pln"> </span><span class="lit">125.0</span><span class="pln">

c </span><span class="pun">=</span><span class="pln"> </span><span class="lit">390.8</span><span class="pln">

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">int</span><span class="pun">(</span><span class="pln">b</span><span class="pun">))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">int</span><span class="pun">(</span><span class="pln">c</span><span class="pun">))</span></pre>

<p>
	والمخرجات ستكون:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_16" style=""><span class="lit">125</span><span class="pln">

</span><span class="lit">390</span></pre>

<p>
	عند تحويل <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> إلى أعداد صحيحة بواسطة الدالة <code>int()</code>‎، فإنّ بايثون تقتطع الأجزاء العشرية من العدد وتُبقي القيمة الصحيحة؛ لذلك، لن تُحوِّل الدالة <code>int()</code>‎ العدد <code>390.8</code> إلى <code>391</code>.
</p>

<h3 id="تحويل-الأعداد-عبر-القسمة">
	تحويل الأعداد عبر القسمة
</h3>

<p>
	في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> 3، عند تقسيم عدد صحيح على آخر، سينتج <a href="https://wiki.hsoub.com/Python/float" rel="external">عدد عشرية</a> على خلاف <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> 2. بمعنى أنه عند قسمة <code>5</code> على <code>2</code> في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> 3، ستحصل على عدد عشري (مثل <code>2.5</code> عند قسمة 5 على 2):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_18" style=""><span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_20" style=""><span class="lit">2.5</span></pre>

<p>
	في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> 2، ستحصل على ناتج صحيح، أي <code>5/2 = 2</code>. يمكنك الحصول على عدد صحيح ناتج عن عملية القسمة باستعمال المعامل <code>//</code> الجديد في بايثون 3:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_22" style=""><span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">//</span><span class="pln"> </span><span class="lit">2</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_24" style=""><span class="lit">2</span></pre>

<p>
	اقرأ درس <a href="%5Bhttps://academy.hsoub.com/programming/python/%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%85%D8%A7-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-2-%D9%88-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r483/%5D(https://academy.hsoub.com/programming/python/%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%85%D8%A7-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-2-%D9%88-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r483/)" rel="">اعتبارات عملية للاختيار ما بين بايثون 2 و بايثون 3</a> إن لم تقرأه مسبقًا.
</p>

<h2 id="التحويل-مع-السلاسل-النصية">
	التحويل مع السلاسل النصية
</h2>

<p>
	<a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> عبارة عن سلسلة مؤلفة من محرف واحد أو أكثر (المحرف يمكن أن يكون حرفًا، أو عددًا، أو رمزًا). <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> هي إحدى الأشكال الشائعة من البيانات في عالم البرمجة، وقد نحتاج إلى تحويل <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> إلى أعداد أو أعداد إلى سلاسل نصية في كثير من الأحيان، خاصةً عندما نعمل على البيانات التي ينشئها المستخدمون.
</p>

<h3 id="تحويل-الأعداد-إلى-سلاسل-نصية">
	تحويل الأعداد إلى سلاسل نصية
</h3>

<p>
	يمكننا تحويل الأعداد إلى سلاسل نصية عبر التابع <code>str()</code>‎. يمكننا أن نمرّر إمَّا عددًا أو متغيرًا بين قوسي التابع، وبعد ذلك سيتم تحويل تلك القيمة العددية إلى قيمة نصية.
</p>

<p>
	دعنا ننظر أولًا في تحويل الأعداد الصحيحة. لتحويل العدد الصحيح <code>12</code> إلى سلسلة نصية، يمكنك تمرير <code>12</code> إلى التابع <code>str()</code>‎:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_26" style=""><span class="pln">str</span><span class="pun">(</span><span class="lit">12</span><span class="pun">)</span></pre>

<p>
	عند تنفيذ <code>str(12)</code>‎ في <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">سطر أوامر بايثون التفاعلي</a> مع الأمر <code>python</code> في نافذة الطرفية، ستحصل على المخرجات التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_28" style=""><span class="str">'12'</span></pre>

<p>
	تشير علامات الاقتباس المحيطة بالعدد 12 إلى أنه لم يعد عددًا صحيحًا، ولكنه أصبح الآن سلسلة نصية.
</p>

<p>
	سيصبح باستخدام المتغيرات تحويل الأعداد الصحيحة إلى سلاسل نصية أكثر فائدة. لنفترض أننا نريد متابعة تقدم مستخدم في مجال البرمجة يوميًّا مثل أن ندخل عدد أسطر الشيفرة البرمجية التي كتبها. نود أن نعرض ذلك على المستخدم، وذلك بطباعة السلاسل النصية والأعداد في الوقت نفسه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_30" style=""><span class="pln">user </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">

lines </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50</span><span class="pln">

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Congratulations, "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> user </span><span class="pun">+</span><span class="pln"> </span><span class="str">"! You just wrote "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> lines </span><span class="pun">+</span><span class="pln"> </span><span class="str">" lines of code."</span><span class="pun">)</span></pre>

<p>
	عند تنفيذ الشيفرة أعلاه، سيُطلق الخطأ التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_32" style=""><span class="typ">TypeError</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Can</span><span class="str">'t convert '</span><span class="pln">int</span><span class="str">' object to str implicitly</span></pre>

<p>
	يتعذر علينا ضمّ (concatenate) السلاسل النصية والأعداد الصحيحة في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، لذلك سيتعين علينا تحويل المتغير <code>lines</code> إلى سلسلة نصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_34" style=""><span class="pln">user </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy"</span><span class="pln">

lines </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50</span><span class="pln">

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Congratulations, "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> user </span><span class="pun">+</span><span class="pln"> </span><span class="str">"! You just wrote "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> str</span><span class="pun">(</span><span class="pln">lines</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">" lines of code."</span><span class="pun">)</span></pre>

<p>
	الآن، عندما نُنفِّذ الشيفرة البرمجية، سنحصل على المخرجات التالية، وفيها تهنئة للمستخدم على تقدُّمه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_36" style=""><span class="typ">Congratulations</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Sammy</span><span class="pun">!</span><span class="pln"> </span><span class="typ">You</span><span class="pln"> just wrote </span><span class="lit">50</span><span class="pln"> lines of code</span><span class="pun">.</span></pre>

<p>
	إذا أردنا تحويل عدد عشري إلى سلسلة نصية بدلًا من تحويل عدد صحيح إلى سلسلة نصية، فعلينا تتبع نفس الخطوات والصياغة السابقة. عندما نمرّر عددًا عشريًا إلى التابع <code>str()</code>‎، ستُعاد سلسلة نصية. يمكننا استخدام قيمة العدد العشري نفسها، أو يمكننا استخدام متغير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_38" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">str</span><span class="pun">(</span><span class="lit">421.034</span><span class="pun">))</span><span class="pln">

  

f </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5524.53</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">str</span><span class="pun">(</span><span class="pln">f</span><span class="pun">))</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_40" style=""><span class="lit">421.034</span><span class="pln">

</span><span class="lit">5524.53</span></pre>

<p>
	يمكننا اختبار صحة التحويل عن طريق ضم الناتج إلى سلسلة نصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_42" style=""><span class="pln">f </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5524.53</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy has "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> str</span><span class="pun">(</span><span class="pln">f</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">" points."</span><span class="pun">)</span></pre>

<p>
	وهذا هو الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_44" style=""><span class="typ">Sammy</span><span class="pln"> has </span><span class="lit">5524.53</span><span class="pln"> points</span><span class="pun">.</span></pre>

<p>
	الآن تأكدنا من أنَّ عددنا العشري قد حُوِّل بنجاح إلى سلسلة نصية، لأنّ عملية الضم قد تم إجراؤها دون خطأ.
</p>

<h3 id="تحويل-السلاسل-النصية-إلى-أعداد">
	تحويل السلاسل النصية إلى أعداد
</h3>

<p>
	يمكن تحويل <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> إلى أعداد باستخدام التابعين <code>float()</code>‎ و <code>int()</code>‎.
</p>

<p>
	إذا لم يكن في السلسلة النصية منازل عشرية، فالأفضل أن تحولها إلى عدد صحيح باستخدام التابع <code>int()</code>‎.
</p>

<p>
	دعنا نستخدم مثال تتبع عدد أسطر الشيفرة الذي أوردناه أعلاه. قد ترغب في التعامل مع هذه القيم باستخدام الحسابات الرياضياتية لتقديم نتائج أدق للمستخدم، ولكنّ هذه القيم مخزّنة حاليًا في سلاسل نصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_46" style=""><span class="pln">lines_yesterday </span><span class="pun">=</span><span class="pln"> </span><span class="str">"50"</span><span class="pln">

lines_today </span><span class="pun">=</span><span class="pln"> </span><span class="str">"108"</span><span class="pln">

  

lines_more </span><span class="pun">=</span><span class="pln"> lines_today </span><span class="pun">-</span><span class="pln"> lines_yesterday

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lines_more</span><span class="pun">)</span></pre>

<p>
	الناتج هو:
</p>

<pre class="ipsCode" id="ips_uid_5439_48">TypeError: unsupported operand type(s) for -: 'str' and 'str'</pre>

<p>
	نظرًا لأنّ القيمتين العدديتين مخزنتان في سلاسل نصية، تلقينا خطأً. سبب ذلك أنَّ معامل الطرح <code>-</code> لا يصلح للسلاسل النصية.
</p>

<p>
	دعنا نعدّل الشيفرة لتضمين التابع <code>int()</code>‎ الذي سيحول السلاسل النصية إلى أعداد صحيحة، ويسمح لنا بالقيام بالعمليات الرياضياتية على القيم التي كانت سلاسل نصية في الأصل.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_50" style=""><span class="pln">lines_yesterday </span><span class="pun">=</span><span class="pln"> </span><span class="str">"50"</span><span class="pln">

lines_today </span><span class="pun">=</span><span class="pln"> </span><span class="str">"108"</span><span class="pln">

  

lines_more </span><span class="pun">=</span><span class="pln"> int</span><span class="pun">(</span><span class="pln">lines_today</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> int</span><span class="pun">(</span><span class="pln">lines_yesterday</span><span class="pun">)</span><span class="pln">

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">lines_more</span><span class="pun">)</span></pre>

<p>
	وهذه هي المخرجات:
</p>

<pre class="ipsCode" id="ips_uid_5439_52">58</pre>

<p>
	المتغير <code>line_more</code> هو عدد صحيح تلقائيًّا، ويساوي القيمة العددية <code>58</code> في هذا المثال.
</p>

<p>
	يمكننا أيضًا تحويل الأعداد في المثال أعلاه إلى قيم عشرية باستخدام التابع <code>float()</code>‎ بدلًا من التابع <code>int()</code>‎. وبدلًا من الحصول على الناتج <code>58</code>، سنحصل على الناتج 58.0، وهو عدد عشري.
</p>

<p>
	المستخدم Sammy سيكسب نقاطًا على شكل قيم عشرية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_56" style=""><span class="pln">total_points </span><span class="pun">=</span><span class="pln"> </span><span class="str">"5524.53"</span><span class="pln">

new_points </span><span class="pun">=</span><span class="pln"> </span><span class="str">"45.30"</span><span class="pln">

  

new_total_points </span><span class="pun">=</span><span class="pln"> total_points </span><span class="pun">+</span><span class="pln"> new_points

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">new_total_points</span><span class="pun">)</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode" id="ips_uid_5439_58">5524.5345.30</pre>

<p>
	في هذه الحالة، يعد استخدام المعامل <code>+</code> مع سلسلتين نصيتين عمليةً صالحةً، لكنه سيضم السلسلتين النصّيتين بدلًا من جمع القيمتين العدديتين؛ لذلك، سيبدو الناتج غير اعتيادي، لأنه نتيجة لصق القيمتين إلى جانب بعضهما بعضًا.
</p>

<p>
	سنحتاج إلى تحويل هذه السلاسل النصية إلى أعداد عشرية قبل إجراء أي عمليات عليها، وذلك باستخدام التابع <code>float()</code>‎:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_60" style=""><span class="pln">total_points </span><span class="pun">=</span><span class="pln"> </span><span class="str">"5524.53"</span><span class="pln">

new_points </span><span class="pun">=</span><span class="pln"> </span><span class="str">"45.30"</span><span class="pln">

  

new_total_points </span><span class="pun">=</span><span class="pln"> float</span><span class="pun">(</span><span class="pln">total_points</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> float</span><span class="pun">(</span><span class="pln">new_points</span><span class="pun">)</span><span class="pln">

  

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">new_total_points</span><span class="pun">)</span></pre>

<p>
	وسينتج عن ذلك:
</p>

<pre class="ipsCode" id="ips_uid_5439_62">5569.83</pre>

<p>
	الآن، وبعد أن حوّلنا السلسلتين النصيتين إلى عددين عشريين، سنحصل على النتيجة المتوقعة، والتي هي جمع <code>45.30</code> و <code>5524.53</code>.
</p>

<p>
	إذا حاولنا تحويل سلسلة نصية ذات منازل عشرية إلى عدد صحيح، فسنحصل على خطأ:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_64" style=""><span class="pln">f </span><span class="pun">=</span><span class="pln"> </span><span class="str">"54.23"</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">int</span><span class="pun">(</span><span class="pln">f</span><span class="pun">))</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode" id="ips_uid_5439_66">ValueError: invalid literal for int() with base 10: '54.23'</pre>

<p>
	إذا مرّرنا عددًا عشريًا موضوعًا في سلسلة نصية إلى التابع <code>int()‎</code>، فسنحصل على خطأ، لأنها لن تُحوَّل إلى عدد صحيح.
</p>

<p>
	يتيح لنا تحويل السلاسل النصية إلى أعداد تعديل نوع البيانات الذي نعمل عليه بسرعة حتى نتمكن من إجراء عمليات على قيم عددية مكتوبة على شكل سلاسل نصية.
</p>

<h2 id="التحويل-إلى-صفوف-وقوائم">
	التحويل إلى صفوف وقوائم
</h2>

<p>
	يمكنك استخدام التابعين <code>list()</code>‎ و <code>tuple()‎</code> لتحويل القيم المُمرّرة إليهما إلى <a href="https://wiki.hsoub.com/Python/list" rel="external">قائمة</a> أو <a href="https://wiki.hsoub.com/Python/tuples" rel="external">صف</a> على التوالي. في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>:
</p>

<ul>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/Python/list" rel="external">القائمة</a> هي تسلسل مرتب قابل للتغيير من العناصر الموضوعة داخل قوسين معقوفين <code>[]</code>.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصف</a> عبارة عن تسلسل مرتب ثابت (غير قابل للتغيير) من العناصر الموضوعة بين قوسين <code>()</code>.
		</p>
	</li>
</ul>

<h3 id="التحويل-إلى-صفوف">
	التحويل إلى صفوف
</h3>

<p>
	نظرًا لكون الصفوف غير قابلة للتغيير، فيمكن أن يحسِّن تحويل قائمة إلى صف أداء البرامج تحسينًا كبيرًا. عندما نستخدم التابع <code>tuple()‎</code>، فسوف يُعيد القيمة المُمرَّرة إليه على هيئة صف.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_68" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">tuple</span><span class="pun">([</span><span class="str">'pull request'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'open source'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'repository'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'branch'</span><span class="pun">]))</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_70" style=""><span class="pun">(</span><span class="str">'pull request'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'open source'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'repository'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'branch'</span><span class="pun">)</span></pre>

<p>
	نرى أنّ الصف قد طُبع في المخرجات، إذ أنَّ العناصر موضوعة الآن بين قوسين، بدلًا من القوسين المربعين.
</p>

<p>
	دعنا نستخدم <code>tuple()‎‎</code> مع متغير يحتوي قائمة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_72" style=""><span class="pln">sea_creatures </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">]</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tuple</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">))</span></pre>

<p>
	سينتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_74" style=""><span class="pun">(</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">)</span></pre>

<p>
	مرة أخرى، نرى أنّ القائمة حُوِّلت إلى صف، كما يشير إلى ذلك القوسان. يمكننا تحويل أي نوع قابل للتكرار (iterable) إلى صف، بما في ذلك السلاسل النصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_76" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">tuple</span><span class="pun">(</span><span class="str">'Sammy'</span><span class="pun">))</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_78" style=""><span class="pun">(</span><span class="str">'S'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'m'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'m'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">)</span></pre>

<p>
	نظرًا لأنه يمكننا التكرار (iterate) على السلاسل النصية، يمكننا تحويلها إلى صفوف باستخدام التابع <code>tuple()‎</code>. أمَّا<a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-r1726/" rel=""> أنواع البيانات</a> غير القابلة للتكرار، مثل الأعداد الصحيحة و<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>، فستُطلق عملية تحويلها خطأً:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_80" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">tuple</span><span class="pun">(</span><span class="lit">5000</span><span class="pun">))</span></pre>

<p>
	والناتج سيكون:
</p>

<pre class="ipsCode" id="ips_uid_5439_82">TypeError: 'int' object is not iterable</pre>

<p>
	في حين أنه من الممكن تحويل عدد صحيح إلى سلسلة نصية، ومن ثم تحويل السلسلة النصية إلى صف، كما في العبارة <code>tuple(str(5000))</code>‎، فمن الأفضل تجنب مثل هذه التعليمات البرمجية المعقدة.
</p>

<h3 id="التحويل-إلى-قوائم">
	التحويل إلى قوائم
</h3>

<p>
	يمكن أن يكون تحويل القيم، وخاصة الصفوف، إلى قوائم مفيدًا عندما تحتاج إلى نسخة قابلة للتغيير من تلك القيم.
</p>

<p>
	سنستخدم التابع <code>list()</code>‎ لتحويل الصف التالي إلى قائمة. ونظرًا لأنّ صياغة القوائم تستخدم الأقواس، تأكد من تضمين أقواس التابع <code>list()</code>‎، وكذلك الأقواس الخاصة بالتابع <code>print()</code>‎:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_84" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">list</span><span class="pun">((</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">)))</span></pre>

<p>
	المخرجات هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_86" style=""><span class="pun">[</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">]</span></pre>

<p>
	تشير الأقواس المعقوفة <code>[]</code> إلى أنَّه قد تم إرجاع قائمة من الصف الأصلي الذي مُرِّر عبر التابع <code>list()‎</code>.
</p>

<p>
	لجعل الشيفرة سهلة القراءة، يمكننا إزالة أحد أزواج الأقواس باستخدام متغير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_88" style=""><span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">)</span><span class="pln">

list</span><span class="pun">(</span><span class="pln">coral</span><span class="pun">)</span></pre>

<p>
	إن طبعنا <code>list(coral)‎</code>، فسنتلقى المخرجات نفسها الموجودة أعلاه.
</p>

<p>
	تمامًا مثل الصفوف، يمكن تحويل السلاسل النصية إلى قوائم:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_90" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">list</span><span class="pun">(</span><span class="str">'shark'</span><span class="pun">))</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5439_92" style=""><span class="pun">[</span><span class="str">'s'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'h'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'r'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'k'</span><span class="pun">]</span></pre>

<p>
	هنا حُوِّلَت السلسلة <code>shark</code> إلى قائمة، وهذا يوفر لنا نسخة قابلة للتغيير من القيمة الأصلية.
</p>

<h2 id="خلاصة">
	خلاصة
</h2>

<p>
	لقد وضحنا في هذه المقالة كيفية تحويل العديد من أنواع البيانات الأصلية المهمة إلى أنواع بيانات أخرى، وذلك باستخدام التوابع المُضمّنة. تحويل أنواع البيانات في <a href="%5Bhttps://wiki.hsoub.com/Python%5D(https://wiki.hsoub.com/Python)" rel="">بايثون</a> يوفر لك مرونةً إضافيةً في مشاريعك البرمجية.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="%5Bhttps://www.digitalocean.com/community/tutorials/how-to-convert-data-types-in-python-3%5D(https://www.digitalocean.com/community/tutorials/how-to-convert-data-types-in-python-3)" rel="">How To Convert Data Types in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r729/" rel="">كيفية استخدام المتغيرات</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D8%A2%D9%84%D9%8A%D8%A9-%D9%81%D9%87%D8%B1%D8%B3%D8%A9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D9%82%D8%B3%D9%8A%D9%85%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r417/" rel="">آلية فهرسة السلاسل النصية وطريقة تقسيمها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">728</guid><pubDate>Sat, 24 Aug 2019 13:04:00 +0000</pubDate></item><item><title>&#x622;&#x644;&#x64A;&#x629; &#x641;&#x647;&#x631;&#x633;&#x629; &#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x627;&#x644;&#x646;&#x635;&#x64A;&#x629; &#x648;&#x637;&#x631;&#x64A;&#x642;&#x629; &#x62A;&#x642;&#x633;&#x64A;&#x645;&#x647;&#x627; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D8%A2%D9%84%D9%8A%D8%A9-%D9%81%D9%87%D8%B1%D8%B3%D8%A9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D9%82%D8%B3%D9%8A%D9%85%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r417/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d9406597fa_.jpg.f43c0743f7fbab6010c3f59dfb804d6a.jpg" /></p>

<p>
	<a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">السلاسل النصية</a> في بايثون هي مجموعةٌ مُنشأةٌ من المحارف المنفصلة والتي تُمثِّل الأحرف والأرقام والفراغات والرموز. ولأنَّ السلسلة النصية هي «سلسلة»، فيمكن الوصول إليها كغيرها من أنواع البيانات المتسلسلة، عبر الفهارس والتقسيم.<br>
	سيشرح لك هذا الدرس كيفية الوصول إلى السلاسل النصية بفهارسها، وتقسيمها إلى مجموعات من المحارف، وسيُغطي طرائق إحصاء المحارف وتحديد مواضعها.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30848" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d940417f27_.jpg.aac13cc1381c7c0a0566a0052a3b24fc.jpg" rel=""><img alt="آلية فهرسة السلاسل النصية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30848" data-unique="i9cvu09op" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d94042dc31_.thumb.jpg.8583ee68d9d4774f8e42d4c552ca4027.jpg"></a>
</p>

<h2 id="آلية-فهرسة-السلاسل-النصية">
	آلية فهرسة السلاسل النصية
</h2>

<p>
	وكما في نوع البيانات list الذي فيه عناصر مرتبطة بأرقام، فإنَّ كل محرف في السلسلة النصية يرتبط بفهرس معيّن، بدءًا من الفهرس 0.<br>
	فللسلسلة النصية <code>Sammy Shark!‎</code> ستكون الفهارس والمحارف المرتبطة بها كالآتي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="21311" href="https://academy.hsoub.com/uploads/monthly_2017_02/table-001.png.d78a8842773539e94471f948c65b59e7.png" rel=""><img alt="table-001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21311" data-unique="l9wniq77i" src="https://academy.hsoub.com/uploads/monthly_2017_02/table-001.thumb.png.c92c2399d0eb4b744037f1d6e344359e.png" style=""></a>
</p>

<p>
	وكما لاحظت، سيرتبط المحرف <code>S</code> بالفهرس 0، وستنتهي السلسلة النصية بالفهرس 11 مع الرمز <code>!</code>.<br>
	لاحظ أيضًا أنَّ الفراغ بين كلمتَي <code>Sammy</code> و <code>Shark</code> له فهرسٌ خاصٌ به، وفي مثالنا سيكون له الفهرس 5.<br>
	علامة التعجب (<code>!</code>) لها فهرسٌ خاصٌ بها أيضًا، وأيّة رموز أو علامات ترقيم أخرى مثل <code>*#$&amp;.;?</code> سترتبط بفهرسٍ مخصصٍ لها.<br>
	وحقيقة أنَّ المحارف في بايثون لها فهرسٌ خاصٌ بها ستعني أنَّ بإمكاننا الوصول إلى السلاسل النصية وتعديلها كما نفعل مع أنواع البيانات المتسلسلة الأخرى.
</p>

<h2 id="الوصول-إلى-المحارف-عبر-أرقام-الفهارس-الموجبة">
	الوصول إلى المحارف عبر أرقام الفهارس الموجبة
</h2>

<p>
	يمكننا الحصول على محرف من سلسلة نصية بالإشارة إليه عبر فهرسه. يمكننا فعل ذلك بوضع رقم الفهرس بين قوسين مربعين. سنُعرِّف في المثال الآتي سلسلةً نصيةً ونطبع المحرف المرتبط بالفهرس المذكور بين قوسين مربعين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_8" style="">
<span class="pln">ss </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy Shark!"</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">4</span><span class="pun">])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode" id="ips_uid_8198_9">
y</pre>

<p>
	عندما نُشير إلى فهرسٍ معيّنٍ في سلسلةٍ نصيةٍ، فستُعيد بايثون المحرف الموجود في ذاك الموضع، ولمّا كان المحرف <code>y</code> موجودًا في الفهرس الرابع في السلسلة النصية <code>ss = "Sammy Shark!"‎</code> فعندما طبعنا <code>ss[4]</code> فظهر الحرف <code>y</code>.<br>
	الخلاصة: أرقام الفهارس ستسمح لنا بالوصول إلى محارف معيّنة ضمن سلسلة نصية.
</p>

<h2 id="الوصول-إلى-المحارف-عبر-أرقام-الفهارس-السالبة">
	الوصول إلى المحارف عبر أرقام الفهارس السالبة
</h2>

<p>
	إذا كانت لديك سلسلةٌ طويلةٌ وأردنا تحديد أحد محارفها لكن انطلاقًا من نهايتها، فعندئذٍ نستطيع استخدام الأرقام السالبة للفهارس، بدءًا من الفهرس <code>‎-1</code>.<br>
	لو أردنا أن نستخدم الفهارس السالبة مع السلسلة النصية <code>Sammy Shark!‎</code>، فستبدو كما يلي:
</p>

<p style="text-align: center;">
	<br><a class="ipsAttachLink ipsAttachLink_image" data-fileid="21312" href="https://academy.hsoub.com/uploads/monthly_2017_02/table-002.png.66c6b9cb7810f896b5627b205aaa2dd9.png" rel=""><img alt="table-002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21312" data-unique="9l91w5ppa" src="https://academy.hsoub.com/uploads/monthly_2017_02/table-002.thumb.png.3c6f28403b51ae84e307984e4f88a2cc.png" style=""></a>
</p>

<p>
	<br>
	يمكننا أن نطبع المحرف <code>r</code> في السلسلة السابقة في حال استخدمنا الفهارس السالبة بالإشارة إلى المحرف الموجود في الفهرس <code>‎-3</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_10" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[-</span><span class="lit">3</span><span class="pun">])</span></pre>

<p>
	الخلاصة: يمكننا الاستفادة من الفهارس السالبة لو أردنا الوصول إلى محرف في آخر سلسلة نصية طويلة.
</p>

<h2 id="تقسيم-السلاسل-النصية">
	تقسيم السلاسل النصية
</h2>

<p>
	يمكننا أن نحصل على مجال من المحارف من سلسلة نصية، فلنقل مثلًا أننا نريد أن نطبع الكلمة <code>Shark</code> فقط، يمكننا فعل ذلك بإنشائنا «لقسم» من السلسلة النصية، والذي هو سلسلةٌ من المحارف الموجودة ضمن السلسلة الأصلية. فالأقسام تسمح لنا بالوصول إلى عدِّة محارف دفعةً واحدة باستعمال مجال من أرقام الفهارس مفصولة فيما بينها بنقطتين رأسيتين <code>[x:y]</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_12" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">6</span><span class="pun">:</span><span class="lit">11</span><span class="pun">])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode" id="ips_uid_8198_17">
Shark</pre>

<p>
	عند إنشائنا لقسم مثل <code>[6:11]</code> فسيُمثِّل أوّل رقم مكان بدء القسم (متضمنًا المحرف الموجود عند ذاك الفهرس)، والرقم الثاني هو مكان نهاية القسم (دون تضمين ذاك المحرف)، وهذا هو السبب وراء استخدمنا لرقم فهرس يقع بعد نهاية القسم الذي نريد اقتطاعه في المثال السابق.<br>
	نحن نُنشِئ «سلسلةً نصيةً فرعيةً» (substring) عندما نُقسِّم السلاسل النصية، والتي هي سلسلةٌ موجودةٌ ضمن سلسلةٍ أخرى. وعندما نستخدم التعبير <code>ss[6:11]</code> فنحن نستدعي السلسلة النصية <code>Shark</code> التي تتواجد ضمن السلسلة النصية <code>Sammy Shark!‎</code>.<br>
	إذا أردت تضمين نهاية السلسلة (أو بدايتها) في القسم الذي ستُنشِئه، فيمكننا ألّا نضع أحد أرقام الفهارس في <code>string[n:n]</code>. فمثلًا، نستطيع أن نطبع أوّل كلمة من السلسلة <code>ss</code> –أي Sammy– بكتابة ما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_14" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[:</span><span class="lit">5</span><span class="pun">])</span></pre>

<p>
	فعلنا ذلك بحذف رقم الفهرس قبل النقطتين الرأسيتين، ووضعنا رقم فهرس النهاية فقط، الذي يُشير إلى مكان إيقاف اقتطاع السلسلة النصية الفرعية.<br>
	لطباعة منتصف السلسلة النصية إلى آخرها، فسنضع فهرس البداية فقط قبل النقطتين الرأسيتين، كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_16" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">7</span><span class="pun">:])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_23">
<span class="pln">hark</span><span class="pun">!</span></pre>

<p>
	بكتابة فهرس البداية فقط قبل النقطتين الرأسيتين وترك تحديد الفهرس الثاني، فإنَّ السلسلة الفرعية ستبدأ من الفهرس الأول إلى نهاية السلسلة النصية كلها.<br>
	يمكنك أيضًا استخدام الفهارس السالبة في تقسيم سلسلة نصية، فكما ذكرنا سابقًا، تبدأ أرقام الفهارس السلبية من الرقم ‎-1، ويستمر العد إلى أن نصل إلى بداية السلسلة النصية. وعند استخدام الفهارس السالبة فسنبدأ من الرقم الأصغر لأنه يقع أولًا في السلسلة.<br>
	لنستخدم فهرسين ذوي رقمين سالبين لاقتطاع جزء من السلسلة النصية <code>ss</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_18" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[-</span><span class="lit">4</span><span class="pun">:-</span><span class="lit">1</span><span class="pun">])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_27">
<span class="pln">ark</span></pre>

<p>
	السلسلة النصية «ark» مأخوذة من السلسلة النصية «Sammy Shark!‎» لأنَّ الحرف «a» يقع في الموضع <code>‎-4</code> والمحرف <code>k</code> يقع قبل الفهرس <code>‎-1</code> مباشرةً.
</p>

<h2 id="تحديد-الخطوة-عند-تقسيم-السلاسل-النصية">
	تحديد الخطوة عند تقسيم السلاسل النصية
</h2>

<p>
	يمكن تمرير معامل ثالث عند تقسيم السلاسل النصية إضافةً إلى فهرسَي البداية والنهاية، وهو الخطوة، التي تُشير إلى عدد المحارف التي يجب تجاوزها بعد الحصول على المحرف من السلسلة النصية.<br>
	لم نُحدِّد إلى الآن الخطوة في أمثلتنا، إلا أنَّ قيمته الافتراضية هي 1، لذا سنحصل على كل محرف يقع بين الفهرسين.<br>
	لننظر مرةً أخرى إلى المثال السابق الذي يطبع السلسلة النصية الفرعية «Shark»:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_20" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">6</span><span class="pun">:</span><span class="lit">11</span><span class="pun">])</span><span class="pln">
</span><span class="typ">Shark</span></pre>

<p>
	سنحصل على نفس النتائج بتضمين معامل ثالث هو الخطوة وقيمته 1:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_22" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">6</span><span class="pun">:</span><span class="lit">11</span><span class="pun">:</span><span class="lit">1</span><span class="pun">])</span><span class="pln">
</span><span class="typ">Shark</span></pre>

<p>
	إذًا، إذا كانت الخطوة 1 فهذا يعني أنَّ بايثون ستُضمِّن جميع المحارف بين فهرسين، وإذا حذفتَ الخطوة فستعتبرها بايثون مساويةً للواحد.<br>
	أما لو زدنا الخطوة، فسنرى أنَّ بعض المحارف ستهمل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_24" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">12</span><span class="pun">:</span><span class="lit">2</span><span class="pun">])</span><span class="pln">
</span><span class="typ">SmySak</span></pre>

<p>
	تحديد الخطوة بقيمة 2 كما في <code>ss[0:12:2]</code> سيؤدي إلى تجاوز حرف بين كل حرفين، ألقِ نظرةً على المحارف المكتوبة بخطٍ عريضٍ:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_35">
<span class="typ">Sammy</span><span class="pln"> </span><span class="typ">Shark</span><span class="pun">!</span></pre>

<p>
	لاحظ أنَّ الفراغ الموجود في الفهرس 5 قد أُهمِل أيضًا عندما كانت الخطوة 2.<br>
	إذا وضعنا قيمةً أكبر للخطوة، فسنحصل على سلسلةٍ نصيةٍ فرعيةٍ أصغر بكثير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_26" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">12</span><span class="pun">:</span><span class="lit">4</span><span class="pun">])</span><span class="pln">
</span><span class="typ">Sya</span></pre>

<p>
	حذف الفهرسين وترك النقطتين الرأسيتين سيؤدي إلى إبقاء كامل السلسلة ضمن المجال، لكن إضافة معامل ثالث وهو الخطوة سيُحدِّد عدد المحارف التي سيتم تخطيها.<br>
	إضافةً إلى ذلك، يمكنك تحديد رقم سالب كخطوة، مما يمكِّنك من كتابة السلسلة النصية بترتيبٍ معكوس إذا استعملتَ القيمة <code>‎-1</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_28" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[::-</span><span class="lit">1</span><span class="pun">])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_41">
<span class="pun">!</span><span class="pln">krahS ymmaS</span></pre>

<p>
	لنجرِّب ذلك مرةً أخرى لكن إذا كانت الخطوة ‎-2:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_30" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">[::-</span><span class="lit">2</span><span class="pun">])</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_45">
<span class="pun">!</span><span class="pln">rh ma</span></pre>

<p>
	في المثال السابق (<code>ss[::-2]</code>)، سنتعامل مع كامل السلسلة النصية لعدم وجود أرقام لفهارس البداية والنهاية، وسيتم قلب اتجاه السلسلة النصية لاستخدامنا لخطوةٍ سالبة. بالإضافة إلى أنَّ الخطوة ‎-2 ستؤدي إلى تخطي حرف بين كل حرفين بترتيبٍ معكوس:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8198_47">
<span class="pun">!</span><span class="pln">krahS</span><span class="pun">[</span><span class="pln">whitespace</span><span class="pun">]</span><span class="pln">ymmaS</span></pre>

<p>
	سيُطبَع الفراغ في المثال السابق.<br>
	الخلاصة: تحديد المعامل الثالث عند تقسيم السلاسل النصية سيؤدي إلى تحديد الخطوة التي تُمثِّل عدد المحارف التي سيتم تخطيها عند الحصول على السلسلة الفرعية من السلسلة الأصلية.
</p>

<h2 id="دوال-الإحصاء">
	دوال الإحصاء
</h2>

<p>
	بعد أن تعرفنا على آلية فهرسة المحارف في السلاسل النصية، حان الوقت لمعاينة بعض الدوال التي تُحصي السلاسل النصية أو تعيد أرقام الفهارس. يمكننا أن نستفيد من ذلك بتحديد عدد المحارف التي نريد استقبالها من مدخلات المستخدم، أو لمقارنة السلاسل النصية. ولدى السلاسل النصية –كغيرها من أنواع البيانات– عدِّة دوال تُستخدم للإحصاء.<br>
	لننظر أولًا إلى الدالة <code>len()‎</code> التي تُعيد طول أيّ نوع متسلسل من البيانات، بما في ذلك string و lists و tuples و dictionaries.<br>
	لنطبع طول السلسلة النصية <code>ss</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_32" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">len</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">))</span><span class="pln">
</span><span class="lit">12</span></pre>

<p>
	طول السلسلة النصية «Sammy Shark!‎» هو 12 محرفًا، بما في ذلك الفراغ وعلامة التعجب.<br>
	بدلًا من استخدام متغير، فلنحاول مباشرةً تمرير سلسلة نصية إلى الدالة <code>len()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_34" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">len</span><span class="pun">(</span><span class="str">"Let's print the length of this string."</span><span class="pun">))</span><span class="pln">
</span><span class="lit">38</span></pre>

<p>
	الدالة <code>len()‎</code> تُحصي العدد الإجمالي من المحارف في سلسلة نصية.<br>
	إذا أردنا إحصاء عدد مرات تكرار محرف أو مجموعة من المحارف في سلسلة نصية، فيمكننا استخدام الدالة <code>str.count()‎</code>، لنحاول إحصاء الحرف «a» في السلسلة النصية <code>ss = "Sammy Shark!"‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_36" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="str">"a"</span><span class="pun">))</span><span class="pln">
</span><span class="lit">2</span></pre>

<p>
	يمكننا البحث عن محرفٍ آخر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_38" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="str">"s"</span><span class="pun">))</span><span class="pln">
</span><span class="lit">0</span></pre>

<p>
	صحيحٌ أنَّ الحرف «S» قد ورد في السلسلة النصية، إلا أنَّه من الضروري أن تبقي بذهنك أنَّ بايثون حساسةٌ لحالة الأحرف، فلو أردنا البحث عن حروفٍ معيّنة بغض النظر عن حالتها، فعلينا حينها استخدام الدالة <code>str.lower()‎</code> لتحويل حروف السلسلة النصية إلى حروفٍ صغيرة أولًا. يمكنك قراءة المزيد من المعلومات عن دالة <code>str.lower()‎</code> في درس «<a href="https://academy.hsoub.com/programming/python/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r412/" rel="">مقدمة إلى دوال التعامل مع السلاسل النصية في بايثون 3</a>»<br>
	لنحاول استخدام الدالة <code>str.count()‎</code> مع سلسلة من المحارف:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_40" style="">
<span class="pln">likes </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">likes</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="str">"likes"</span><span class="pun">))</span></pre>

<p>
	الناتج هو <code>3</code>، حيث تتواجد مجموعة المحارف «likes» ثلاث مرات في السلسلة النصية الأصلية.<br>
	يمكننا أيضًا معرفة موقع الحرف أو مجموعة الحروف في السلسلة النصية، وذلك عبر الدالة <code>str.find()‎</code>، وسيُعاد موضع المحرف بناءً على رقم فهرسه.<br>
	يمكننا أن نعرف متى يقع أوّل حرف «m» في السلسلة النصية <code>ss</code> كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_42" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"m"</span><span class="pun">))</span><span class="pln">
</span><span class="lit">2</span></pre>

<p>
	أوّل مرة يقع فيها الحرف «m» في الفهرس 2 من السلسلة «Sammy Shark!‎»، يمكنك أن تراجع بداية هذا الدرس لرؤية جدول يبيّن ارتباطات المحارف مع فهارسها في السلسلة السابقة.<br>
	لنرى الآن مكان أوّل ظهور لمجموعة المحارف «likes» في السلسلة <code>likes</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_44" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">likes</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"likes"</span><span class="pun">))</span><span class="pln">
</span><span class="lit">6</span></pre>

<p>
	أوّل مرة تظهر فيها السلسلة «likes» هي في الفهرس 6، أي مكان وجود الحرف <code>l</code> من <code>likes</code>.<br>
	ماذا لو أردنا أن نعرف موضع ثاني تكرار للكلمة «likes»؟ نستطيع فعل ذلك بتمرير معاملٍ ثانٍ إلى الدالة <code>str.find()‎</code> الذي سيجعلها تبدأ بحثها من ذاك الفهرس، فبدلًا من البحث من أوّل السلسلة النصية سنبحث انطلاقًا من الفهرس 9:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_46" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">likes</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"likes"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9</span><span class="pun">))</span><span class="pln">
</span><span class="lit">34</span></pre>

<p>
	بدأ البحث في هذا المثال من الفهرس 9، وكانت أوّل مطابقة للسلسلة النصية «likes» عند الفهرس 34.<br>
	إضافةً إلى ذلك، يمكننا تحديد نهاية إلى مجال البحث بتمرير معامل ثالث. وكما عند تقسيم السلاسل النصية، يمكننا استخدام أرقام الفهارس السالبة للعد عكسيًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4131_48" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">likes</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"likes"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">6</span><span class="pun">))</span><span class="pln">
</span><span class="lit">64</span></pre>

<p>
	يبحث آخر مثال عن موضع السلسلة النصية «likes» بين الفهرس 40 و ‎-6، ولمّا كان المعامل الأخير هو رقم سالب، فسيبدأ العد من نهاية السلسلة الأصلية.<br>
	دوال الإحصاء مثل <code>len()‎</code> و <code>str.count()‎</code> و <code>str.find()‎</code> مفيدةٌ في تحديد طول السلسلة النصية وعدد حروفها وفهارس ورود محارف معيّنة فيها.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	ستمنحنا القدرة على تحديد محارف بفهارسها أو تقسيم سلسلة نصية أو البحث فيها مرونةً عاليةً عند التعامل مع السلاسل النصية. ولأنَّ السلاسل النصية هي نوعٌ من أنواع البيانات المتسلسلة (كنوع البيانات <code>list</code>)، فيمكننا الوصول إلى عناصرها عبر فهارس خاصة.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3" rel="external nofollow">How To Index and Slice Strings in Python 3</a> لصاحبته Lisa Tagliaferri.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A8%D9%8A%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r728/" rel="">كيفية التحويل بين أنواع البيانات</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r412/" rel="">مقدمة إلى دوال التعامل مع السلاسل النصية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">417</guid><pubDate>Tue, 20 Aug 2019 13:08:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x62F;&#x648;&#x627;&#x644; &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x627;&#x644;&#x646;&#x635;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r412/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d928350668_.jpg.b9286368333830aef5734c126dd87467.jpg" /></p>

<p>
	لدى بايثون عدِّة دوال مبنية فيها للتعامل مع <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">السلاسل النصية</a>. تسمح هذه الدوال لنا بتعديل وإجراء عمليات على السلاسل النصية بسهولة. يمكنك أن تتخيل الدوال على أنها «أفعال» يمكننا تنفيذها على عناصر موجودة في الشيفرة. الدوال المبنية في اللغة هي الدوال المُعرَّفة داخل لغة بايثون وهي جاهزة مباشرةً للاستخدام.<br>
	سنشرح في هذا الدرس مختلف الدوال التي نستطيع استخدامها للتعامل مع السلاسل النصية في بايثون 3.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30847" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d9280e53d5_.jpg.d8273ae3343d39702ee453c4f18835e6.jpg" rel=""><img alt="مقدمة إلى دوال التعامل مع السلاسل النصية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30847" data-unique="csjlp6frl" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d928106dd0_.thumb.jpg.05ab5e2716e4c8745a2e24eb3a05c145.jpg"></a>
</p>

<p style="text-align: center;">
	 
</p>

<h2 id="جعل-السلاسل-النصية-بأحرف-كبيرة-أو-صغيرة">
	جعل السلاسل النصية بأحرف كبيرة أو صغيرة
</h2>

<p>
	الدالتان <code>str.upper()‎</code> و <code>str.lower()‎</code> ستُعيدان السلسلة النصية بعد تحويل حالة جميع أحرفها الأصلية إلى الأحرف الكبيرة أو الصغيرة (على التوالي وبالترتيب). ولعدم قدرتنا على تعديل السلسلة النصية بعد إنشائها، فستُعاد سلسلةٌ نصيةٌ جديدةٌ. لن تُعدَّل أيّة محارف غير لاتينية في السلسلة النصية الأصلية وستبقى على حالها.<br>
	لنحوِّل السلسلة النصية <code>Sammy Shark</code> إلى أحرفٍ كبيرة:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7523_7">
<span class="pln">ss </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy Shark"</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">.</span><span class="pln">upper</span><span class="pun">())</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7523_9">
<span class="pln">SAMMY SHARK</span></pre>

<p>
	لنحوِّلها الآن إلى أحرفٍ صغيرة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_8" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">ss</span><span class="pun">.</span><span class="pln">lower</span><span class="pun">())</span></pre>

<p>
	وسينتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7523_13">
<span class="pln">sammy shark</span></pre>

<p>
	ستُسهِّل الدالتان <code>str.upper()‎</code> و <code>str.lower()‎</code> عملية التحقق من مساواة سلسلتين نصيتين لبعضهما أو لمقارنتهما وذلك عبر توحيد حالة الأحرف. فلو كتب المستخدم اسمه بأحرفٍ صغيرةٍ فسنستطيع أن نتأكد إن كان مُسجَّلًا في قاعدة البيانات بمقارنته بعد تحويل حالة أحرفه.
</p>

<h2 id="الدوال-المنطقية">
	الدوال المنطقية
</h2>

<p>
	تتوفر في بايثون عدِّة دوال التي ستتحقق من القيم المنطقية (Boolean). هذه الدوال مفيدةٌ عند إنشائنا للنماذج التي يجب على المستخدمين ملأها؛ فمثلًا، إذا سألنا المستخدم عن الرمز البريدي وأردنا أن نقبل السلاسل النصية التي تحتوي أرقامًا فقط، أو عندما نسأله عن اسمه فسنقبل سلسلةً نصيةً تحتوي حروفًا فقط.<br>
	هنالك عددٌ من الدوال التي تُعيد قيمًا منطقيةً:
</p>

<ul>
<li>
		<code>str.isalnum()‎</code>: تُعيد <code>true</code> إذا احتوت السلسلة النصية على أرقام وأحرف فقط (دون رموز).
	</li>
	<li>
		<code>str.isalpha()‎</code>: تُعيد <code>true</code> إذا احتوت السلسلة النصية على أحرف فقط (دون أرقام أو رموز).
	</li>
	<li>
		<code>str.islower()‎</code>: تُعيد <code>true</code> إذا كانت جميع أحرف السلسلة النصية صغيرة.
	</li>
	<li>
		<code>str.isnumeric()‎</code>: تُعيد <code>true</code> إذا احتوت السلسلة النصية على أرقام فقط.
	</li>
	<li>
		<code>str.isspace()‎</code>: تُعيد <code>true</code> إذا لم تحتوي السلسلة النصية إلا على الفراغات.
	</li>
	<li>
		<code>str.istitle()‎</code>: تُعيد <code>true</code> إذا كانت حالة أحرف السلسلة النصية كما لو أنها عنوان (أي أنَّ أوّل حرف من كل كلمة كبير، والبقية صغيرة).
	</li>
	<li>
		<code>str.isupper()‎</code>: تُعيد <code>true</code> إذا كانت جميع أحرف السلسلة النصية كبيرة.
	</li>
</ul>
<p>
	لننظر إلى بعضها عمليًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_10" style="">
<span class="pln">number </span><span class="pun">=</span><span class="pln"> </span><span class="str">"5"</span><span class="pln">
letters </span><span class="pun">=</span><span class="pln"> </span><span class="str">"abcdef"</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">number</span><span class="pun">.</span><span class="pln">isnumeric</span><span class="pun">())</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">letters</span><span class="pun">.</span><span class="pln">isnumeric</span><span class="pun">())</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7523_17">
<span class="typ">True</span><span class="pln">
</span><span class="typ">False</span></pre>

<p>
	استخدام الدالة <code>str.isnumeric()‎</code> على السلسلة النصية <code>5</code> سيُعيد القيمة <code>True</code>، بينما استخدام نفس الدالة على السلسلة النصية <code>abcdef</code> سيُعيد <code>False</code>.<br>
	وبشكلٍ مماثل، يمكننا معرفة إن كانت حالة الأحرف في سلسلةٍ نصيةٍ كما لو أنها عنوان، أو أنها كبيرة أو صغيرة. لنُنشِئ بدايةً بعض السلاسل النصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_12" style="">
<span class="pln">movie </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2001: A SAMMY ODYSSEY"</span><span class="pln">
book </span><span class="pun">=</span><span class="pln"> </span><span class="str">"A Thousand Splendid Sharks"</span><span class="pln">
poem </span><span class="pun">=</span><span class="pln"> </span><span class="str">"sammy lived in a pretty how town"</span></pre>

<p>
	لنجرّب الدوال المنطقية لمعرفة الناتج (سنعرض كل دالتين وناتجهما تحتهما):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_14" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">movie</span><span class="pun">.</span><span class="pln">islower</span><span class="pun">())</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">movie</span><span class="pun">.</span><span class="pln">isupper</span><span class="pun">())</span><span class="pln">

</span><span class="kwd">False</span><span class="pln">
</span><span class="kwd">True</span></pre>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_16" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">book</span><span class="pun">.</span><span class="pln">istitle</span><span class="pun">())</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">book</span><span class="pun">.</span><span class="pln">isupper</span><span class="pun">())</span><span class="pln">

</span><span class="kwd">True</span><span class="pln">
</span><span class="kwd">False</span></pre>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_18" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">poem</span><span class="pun">.</span><span class="pln">istitle</span><span class="pun">())</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">poem</span><span class="pun">.</span><span class="pln">islower</span><span class="pun">())</span><span class="pln">

</span><span class="kwd">False</span><span class="pln">
</span><span class="kwd">True</span></pre>

<p>
	ستساعدنا معرفة إن كانت أحرف السلسلة النصية بحالة صغيرة أو كبيرة أو كأنها عنوان في تصنيف البيانات تصنيفًا سليمًا، وتوفِّر لنا الفرصة لتوحيد طريقة تخزين البيانات بالتحقق من حالة أحرفها ثم تعديلها وفقًا لذلك.<br>
	الدوال المنطقية التي تعمل على السلاسل النصية مفيدةٌ أيضًا عندما نريد التحقق إن حقَّقَت مدخلات المستخدم شروطًا معيّنة.
</p>

<h2 id="الدوال-join-و-split-و-replace">
	الدوال join()‎ و split()‎ و replace()‎
</h2>

<p>
	توفِّر الدوال <code>str.join()‎</code> و <code>str.split()‎</code> و <code>str.replace()‎</code> إمكانياتٍ إضافيةً لتعديل السلاسل النصية في بايثون.<br>
	الدالة <code>str.join()‎</code> تجمع سلسلتين نصيتين مع بعضهما، لكنها تفعل ذلك بتمرير إحداها إلى الأخرى. لنُنشِئ سلسلةً نصيةً:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_20" style="">
<span class="pln">balloon </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy has a balloon."</span></pre>

<p>
	لنستخدم الآن الدالة <code>str.join()‎</code> لإضافة فراغات إلى تلك السلسلة النصية كالآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_22" style="">
<span class="str">" "</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">)</span></pre>

<p>
	إذا طبعنا الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_24" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">" "</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">))</span></pre>

<p>
	فسنجد أنَّ السلسلة النصية الجديدة هي السلسلة الأولى لكن بين كل حرفين فراغ:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7523_31">
<span class="pln">S a m m y   h a s   a   b a l l o o n </span><span class="pun">.</span></pre>

<p>
	يمكننا أيضًا استخدام الدالة <code>str.join()‎</code> لإنشاء مقلوب سلسلة نصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_27" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">""</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">reversed</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">)))</span><span class="pln">
</span><span class="pun">.</span><span class="pln">noollab a sah ymmaS</span></pre>

<p>
	لم نرغب في إضافة أيّة سلسلة نصية إلى أخرى، لذا أبقينا على السلسلة النصية فارغةً دون محتوى داخلها.<br>
	الدالة <code>str.join()‎</code> مفيدةٌ أيضًا لجمع قائمة (list) من السلاسل النصية وإخراجها إلى سلسلةٍ وحيدة.<br>
	لنُنشِئ سلسلة نصية يُفصَل بين كلماتها بفاصلة من القائمة الآتية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_29" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">","</span><span class="pun">.</span><span class="pln">join</span><span class="pun">([</span><span class="str">"sharks"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"crustaceans"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"plankton"</span><span class="pun">]))</span><span class="pln">
sharks</span><span class="pun">,</span><span class="pln">crustaceans</span><span class="pun">,</span><span class="pln">plankton</span></pre>

<p>
	إذا أردتَ وضع فاصلة ثم فراغ بين القيم في المثال السابق، فيمكنك أن تُعيد كتابة التعبير البرمجي السابق لإضافة فراغ بعد الفاصلة كما يلي: <code>", ".join(["sharks", "crustaceans", "plankton"])</code>.<br>
	وكما نستطيع جمع السلاسل النصية مع بعضها بعضًا، نستطيع أيضًا تجزئتها، وذلك عبر الدالة <code>str.split()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_31" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">.</span><span class="pln">split</span><span class="pun">())</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Sammy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'has'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'balloon.'</span><span class="pun">]</span></pre>

<p>
	الدالة <code>str.split()‎</code> ستُعيد قائمة (list) تحتوي سلاسل نصية كانت مفصولةً بالفراغات في السلسلة النصية الأصلية إذا لم يُمرَّر معاملٌ لتحديد محرف الفصل.<br>
	يمكنك أيضًا استخدام الدالة <code>str.split()‎</code> لحذف أجزاء معيّنة من السلسلة النصية الأصلية، فلنحاول مثلًا حذف الحرف <code>a</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_33" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="str">"a"</span><span class="pun">))</span><span class="pln">
</span><span class="pun">[</span><span class="str">'S'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mmy h'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'s '</span><span class="pun">,</span><span class="pln"> </span><span class="str">' b'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'lloon.'</span><span class="pun">]</span></pre>

<p>
	حُذِفَ الحرف <code>a</code> من السلسلة النصية وأصبح الناتج مقسومًا عند كل ورود للحرف <code>a</code> مع الإبقاء على الفراغات.<br>
	تأخذ الدالة <code>str.replace()‎</code> سلسلةً نصيةً وتُعيد نسخةً محدَّثةً منها بعد إجراء بعض عمليات الاستبدال عليها.<br>
	لنفترض أنَّ البالون الذي يملكه سامي قد ضاع، ولعدم امتلاك سامي للبالون في الوقت الراهن، فسنُبدِّل الكلمة <code>"has"</code> إلى <code>"had"</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1073_35" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">balloon</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">"has"</span><span class="pun">,</span><span class="str">"had"</span><span class="pun">))</span></pre>

<p>
	أوّل سلسلة نصية داخل أقواس الدالة <code>replace()‎</code> هي السلسلة النصية التي نريد استبدالها، والسلسلة النصية الثانية هي السلسلة التي نريد وضعها بدلًا من الأولى. ناتج تنفيذ السطر السابق هو:
</p>

<pre class="ipsCode" id="ips_uid_1073_37">
Sammy had a balloon.</pre>

<p>
	استخدام دوال تعديل السلاسل النصية مثل <code>str.join()‎</code> و <code>str.split()‎</code> و <code>str.replace</code> سيمنحك تحكمًا كبيرًا بمعالجة السلاسل النصية في بايثون.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	لقد تعلمنا في هذا الدرس بعض الدوال المُضمَّنة في لغة بايثون لمعالجة النصوص والتعامل معها ومعرفة بعض خصائصها.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-string-methods-in-python-3" rel="external nofollow">An Introduction to String Methods in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/programming/python/%D8%A2%D9%84%D9%8A%D8%A9-%D9%81%D9%87%D8%B1%D8%B3%D8%A9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D9%82%D8%B3%D9%8A%D9%85%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r417/" rel="">آلية فهرسة السلاسل النصية وطريقة تقسيمها</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r409/" rel="">كيفية تنسيق النصوص</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">412</guid><pubDate>Fri, 16 Aug 2019 18:05:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x646;&#x635;&#x648;&#x635; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r409/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d90389cce1_.jpg.22607f91140cfacc9d2e69e8e2c71961.jpg" /></p>
<p>
	تتألف <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">السلاسل النصية</a> عادةً من النص المكتوب، وهنالك عدِّة حالات نحتاج فيها إلى تحكمٍ أكبر بكيفية إظهار النص وجعلها أسهل قراءةً للبشر عبر وضع علامات الترقيم والسطور الجديدة والمحاذاة.<br>
	سنشرح في هذا الدرس كيفية التعامل مع السلاسل النصية في بايثون لكي يظهر النص الناتج بتنسيقٍ صحيح.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30846" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d903a70dc6_.jpg.854ef2616b4734590531645a6dc268dc.jpg" rel="" data-fileext="jpg"><img alt="كيفية تنسيق النصوص.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30846" data-unique="h2i6h0dsb" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d903a86445_.thumb.jpg.2c3562d947e2f6b7902f5d205e5b5bc3.jpg"></a>
</p>

<h2 id="القيم-الحرفية">
	القيم الحرفية
</h2>

<p>
	لنفرِّق أولًا بين القيم الحرفية للسلاسل النصية (string literal) والسلاسل النصية نفسها (string value)، فالقيم الحرفية هي ما نراه في الشيفرة المصدرية للبرنامج، بما في ذلك علامتَي الاقتباس. أما السلسلة النصية نفسها فهي ما نراها عندما نستدعي الدالة <code>print()‎</code> عند تشغيل البرنامج.<br>
	ففي برنامج «Hello, World!‎» التقليدي، تكون القيمة الحرفية هي <code>"Hello, World!‎"</code> بينما السلسلة النصية هي <code>Hello, World!‎</code> دون علامتَي الاقتباس. أي أنَّ السلسلة النصية هي ما نراه في نافذة الطرفية عندما نُشغِّل برنامج بايثون.<br>
	لكن بعض السلاسل النصية قد تحتوي على علامات اقتباس، مثل اقتباسنا لمقولةٍ ما. ولأنَّ القيم الحرفية والقيم الفعلية للسلاسل النصية غير متساوية، فمن الضروري في أغلب الحالات إضافة تنسيق إلى القيم الحرفية لعرض السلاسل النصية كما ينبغي.
</p>

<h2 id="علامات-الاقتباس">
	علامات الاقتباس
</h2>

<p>
	بسبب إمكانيتنا استخدام علامات الاقتباس المفردة أو المزدوجة في بايثون، فمن السهل تضمين الاقتباسات بوضعها بين علامتَي اقتباس مزدوجتين في سلسلةٍ نصيةٍ محاطةٍ بعلامتَي اقتباس مفردتين كما في السلسلة الآتية:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_9"><span class="str">'Sammy says, "Hello!"'</span></pre>

<p>
	أو يمكننا استخدام علامة اقتباس فردية (أو كما يسمونها «فاصلة عليا» [apostrophe]) في سلسلةٍ نصيةٍ محاطةٍ بعلامتَي اقتباس مزدوجتين:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_11"><span class="str">"Sammy's balloon is red."</span></pre>

<p>
	إذًا، يمكننا التحكم بطريقة عرض علامات الاقتباس والفواصل العليا في سلاسلنا النصية عبر استخدام النوع الصحيح من علامات الاقتباس لإحاطة كامل السلسلة النصية.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h2 id="كتابة-النص-على-أكثر-من-سطر">
	كتابة النص على أكثر من سطر
</h2>

<p>
	طباعة السلاسل النصية على أكثر من سطر ستجعل منها واضحةً وسهلة القراءة. إذ يمكن تجميع النصوص المكتوبة بعدِّة أسطر لزيادة وضوحها، أو لتنسيقها كرسالة، أو للحفاظ على تعدد الأسطر في الأشعار.<br>
	نستخدم ثلاث علامات اقتباس فردية <code>'''</code> أو ثلاث علامات اقتباس مزدوجة <code>"""</code> للإحاطة بالسلسلة النصية التي تمتد على أكثر من سطر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6699_7" style=""><span class="str">'''
This string is on 
multiple lines
within three single 
quotes on either side.
'''</span></pre>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6699_9" style=""><span class="str">"""
This string is on 
multiple lines
within three double 
quotes on either side.
"""</span></pre>

<p>
	يمكنك الآن طباعة السلاسل النصية في عدِّة أسطر لجعل النصوص سهلة القراءة –خصوصًا الطويلة منها– وذلك عبر استخدام ثلاث علامات اقتباس متتالية.
</p>

<h2 id="تهريب-المحارف">
	«تهريب» المحارف
</h2>

<p>
	طريقة أخرى لتنسيق السلاسل النصية هي استخدام «محرف التهريب» (escape character). فجميع عمليات تهريب المحارف تبدأ بالخط المائل الخلفي (backslash، أي <code>\</code>) متبوعًا بمحرفٍ آخر الذي له معنى خاص يفيد في تنسيق السلسلة النصية.<br>
	هذه قائمة بأكثر محارف التهريب شيوعًا:
</p>

<ul>
	<li>
		<code>\</code>: سطرٌ جديدٌ في سلسلةٍ نصيةٍ متألفةٍ من عدِّة أسطر.
	</li>
	<li>
		<code>\\</code>: طباعة رمز الخط المائل الخلفي.
	</li>
	<li>
		<code>‎\'‎</code>: طباعة علامة اقتباس فردية.
	</li>
	<li>
		<code>‎\"‎</code>: طباعة علامة اقتباس مزدوجة.
	</li>
	<li>
		<code>‎\‎n‎</code>: طباعة محرف الانتقال إلى سطرٍ جديد.
	</li>
	<li>
		<code>‎\t</code>: طباعة محرف الجدولة (Tab).
	</li>
</ul>

<p>
	لنستخدم محرف التهريب لإضافة علامات الاقتباس إلى سلسلتنا النصية السابقة، لكن هذه المرة سنُحيط السلسلة النصية بعلامتَي اقتباس مزدوجتين:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_17"><span class="pln">print</span><span class="pun">(</span><span class="str">"Sammy says, \"Hello!\""</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Sammy</span><span class="pln"> says</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Hello!"</span></pre>

<p>
	تمكننا عبر محرف التهريب <code>‎\"‎</code> من استخدام علامات الاقتباس المزدوجة للإحاطة بالسلسلة النصية التي تحتوي على نصٍ مقتبسٍ ومحاطٍ بعلامتَي اقتباس مزدوجتين.<br>
	نستطيع أيضًا استخدام محرف التهريب <code>‎\'‎</code> لإضافة علامة اقتباس مفردة ضمن السلسلة النصية المحاطة بعلامتَي اقتباس مفردتين:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_19"><span class="pln">print</span><span class="pun">(</span><span class="str">'Sammy\'s balloon is red.'</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Sammy</span><span class="str">'s balloon is red.</span></pre>

<p>
	ولأننا نستخدم الآن محرف التهريب فنستطيع وضع علامات الاقتباس المفردة حتى لو كانت السلسلة النصية كلها موجودة بين علامتَي اقتباس مفردتين.<br>
	عندما نستخدم علامات الاقتباس الثلاثية –كما فعلنا أعلاه– فسنجد فراغًا في أعلى وأسفل النص عند طباعته. نستطيع حذف تلك الفراغات عبر استخدام محرف التهريب <code>\</code> في بداية ونهاية السلسلة النصية مع الإبقاء على النص مقروءًا بسهولة في الشيفرة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6699_11" style=""><span class="str">"""\
This multi-line string
has no space at the
top or the bottom
when it prints.\
"""</span></pre>

<p>
	وبشكلٍ شبيهٍ بما سبق، يمكننا استخدام محرف التهريب <code>‎\n</code> لوضع أسطر جديدة دون الحاجة إلى الضغط على زر Enter أو Return:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_23"><span class="pln">print</span><span class="pun">(</span><span class="str">"This string\nspans multiple\nlines."</span><span class="pun">)</span><span class="pln">
</span><span class="typ">This</span><span class="pln"> string
spans multiple
lines</span><span class="pun">.</span></pre>

<p>
	يمكننا الدمج بين محارف التهريب، إذ سنطبع في المثال الآتي سلسلةً نصيةً على أكثر من سطر، ونستعمل فيها مسافة جدولة (tab) بين الترقيم ومحتوى السطر:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_25"><span class="pln">print</span><span class="pun">(</span><span class="str">"1.\tShark\n2.\tShrimp\n10.\tSquid"</span><span class="pun">)</span><span class="pln">
</span><span class="lit">1.</span><span class="pln">      </span><span class="typ">Shark</span><span class="pln">
</span><span class="lit">2.</span><span class="pln">      </span><span class="typ">Shrimp</span><span class="pln">
</span><span class="lit">10.</span><span class="pln">     </span><span class="typ">Squid</span></pre>

<p>
	علامة الجدولة الأفقية التي وضعناها عبر محرف التهريب <code>‎\t</code> ستؤدي إلى محاذاة الكتابة في العمود النصي الثاني في المثال أعلاه، مما يجعل قراءتها سهلةً جدًا.<br>
	وصحيحٌ أنَّ محرف التهريب <code>‎\n</code> يعمل عملًا جيدًا في النصوص القصير، لكن لا نُغفِل أهمية أن تكون الشيفرة المصدرية مقروءةً بسهولةٍ أيضًا. فلو كان النص طويلًا، فأرى أنَّ من الأفضل استخدام علامات الاقتباس الثلاثية.<br>
	رأينا أنَّ محارف التهريب تُستعمَل لإضافة تنسيق إلى السلاسل التي كان من الصعب (أو حتى المستحيل) عرضها عرضًا سليمًا دونها. فهل تستطيع مثلًا أن تطبع السلسلة النصية الآتية دون استخدام محارف التهريب <code>Sammy says, "The balloon's color is red.‎"‎</code>؟
</p>

<h2 id="السلاسل-النصية-الخام">
	السلاسل النصية «الخام»
</h2>

<p>
	ماذا لو أردنا تجاهل كل محارف التنسيق الخاصة في سلاسلنا النصية؟ فلربما أردنا مقارنة أو التحقق من صحة بعض الشيفرات الحاسوبية التي تستخدم الخط المائل الخلفي، ولا نريد من بايثون تفسيره على أنها محرف تهريب.<br>
	أتت «السلاسل النصية الخام» (raw strings) في بايثون لتحل هذه المشكلة، وتتجاهل جميع محارف التنسيق داخل سلسلة نصية، بما في ذلك محارف التهريب.<br>
	يمكننا إنشاء سلسلة نصية خام بوضع الحرف <code>r</code> في بداية السلسلة النصية، قبل علامة الاقتباس الأولى مباشرةً:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_453_27"><span class="pln">print</span><span class="pun">(</span><span class="pln">r</span><span class="str">"Sammy says,\"The balloon\'s color is red.\""</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Sammy</span><span class="pln"> says</span><span class="pun">,</span><span class="pln">\"</span><span class="typ">The</span><span class="pln"> balloon\'s color is red</span><span class="pun">.</span><span class="pln">\"</span></pre>

<p>
	سنستطيع الإبقاء على محارف التهريب كما هي في السلاسل النصية إن أسبقناها بالحرف <code>r</code> لتحويلها إلى سلاسل نصية خام.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	شرحنا في هذا الدرس عدِّة طرائق لتنسيق النص في بايثون 3؛ وعرفنا كيف نُظهِر السلاسل النصية كما نريد عبر استخدامنا لمحارف التهريب أو السلاسل النصية الخام، لكي يستفيد المستخدم من النص الناتج ويقرأه بسهولة.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-format-text-in-python-3" rel="external nofollow">How To Format Text in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال التالي: <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r412/" rel="">مقدمة إلى دوال التعامل مع السلاسل النصية</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">مدخل إلى التعامل مع السلاسل النصية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">409</guid><pubDate>Tue, 13 Aug 2019 18:07:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x627;&#x644;&#x646;&#x635;&#x64A;&#x629; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d895d886c1_.jpg.f18ffbfe9fc3b2d8365d9eb3640688c5.jpg" /></p>

<p>
	«السلسلة النصية» (string) هي مجموعة من المحارف (أي الأحرف والأرقام والرموز) التي إما أن تكون قيمة ثابتة أو قيمة لمتغير. وهذه السلاسل النصية مُشكَّلة من محارف يونيكود (Unicode) والتي لا يمكن تغيير مدلولها.<br>
	ولأنَّ النص هو شكلٌ شائعٌ من أشكال البيانات الذي نستعمله يوميًا، لذا فإنَّ السلاسل النصية مهمة جدًا وتُمثِّل لُبنةً أساسيةً في البرمجة.<br>
	سيستعرض هذا الدرس كيفية إنشاء وطباعة السلاسة النصية، وكيفية جمعها مع بعضها وتكرارها، وآلية تخزين السلاسل النصية في متغيرات.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30845" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d8960cd1f2_.jpg.3be8168ba27f507d6301e573eb5fbe6d.jpg" rel=""><img alt="مدخل إلى التعامل مع السلاسل النصية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30845" data-unique="z3lc437yf" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d8960e2658_.thumb.jpg.3a026cb69f13d1650a435f62213f9dfc.jpg"></a>
</p>

<h2 id="إنشاء-وطباعة-السلاسل-النصية">
	إنشاء وطباعة السلاسل النصية
</h2>

<p>
	تتواجد السلاسل النصية إما داخل علامات اقتباس فردية <code>’</code> أو علامات اقتباس مزدوجة <code>"</code>، لذا لإنشاء سلسلة نصية، كل ما علينا فعله هو وضع مجموعة من المحارف بين أحد نوعَي علامات الاقتباس السابقَين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_7" style="">
<span class="str">'هذه سلسلة نصية ضمن علامتي اقتباس مفردتين.'</span></pre>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_9" style="">
<span class="str">"هذه سلسلة نصية ضمن علامتي اقتباس مزدوجتين"</span></pre>

<p>
	يمكنك الاختيار بين النوعَين السابقَين، لكن أيًّا كان اختيارك، فعليك أن تحافظ على استخدامك له في كامل برنامجك.<br>
	يمكنك طباعة السلاسل النصية إلى الشاشة باستدعاء الدالة <code>print()‎</code> بكل بساطة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_11" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">"Let's print out this string."</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Let</span><span class="str">'s print out this string.</span></pre>

<p>
	بعد أن فهمتَ كيفية تهيئة السلاسل النصية في بايثون، لنلقِ نظرةً الآن إلى كيفية التعامل مع السلاسل النصية في برامجك وتعديلها.
</p>

<h2 id="جمع-السلاسل-النصية">
	جمع السلاسل النصية
</h2>

<p>
	عملية الجمع (concatenation) تعني إضافة سلسلتين نصيتين إلى بعضهما بعضًا لإنشاء سلسلة نصية جديدة. نستخدم المعامل <code>+</code> لجمع السلاسل النصية؛ أبقِ في ذهنك أنَّ المعامل <code>+</code> يعني عملية الجمع عند التعامل مع الأعداد، أما عندما نستخدمه مع السلاسل النصية فيعني إضافتها إلى بعضها.<br>
	لنجمع السلستين النصيتين <code>"Sammy"</code> و <code>"Shark"</code> مع بعضها ثم نطبعهما باستخدام الدالة <code>print()‎</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_13" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Shark"</span><span class="pun">)</span><span class="pln">
</span><span class="typ">SammyShark</span></pre>

<p>
	إذا أردتَ وضع فراغ بين السلسلتين النصيتين، فيمكنك بكل بساطة وضعه عند نهاية السلسلة النصية الأولى، أي بعد الكلمة “Sammy”:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7725_9">
<span class="pln">print</span><span class="pun">(</span><span class="str">"Sammy "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"Shark"</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Sammy</span><span class="pln"> </span><span class="typ">Shark</span></pre>

<p>
	لكن احرص على عدم استعمال المعامل <code>+</code> بين نوعَين مختلفَين من البيانات، فلن نتمكن من جمع السلاسل النصية والأرقام مع بعضها، فلو حاولنا مثلًا أن نكتب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_15" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">27</span><span class="pun">)</span></pre>

<p>
	فسنحصل على رسالة الخطأ الآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7725_13">
<span class="typ">TypeError</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Can</span><span class="str">'t convert '</span><span class="kwd">int</span><span class="str">' object to str implicitly</span></pre>

<p>
	أما إذا أردنا أن نُنشِئ السلسلة النصية <code>"Sammy27"</code> فعلينا حينها وضع الرقم <code>27</code> بين علامتَي اقتباس (<code>"27"</code>) مما يجعله سلسلةً نصيةً وليست عددًا صحيحًا. سنستفيد من تحويل الأعداد إلى سلاسل نصية عندما نتعامل مع أرقام الهواتف على سبيل المثال، لأننا لن نحتاج إلى إجراء عملية حسابية على رمز الدولة ورمز المنطقة في أرقام الهواتف، إلا أننا نريدهما أن يظهرا متتابعَين.<br>
	عندما نجمع سلسلتين نصيتين أو أكثر فنحن نُنشِئ سلسلةً نصيةً جديدةً التي يمكننا استخدامها في برنامجنا.
</p>

<h2 id="تكرار-السلاسل-النصية">
	تكرار السلاسل النصية
</h2>

<p>
	هنالك أوقاتٌ نحتاج فيها إلى استخدام بايثون لأتمتة المهام، وإحدى الأمور التي يمكننا أتمتتها هي تكرار سلسلة نصية لعدِّة مرات. إذ نستطيع فعل ذلك عبر المعامل <code>*</code>، وكما هو الأمر مع المعامل <code>+</code> فإنَّ المعامل <code>*</code> له استخدامٌ مختلف عندما نتعامل مع أرقام، حيث يُمثِّل عملية الضرب. أما عندما نستخدمه بين سلسلةٍ نصيةٍ ورقمٍ فإنَّ المعامل <code>*</code> هو معامل التكرار، فوظيفته هي تكرار سلسلة نصية لأي عدد مرات تشاء.<br>
	لنحاول طباعة السلسلة النصية “Sammy” تسع مرات دون تكرارها يدويًا، وذلك عبر المعامل <code>*</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_20" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">"Sammy"</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">9</span><span class="pun">)</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode" id="ips_uid_3903_22">
SammySammySammySammySammySammySammySammySammy</pre>

<p>
	يمكننا بهذه الطريقة تكرار السلسلة النصية لأيِّ عددٍ نشاء من المرات.
</p>

<h2 id="تخزين-السلاسل-النصية-في-متغيرات">
	تخزين السلاسل النصية في متغيرات
</h2>

<p>
	المتغيرات هي «رموز» التي يمكننا استعمالها لتخزين البيانات في برنامج. يمكنك تخيل المتغيرات على أنها صندوقٌ فارغٌ يمكنك ملؤه بالبيانات أو القيم. السلاسل النصية هي نوعٌ من أنواع البيانات، لذا يمكننا استعمالها لملء المتغيرات. التصريح عن السلاسل النصية كمتغيرات سيُسهِّل علينا التعامل معها في برامجنا.<br>
	لتخزين سلسلة نصية داخل متغير، فكل ما علينا فعله هو إسنادها إليه. سنُصرِّح في المثال الآتي عن المتغير <code>my_str</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_24" style="">
<span class="pln">my_str </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sammy likes declaring strings."</span></pre>

<p>
	أصبح المتغير <code>my_str</code> الآن مُشيرًا إلى سلسلةٍ نصيةٍ، والتي أمسى بمقدورنا طباعتها كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_26" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="pln">my_str</span><span class="pun">)</span></pre>

<p>
	وسنحصل على الناتج الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3903_28" style="">
<span class="typ">Sammy</span><span class="pln"> likes declaring strings</span><span class="pun">.</span></pre>

<p>
	استخدام المتغيرات لاحتواء قيم السلاسل النصية سيساعدنا في الاستغناء عن إعادة كتابة السلسلة النصية في كل مرة نحتاج استخدامها، مما يُبسِّط تعاملنا معها وإجراءنا للعمليات عليها في برامجنا.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	لقد تعلمنا في درسنا هذا أساسيات التعامل مع السلاسل النصية في لغة بايثون 3. بما في ذلك إنشاءها وطباعتها وجمعها وتكرارها، إضافةً إلى تخزينها في متغيرات، وهذه هي المعلومات الأساسية التي عليك فهمها للانطلاق في تعاملك مع السلاسل النصية في برامج بايثون 3.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-working-with-strings-in-python-3" rel="external nofollow">An Introduction to Working with Strings in Python 3</a> لصاحبته -Lisa Tagliaferri
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالي: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r409/" rel="">كيفية تنسيق النصوص</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r720/" rel="">فهم أنواع البيانات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">407</guid><pubDate>Fri, 09 Aug 2019 13:07:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; 3</title><link>https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r720/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d8727a2158_.jpg.476bb57d4d42424343e3671ff461e5ea.jpg" /></p>
<p>
	تُستخدم في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، كما هو الحال في جميع لغات البرمجة، أنواع البيانات لتصنيف البيانات. هذا مهم لأنّ نوع البيانات الذي تستخدمه سيحدد القيم التي يمكن تعيينها لها، وما الذي يمكن فعله بها (بما في ذلك العمليات التي يمكن تنفيذها عليها).
</p>

<p>
	سنتعرف في هذه المقالة على أهم أنواع البيانات الأصلية <a href="https://wiki.hsoub.com/Python" rel="external">لبايثون</a>. هذا ليس استقصاءً شاملًا لأنواع البيانات، ولكنه سيساعدك على التعرف على الخيارات المتاحة لك في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="30844" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d8728eb3ce_.jpg.53b4158a552f55973ca9d44d3e6c7a5a.jpg" rel=""><img alt="فهم أنواع البيانات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30844" data-unique="zuws4mjii" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3d87291305d_.thumb.jpg.3c2bac28257f9b9df9aba5571b67926c.jpg"></a>
</p>

<h2 id="-">
	مدخل
</h2>

<p>
	أنواع البيانات في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> مشابهة إلى حد ما لأنواع البيانات التي نستخدمها في العالم الحقيقي. من أمثلة أنواع البيانات في العالم الحقيقي الأعداد، مثل: الأعداد الصحيحة الطبيعية (0، 1، 2، ...)، والأعداد الصحيحة النسبية (...، 1-، 0، 1، ...)، والأعداد غير النسبية (π).
</p>

<p>
	يمكننا عادة في الرياضيات جمع أعداد من أنواع مختلفة مثل إضافة 5 إلى π:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_7" style=""><span class="lit">5</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">π</span></pre>

<p>
	يمكننا إما الاحتفاظ بالمعادلة كإجابة، وستكون النتيجة عددًا غير نسبي (irrational number)، أو يمكننا تقريب (round) العدد π إلى عدد ذي منازل عشرية محددة، ثم نجمع العددين:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_9" style=""><span class="lit">5</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">π</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">3.14</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">8.14</span></pre>

<p>
	ولكن، إذا حاولنا إضافة عدد إلى نوع بيانات آخر، مثل الكلمات، فستصبح الأمور مربكة وغير ذات معنى. فكيف ستحل المعادلة التالية مثلًا؟
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_11" style=""><span class="pln">hsoub </span><span class="pun">+</span><span class="pln"> </span><span class="lit">8</span></pre>

<p>
	بالنسبة إلى الكلمة hsoub، يمكن عدكل نوع من <a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-r1726/" rel="">أنواع البيانات</a> مختلفًا تمامًا، مثل الكلمات والأعداد، لذلك يتعين علينا توخي الحذر بشأن كيفية استخدامها، وكيفية التعامل معها في العمليات.
</p>

<h2 id="-">
	الأعداد
</h2>

<p>
	سيُفسَّر كل عدد تُدخله إلى <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> كعدد؛ ليس مطلوبًا منك إعلان نوع البيانات الذي تدخله لأنّ <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> تَعدُّ أيّ عدد مكتوب بدون فواصل عشرية بمثابة عدد صحيح (<strong>integer</strong>، كما هو حال <code>138</code>)، وأيّ عدد مكتوب بفواص لعشرية بمثابة عدد عشري (<strong>float</strong> كما هو حال <code>138.0</code>).
</p>

<h3 id="-">
	الأعداد الصحيحة
</h3>

<p>
	كما هو الحال في الرياضيات، <strong><a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a></strong> (<strong>integer</strong>) في البرمجة هي أعداد كاملة، يمكن أن تكون موجبة أو سالبة أو معدومة (...، <code>‎</code>1<code>،</code>0<code>،</code>-1، ...). ويُعرف هذا النوع أيضًا باسم <code>int</code>. كما هو الحال مع لغات البرمجة الأخرى، يجب ألا تستخدم الفواصل في الأعداد المؤلفة من أربعة أرقام أو أكثر، لذلك لا تكتب <code>1,000</code> في برنامجك، واكتب <code>1000</code>.
</p>

<p>
	يمكننا طباعة العدد الصحيح على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_13" style=""><span class="kwd">print</span><span class="pun">(-</span><span class="lit">25</span><span class="pun">)</span></pre>

<p>
	وسينتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_15" style=""><span class="pun">-</span><span class="lit">25</span></pre>

<p>
	أو يمكننا الإعلان عن متغير، والذي هو في هذه الحالة رمزٌ للعدد الذي نستخدمه أو نتعامل معه، مثلًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_17" style=""><span class="pln">my_int </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">25</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_int</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_19" style=""><span class="pun">-</span><span class="lit">25</span></pre>

<p>
	يمكننا أن نجري العمليات الحسابية على <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_21" style=""><span class="pln">int_ans </span><span class="pun">=</span><span class="pln"> </span><span class="lit">116</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">68</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">int_ans</span><span class="pun">)</span></pre>

<p>
	المخرجات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_23" style=""><span class="lit">48</span></pre>

<p>
	يمكن استخدام <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> بعدة طرق في برامج <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، ومع استمرارك في تعلم المزيد عن هذه اللغة، ستتاح لك الكثير من الفرص لاستخدام <a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a> وفهم المزيد عن هذا النوع من البيانات.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h3 id="-floating-point-numbers-">
	الأعداد العشرية
</h3>

<p>
	<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> (Floating-Point Numbers) هي أعداد حقيقية، مما يعني أنه يمكن أن تكون أعدادًا جذرية أو <a href="https://ar.wikipedia.org/wiki/%D8%B9%D8%AF%D8%AF_%D8%BA%D9%8A%D8%B1_%D9%86%D8%B3%D8%A8%D9%8A" rel="external nofollow">غير نسبية</a>. لهذا السبب، يمكن أن تحتوي الأعداد العشرية على جزء كسري، مثل <code>9.0</code> أو <code>‎</code>-116.42. وببساطة، فالأعداد العشرية هي أعداد تحتوي الفاصلة العشرية.
</p>

<p>
	كما فعلنا مع الأعداد الصحيحة، يمكننا طباعة <a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a> هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_25" style=""><span class="kwd">print</span><span class="pun">(</span><span class="lit">17.3</span><span class="pun">)</span></pre>

<p>
	وسينتج لنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_27" style=""><span class="lit">17.3</span></pre>

<p>
	يمكننا أيضًا أن نعلن عن متغير يحتوى <a href="https://wiki.hsoub.com/Python/float" rel="external">عددًا عشريًا</a>، مثلًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_29" style=""><span class="pln">my_flt </span><span class="pun">=</span><span class="pln"> </span><span class="lit">17.3</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_flt</span><span class="pun">)</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_31" style=""><span class="lit">17.3</span></pre>

<p>
	وكما هو الحال مع الأعداد الصحيحة، يمكننا أن نجرى العمليات الحسابية على الأعداد العشرية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_33" style=""><span class="pln">flt_ans </span><span class="pun">=</span><span class="pln"> </span><span class="lit">564.0</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">365.24</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">flt_ans</span><span class="pun">)</span></pre>

<p>
	الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_35" style=""><span class="lit">929.24</span></pre>

<p>
	الأعداد الصحيحة والأعداد العشرية مختلفان عمومًا، إذ أنّ <code>3</code> ≠ <code>3.0</code>، لأنّ <code>3</code> عدد صحيح، بينما <code>3.0</code> عدد عشري.
</p>

<h2 id="-">
	القيم المنطقية
</h2>

<p>
	هناك قيمتان فقط لنوع <a href="https://wiki.hsoub.com/Python/boolean" rel="external">البيانات المنطقية</a> (Boolean) وهما <strong><code>True</code></strong> و <strong><code>False</code></strong>. تُستخدم القيم المنطقية لتمثيل قيم الحقيقة الموافقة للمنطق الرياضياتي.
</p>

<p>
	عادة ما يبدأ اسم <a href="https://wiki.hsoub.com/Python/boolean" rel="external">البيانات المنطقية</a> بالحرف B، إشارة إلى اسم عالم الرياضيات George Boole. القيمتان <code>True</code> و <code>False</code> تُكتبان دائمًا بحرفين كبيرين T و F، لأنها قيم خاصة في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>.
</p>

<p>
	الكثير من العمليات الحسابية في الرياضيات تُنتج قيمًا منطقيًا، إما True أو False:
</p>

<ul>
	<li>
		أكبر من
		<ul>
			<li>
				500 &gt; 100 <code>True</code>
			</li>
			<li>
				1 &gt; 5 False
			</li>
		</ul>
	</li>
	<li>
		أصغر من
		<ul>
			<li>
				200 &lt; 400 <code>True</code>
			</li>
			<li>
				4 &lt; 2 <code>False</code>
			</li>
		</ul>
	</li>
	<li>
		التساوي
		<ul>
			<li>
				5 = 5 <code>True</code>
			</li>
			<li>
				500 = 400 <code>False</code>
			</li>
		</ul>
	</li>
</ul>

<p>
	كما هو الحال مع الأعداد، يمكننا تخزين القيم المنطقية في المتغيرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_37" style=""><span class="pln">my_bool </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">8</span></pre>

<p>
	يمكننا بعد ذلك طباعة القيمة المنطقية باستدعاء الدالة <a href="https://wiki.hsoub.com/Python/print" rel="external">print()‎</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_40" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">my_bool</span><span class="pun">)</span></pre>

<p>
	بما أنّ العدد 5 ليس أكبر من 8، فسوف نحصل على المخرجات التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_42" style=""><span class="kwd">False</span></pre>

<p>
	ستتعلم مع مرور الوقت كيفية استخدام القيم المنطقية، وكيف يمكن للدوال والعمليات المنطقية أن تغير مسار البرنامج.
</p>

<h2 id="-">
	السلاسل النصية
</h2>

<p>
	<a href="https://wiki.hsoub.com/Python/str" rel="external">السلسلة النصية</a> (string) هي عبارة عن تسلسل من محرف واحد أو أكثر (محارف وأعداد ورموز)، ويمكن أن تكون ثابتة أو متغيرة. تحاط السلاسل النصية إما بعلامات الاقتباس المفردة <strong><code>'</code></strong> أو علامات الاقتباس المزدوجة <strong><code>"</code></strong>، لذلك لإنشاء <a href="https://wiki.hsoub.com/Python/str" rel="external">سلسلة نصية</a>، ضع سلسلة من الأحرف بين علامتي اقتباس:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_44" style=""><span class="str">'هذه سلسلة نصية ضمن علامتي اقتباس مفردتين'</span><span class="pln">
</span><span class="str">"هذه سلسلة نصية ضمن علامتي اقتباس مزدوجتين"</span></pre>

<p>
	يمكنك استخدام علامات الاقتباس المفردة أو علامات الاقتباس المزدوجة، المهم أن تكون متسقًا في برنامجك.
</p>

<p>
	البرنامج البسيط <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%A8-%D8%A3%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D8%AC-%D9%84%D9%83-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r715/" rel="">"Hello, World!‎"</a> يوضح كيف يمكن استخدام <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> في البرمجة، حيث أنّ حروف عبارة <code>Hello، World!‎</code> تمثل سلسلة نصية.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_46" style=""><span class="kwd">print</span><span class="pun">(</span><span class="str">"Hello, World!"</span><span class="pun">)</span></pre>

<p>
	كما هو الحال مع أنواع البيانات الأخرى، يمكننا تخزين <a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a> في المتغيرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_48" style=""><span class="pln">hw </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello, World!"</span></pre>

<p>
	وطباعة السلسلة عن طريق استدعاء المتغير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_50" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">hw</span><span class="pun">)</span><span class="pln">  </span><span class="pun">//</span><span class="pln"> </span><span class="typ">Hello</span><span class="pun">,</span><span class="pln"> </span><span class="typ">World</span><span class="pun">!</span></pre>

<p>
	مثل الأعداد، هناك العديد من العمليات التي يمكن إجراؤها على السلاسل النصية من أجل تحقيق النتائج التي نسعى إليها. السلاسل النصية مهمة لتوصيل المعلومات إلى المستخدم، وكذلك لتمكين المستخدم من تمرير المعلومات إلى البرنامج.
</p>

<h2 id="-">
	القوائم
</h2>

<p>
	<a href="https://wiki.hsoub.com/Python/list" rel="external">القائمة</a> (lists) عبارة عن تسلسل مرتّب قابل للتغيير (mutable). وكما تُعرّف السلاسل النصية باستخدام علامات الاقتباس، يتم تعريف القوائم باستخدام الأقواس المعقوفة <code>[]</code>.
</p>

<p>
	مثلًا، هذه قائمة تحوي أعدادًا صحيحةً:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_52" style=""><span class="pun">[-</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">]</span></pre>

<p>
	وهذه قائمة من الأعداد العشرية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_54" style=""><span class="pun">[</span><span class="lit">3.14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9.23</span><span class="pun">,</span><span class="pln"> </span><span class="lit">111.11</span><span class="pun">,</span><span class="pln"> </span><span class="lit">312.12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1.05</span><span class="pun">]</span></pre>

<p>
	وهذه قائمة من السلاسل النصية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_56" style=""><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">]</span></pre>

<p>
	في المثال التالي، سنسمّى قائمة السلاسل النصية خاصتنا <code>sea_creatures</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_58" style=""><span class="pln">sea_creatures </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">]</span></pre>

<p>
	يمكننا طباعتها عن طريق استدعاء المتغير:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_60" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">sea_creatures</span><span class="pun">)</span></pre>

<p>
	وسترى أنّ المخرجات تشبه تمامًا القائمة التي أنشأناها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_62" style=""><span class="pun">[</span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cuttlefish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'squid'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mantis shrimp'</span><span class="pun">]</span></pre>

<p>
	<a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a> هي نوع بيانات مرن للغاية، لأنها قابلة للتغيير، حيث يمكن إضافة قيم إليها، أو إزالته، أو تغييرها. هناك نوع بيانات آخر مشابه لقوائم، بيْد أنه غير قابل للتغيير، ويُسمى الصف (tuple).
</p>

<h2 id="-tuples-">
	الصفوف (Tuples)
</h2>

<p>
	يُستخدم <a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصف</a> (tuple) لتجميع البيانات. إنه تسلسل ثابت من العناصر وغير قابل للتغيير.
</p>

<p>
	<a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a> تشبه <a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a> إلى حد كبير، لكنها تستخدم الأقواس <code>()</code> بدلًا من الأقواس المعقوفة <code>[]</code>، ولأنها غير قابلة للتغيير، فلا يمكن تغيير أو تعديل قيمها.
</p>

<p>
	تبدو الصفوف كالتالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_64" style=""><span class="pun">(</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">)</span></pre>

<p>
	يمكننا تخزين الصفوف في المتغيرات وطباعتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_66" style=""><span class="pln">coral </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">coral</span><span class="pun">)</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_68" style=""><span class="pun">(</span><span class="str">'blue coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staghorn coral'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pillar coral'</span><span class="pun">)</span></pre>

<p>
	كما هو الحال في أنواع البيانات الأخرى، تطبع <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> <a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a> تمامًا كما كتبناها، حيث تطبع سلسلة من القيم بين قوسين.
</p>

<h2 id="-dictionaries-">
	القواميس
</h2>

<p>
	<a href="https://wiki.hsoub.com/Python/dict" rel="external">القاموس</a> (Dictionaries) هو نوع مُضمّن في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، إذ تُربط مفاتيحُ بالقيم المقابلة لها في شكل أزواج، هذه الأزواج مفيدة لتخزين البيانات في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>. يتم إنشاء <a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a> باستخدام الأقواس المعقوصة <code>{}</code>.
</p>

<p>
	تُستخدم القواميس عادةً لحفظ البيانات المترابطة، مثل المعلومات المقابلة لرقم تعريف. يبدو القاموس كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_70" style=""><span class="pun">{</span><span class="str">'name'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Sammy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'animal'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'color'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'blue'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'location'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'ocean'</span><span class="pun">}</span></pre>

<p>
	ستلاحظ أنه بالإضافة إلى الأقواس المعقوصة، توجد علامات النقطتين الرأسيتين (colons) داخل القاموس. الكلمات الموجودة على يسار النقطتين الرأسيتين هي المفاتيح. المفاتيح قد تكون أيّ نوع بيانات غير قابل للتغيير. المفاتيح في القاموس أعلاه هي: <code>'name', 'animal', 'color', 'location'</code>‎.
</p>

<p>
	الكلمات الموجودة على يمين النقطتين هي القيم. يمكن أن تتألف القيم من أي نوع من البيانات. القيم في القاموس أعلاه هي: <code>'Sammy', 'shark', 'blue', 'ocean'</code>‎.
</p>

<p>
	مثل أنواع البيانات الأخرى، يمكننا تخزين القواميس في متغيرات، وطباعتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_72" style=""><span class="pln">sammy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'name'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Sammy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'animal'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'color'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'blue'</span><span class="pun">,</span><span class="pln">  </span><span class="str">'location'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'ocean'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">)</span></pre>

<p>
	والمخرجات هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_74" style=""><span class="pun">{</span><span class="str">'color'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'blue'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'animal'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'shark'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'name'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Sammy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'location'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'ocean'</span><span class="pun">}</span></pre>

<p>
	إذا أردت الحصول على اللون (color) الخاص بـ Sammy، فيمكنك القيام بذلك عن طريق استدعاء <code>sammy ['color']‎</code>. هذا مثال على ذلك:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5293_76" style=""><span class="kwd">print</span><span class="pun">(</span><span class="pln">sammy</span><span class="pun">[</span><span class="str">'color'</span><span class="pun">])</span><span class="pln"> </span><span class="com"># blue</span></pre>

<p>
	<a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a> من أنواع البيانات المهمة في برامج <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>.
</p>

<h2 id="-">
	خلاصة
</h2>

<p>
	في هذه المرحلة، يُفترض أن يكون لديك فهم جيد لبعض أنواع البيانات الرئيسية المتاحة في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>. أنواع البيانات هذه ستصبح جزءًا طبيعيًا من حياتك كمبرمج للغة <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>.
</p>

<p>
	يمكنك التعرف على المزيد من التفاصيل عن <a href="https://wiki.hsoub.com/Python#.D8.A3.D9.86.D9.88.D8.A7.D8.B9_.D8.A7.D9.84.D8.A8.D9.8A.D8.A7.D9.86.D8.A7.D8.AA" rel="external">هذه الأنواع في موسوعة حسوب</a>:
</p>

<ul>
	<li>
		<a href="https://wiki.hsoub.com/Python/int" rel="external">الأعداد الصحيحة</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/float" rel="external">الأعداد العشرية</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/boolean" rel="external">القيم المنطقية</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/str" rel="external">السلاسل النصية</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/list" rel="external">القوائم</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/tuples" rel="external">الصفوف</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/Python/dict" rel="external">القواميس</a>
	</li>
</ul>

<p>
	بمجرد أن تقوّي وتعمّق فهمك لأنواع البيانات المتاحة في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، يمكنك الانتقال إلى تعلم كيفية تحويل أنواع البيانات في بايثون 3.
</p>

<p>
	هذه المقالة جزء من سلسة مقالات حول <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">تعلم البرمجة في بايثون 3</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3" rel="external nofollow">Understanding Data Types in Python 3</a> لصاحبته Lisa Tagliaferri
</p>

<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r407/" rel="">مدخل إلى التعامل مع السلاسل النصية في بايثون 3</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%8A%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r719/" rel="">كيفية كتابة التعليقات في بايثون 3</a>
	</li>
	<li>
		تعرف على أبرز <a href="https://academy.hsoub.com/programming/python/%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">مميزات لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">المرجع الشامل إلى تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">كتاب البرمجة بلغة بايثون</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">720</guid><pubDate>Tue, 06 Aug 2019 08:05:00 +0000</pubDate></item></channel></rss>
