<?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/10/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</description><language>ar</language><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x627;&#x644;&#x62F;&#x648;&#x627;&#x644; (Functions) &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-functions-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r292/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/python-functions.png.e138712d3aa17cc2c84f52dafa27c3ba.png" /></p>
<div id="wmd-preview-section-45">
	<p id="مقدمة">
		إلى الآن، تعرفنا في هذه السلسلة من الدروس على <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%88%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-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r223/" rel="">أساسيات التعامل </a><a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B5%D9%81%D9%88%D9%81%D8%8C-%D8%A7%D9%84%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D9%88%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-r226/" rel="">مع أنواع البيانات</a>، <a href="https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r221/" rel="">المُتغيرات</a>، <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/" rel="">الجمل الشرطية</a>، و<a href="https://academy.hsoub.com/programming/python/%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-loops-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r291/" rel="">حلقات التكرار for و while</a>. وقد أصبح لديك الآن المعلومات الكافية لبرمجة برامج مُتوسطة قد تحتوي على مئات الأسطر البرمجية، وقد حان الوقت لتتعرف على الدوال لكي تجعل مُهمة إعادة استخدام أجزاء من شيفرتك أكثر سهولة ومرونة، كما ستتعرف على بعض من الدوال المُعرفة مُسبقا في لغة بايثون.
	</p>

	<p style="text-align: center;">
		<img alt="python-functions.png.61fc5c3079a4992a338" class="ipsImage ipsImage_thumbnailed" data-fileid="14227" data-unique="nxf1319nd" src="https://academy.hsoub.com/uploads/monthly_2016_03/python-functions.png.61fc5c3079a4992a33820522ef8cf996.png">
	</p>

	<p>
		للتذكير: جميع الشّيفرات التّي تبدأ بعلامة <strong>&lt;&lt;&lt;</strong> يجب أن تنفّذ على مفسر بايثون.
	</p>
</div>

<div id="wmd-preview-section-46">
	<h2 id="الدوال">
		الدوال
	</h2>

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

	<p>
		لنعتبر بأنّ طباعة جملة "Hello" هي الشيفرة التّي تحملها الدّالة، انظر المثال التّالي:
	</p>
</div>

<div id="wmd-preview-section-47">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_14"><span class="pln">&gt;&gt;&gt; def say_hello():
...    print "Hello"
...
&gt;&gt;&gt; say_hello()
Hello</span></pre>

	<p>
		أولا قمنا بإنشاء الدّالة <span style="font-family:courier new,courier,monospace;">say_hello</span> في السّطر:
	</p>
</div>

<div id="wmd-preview-section-48">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_16"><span class="pln">def say_hello():</span></pre>

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

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

<div id="wmd-preview-section-49">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_18"><span class="pln">&gt;&gt;&gt; say_hello()</span></pre>

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

<div id="wmd-preview-section-50">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_20"><span class="pln">&gt;&gt;&gt; def x():
...    return 4
...
&gt;&gt;&gt; x()
4</span></pre>

	<p>
		ما فعلناه هو أنّنا قُمنا بجعل الدالة قيمة عوضا عن أن تُنفذ شيفرة ما، أي أنّنا استخدمنا الدالة <span style="font-family:courier new,courier,monospace;">x</span> كمُتغير عادي يحمل قيمة مُحدّدة. قد تسأل نفسك، ما فائدة الأمر؟. الأمر مُفيد جدا إذا كان برنامجك كبيرا، بحيث يُمكنك استعمال الدوال كقيمة مُخرجة بعد عدة عمليات. مثلا، إذا كان لديك برنامج يطلب من المُستخدم مُدخلا (كاسمه أو كلمة مروره) وتُريد التحقق من مُدخله وإجراء عمليات عليه، فاستعمال المُتغيرات هنا ليست فكرة جيدة وذلك لأنّ الشيفرة ستكون صعبة التعديل. عوضا عن ذلك يُمكنك أن تقوم بالعمليات على المدخل داخل دالة ثم بعد ذلك تجعل الدالة تحمل القيمة التي ترغب بها في النهاية.
	</p>
</div>

<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>

<div id="wmd-preview-section-51">
	<h3 id="ملاحظة-حول-تسمية-الدوال">
		ملاحظة حول تسمية الدوال
	</h3>

	<p>
		رغم أنك تستطيع تسمية الدوال بأحرف صغيرة وكبيرة معا، من المُفضل تسمية الدالة بأحرف صغيرة والفصل بين كل كلمة والأخرى بمحرف "_".
	</p>
</div>

<div id="wmd-preview-section-52">
	<h2 id="المعاملات-parameters">
		المعاملات Parameters
	</h2>

	<p>
		من مُميزات الدوال أنّك تستطيع أن تُعطيها مُعاملات عند تعريفها، وأن تُعطي القيم لهذه المُعاملات إما عند تعريف الدالة (المعاملات الافتراضية) أو لاحقا. 
	</p>

	<p>
		لتفهم أكثر، انظر المثال التالي:
	</p>
</div>

<div id="wmd-preview-section-53">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_22"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     print 'Hello', name
... 
&gt;&gt;&gt; say_hello('Abdelhadi')
Hello Abdelhadi
&gt;&gt;&gt; say_hello('Hsoub Academy')
Hello Hsoub Academy</span></pre>

	<p>
		كما ترى لقد قُمنا بتعريف الدالة <span style="font-family:courier new,courier,monospace;">say_hello</span> مع مُعامل <span style="font-family:courier new,courier,monospace;">name</span> ووضعنا داخلها جملة طباعة لتطبع Hello متبوعا بقيمة العامل <span style="font-family:courier new,courier,monospace;">name</span> بعدها قُمنا باستدعاء الدالة وأسندنا للعامل <span style="font-family:courier new,courier,monospace;">name</span> قيمتين مُختلفتين، وقد كانت النتائج مُختلفة، يُمكنك أن تستدعي نفس الدالة مع معاملات مُختلفة لعدد غير محدود من المرات.
	</p>

	<p>
		يُمكنك كذلك أن تقوم بتعريف دالة مع أكثر من معامل، إليك مثالا على دالة لإعادة مجموع عددين :
	</p>
</div>

<div id="wmd-preview-section-54">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_24"><span class="pln">&gt;&gt;&gt; def add_numbers(n1, n2):
...     return n1 + n2
... 
&gt;&gt;&gt; add_numbers(3,4)
7</span></pre>

	<p>
		إذا قُمنا بتعريف دالة مع معامل فلا بد أن نقوم بتعيين قيمة العامل عند الاستدعاء وإلا فسيرجع مُفسر Python خطأ كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-55">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_26"><span class="pln">&gt;&gt;&gt; say_hello()
TypeError: say_hello() takes exactly 1 argument (0 given)</span></pre>

	<p>
		الأمر نفسه يحدث إذا عينت عددا أكثر من العوامل المُفترض، مثلا أن تعطي للدالة <span style="font-family:courier new,courier,monospace;">say_hello</span> مُعاملين أو أكثر. 
	</p>

	<p>
		يُمكنك أن تقوم بوضع قيمة افتراضية لمُعامل في سطر تعريف الدالة:
	</p>
</div>

<div id="wmd-preview-section-56">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_28"><span class="pln">&gt;&gt;&gt; def num(n1, n2 = 10):
...     return n1 + n2
... 
&gt;&gt;&gt; num(3)
13</span></pre>

	<p>
		يُمكن أن تستعمل هذه الطريقة لعرض خطأ للمُستخدم إذا نسي إدخال المُعاملات.
	</p>
</div>

<div id="wmd-preview-section-57">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_30"><span class="pln">&gt;&gt;&gt; def say_hello(name = '| Error! Check the line that calls the function'):
...     print 'Hello', name
... 
&gt;&gt;&gt; say_hello()
Hello | Error! Check the line that calls the function</span></pre>

	<p>
		يُمكنك كذلك أن تقوم بعدة عمليات مع الدوال، وإليك قائمة ببعض هذه العمليات:
	</p>
</div>

<div id="wmd-preview-section-58">
	<h3 id="يمكنك-تعريف-دالة-داخل-دالة-أخرى">
		تعريف دالة داخل دالة أخرى
	</h3>

	<p>
		بما أن الدوال عبارة عن أجزاء من الشيفرة فتستطيع أن تقوم بإنشاء دالة أخرى أو عدد من الدوال داخل الدالة الواحدة، انظر المثال التالي:
	</p>
</div>

<div id="wmd-preview-section-59">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_32"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     def hello():
...         return 'Hello '
...     print hello() + name
... 
&gt;&gt;&gt; say_hello('Abdelhadi')
Hello Abdelhadi</span></pre>

	<p>
		كما ترى أعلاه القيمة Hello ما هي إلا القيمة التي أرجعتها الدالة <span style="font-family:courier new,courier,monospace;">hello</span> المعرفة بداخل الدالة<span style="font-family:courier new,courier,monospace;"> say_hello</span>.
	</p>
</div>

<div id="wmd-preview-section-60">
	<h3 id="يمكنك-أن-تقوم-باستدعاء-دالة-داخل-دالة-أخرى">
		استدعاء دالة داخل دالة أخرى
	</h3>

	<p>
		هذا الأمر بسيط، فقط استدع الدالة داخل دالة أخرى وستعمل كلتا الدالتان عند استدعاء الدالة الأم:
	</p>
</div>

<div id="wmd-preview-section-61">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_34"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     print 'Hello', name
... 
&gt;&gt;&gt; def print_hello():
...     say_hello('Abdelhadi')
... 
&gt;&gt;&gt; print_hello()
Hello Abdelhadi</span></pre>

	<p>
		في المثال أعلاه قُمنا باستدعاء الدالة<span style="font-family:courier new,courier,monospace;"> say_hello </span>من داخل الدالة<span style="font-family:courier new,courier,monospace;"> print_hello</span>.
	</p>
</div>

<div id="wmd-preview-section-62">
	<h3 id="يمكنك-أن-تقوم-بإسناد-دالة-لمتغير">
		إسناد دالة لمتغير
	</h3>

	<p>
		تستطيع أن تُنشئ دالة وتقوم بإسنادها لمُتغير بالطّريقة التالية:
	</p>
</div>

<div id="wmd-preview-section-63">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_36"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     print 'Hello', name
... 
&gt;&gt;&gt; s = say_hello
&gt;&gt;&gt;&gt; s('Abdelhadi')
Hello Abdelhadi</span></pre>

	<h3>
		إسناد دالة كمعامل لدالة أخرى
	</h3>
</div>

<div id="wmd-preview-section-64">
	<p>
		قلنا مُسبقا بأنّه يمكن للدالة أن تتصرف كمتغير وذلك عندما نجعلها ترجع قيمة بالجملة <span style="font-family:courier new,courier,monospace;">return</span>. وهذا يعني بأنّنا نستطيع أن نسند للدالة دالة أخرى.
	</p>
</div>

<div id="wmd-preview-section-65">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_38"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     print 'Hello', name
... 
&gt;&gt;&gt; def get_name():
...     return 'Abdelhadi'
... 
&gt;&gt;&gt; say_hello(get_name())
Hello Abdelhadi</span></pre>

	<h3>
		إرجاع دالة داخل دالة أخرى
	</h3>
</div>

<div id="wmd-preview-section-66">
	<p>
		يُمكنك أيضا أن تستعمل الجملة <span style="font-family:courier new,courier,monospace;">return</span> لإرجاع دالة داخل دالة أخرى عوضا عن إرجاع قيمة ما، انظر المثال:
	</p>
</div>

<div id="wmd-preview-section-67">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_40"><span class="pln">&gt;&gt;&gt; def get_hello():
...     return 'Hello Abdelhadi'
... 
&gt;&gt;&gt; def say_hello():
...     return get_hello()
... 
&gt;&gt;&gt; print say_hello()
Hello Abdelhadi</span></pre>

	<p>
		ستلاحظ بأنّ الدالة <span style="font-family:courier new,courier,monospace;">say_hello </span>تحمل قيمة الدالة<span style="font-family:courier new,courier,monospace;"> get_hello</span>، وذلك لأنّنا أرجعنا هذه الأخيرة داخل الدالة <span style="font-family:courier new,courier,monospace;">say_hello</span>.
	</p>
</div>

<div id="wmd-preview-section-68">
	<h3 id="يمكنك-أن-تقوم-بإسناد-عدد-لا-نهائي-من-المعاملات-لدالة-ما">
		إسناد عدد لا نهائي من المعاملات لدالة ما
	</h3>

	<p>
		لنقل بأنّك تريد أن تقوم بإنشاء دالة تطبع جميع المُحتويات (المُعاملات) التي تُدخلها دون الحاجة إلى تحديد كل معامل على حدة. يُمكنك أن تقوم بالأمر بما يُسمى مُعامل طول المُتغير أو Variable-length argument وذلك كالتالي:
	</p>
</div>

<div id="wmd-preview-section-69">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_42"><span class="pln">&gt;&gt;&gt; def print_arguments(*args):
...     print args
... 
&gt;&gt;&gt; print_arguments(2, 4, 8, 'Abdelhadi', 'Hsoub Academy')
(2, 4, 8, 'Abdelhadi', 'Hsoub Academy')</span></pre>

	<p>
		المُتغير <span style="font-family:courier new,courier,monospace;">args</span> عبارة عن صف (Tuple) من القيم، وبالتالي فإنك تستطيع أن تتعامل معه بحلقة <span style="font-family:courier new,courier,monospace;">For</span>.
	</p>

	<p>
		يُمكن أن تستخدم أي اسم نريده لهذا المعامل، وعموما يعتبر الاسم <span style="font-family:courier new,courier,monospace;">args*</span> تقليدا بين مُبرمجي بايثون.
	</p>

	<p>
		لاحظ أن الاختلاف بين المعامل العادي والمعامل في المثال أعلاه هو النجمة في البداية.
	</p>

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

<div id="wmd-preview-section-70">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_44"><span class="pln">&gt;&gt;&gt; def print_keyword_args(**kwargs):
...     print kwargs
... 
&gt;&gt;&gt; print_keyword_args(name = 'Abdelhadi', website = 'Hsoub Academy', n = 3)

{'website': 'Hsoub Academy', 'name': 'Abdelhadi', 'n': 3}</span></pre>

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

<div id="wmd-preview-section-71">
	<h2 id="المتغيرات-المحلية-والمتغيرات-العامة-local-variables-and-global-variables">
		المتغيرات المحلية والمتغيرات العامة Local variables and Global variables
	</h2>

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

<div id="wmd-preview-section-72">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_46"><span class="pln">&gt;&gt;&gt; def say_hello():
...     name = 'Abdelhadi'
...     print 'Hello', name
... 
&gt;&gt;&gt; say_hello()
Hello Abdelhadi
&gt;&gt;&gt; print name
Traceback (most recent call last):
  File "</span><span class="tag">&lt;stdin&gt;</span><span class="pln">", line 1, in </span><span class="tag">&lt;module&gt;</span><span class="pln">
NameError: name 'name' is not defined</span></pre>

	<p>
		قُمنا بتعريف المُتغير <span style="font-family:courier new,courier,monospace;">name</span> داخل الدالة <span style="font-family:courier new,courier,monospace;">say_hello </span>وبعدها حاولنا الوصول إليه خارج الدالة، ما أدى إلى خطأ مفاده بأن مُفسر بايثون لم يتعرف على المُتغير.
	</p>

	<p>
		يُمكن أن نجعل المتغير <span style="font-family:courier new,courier,monospace;">name</span> عامًا بإضافة الكلمة <span style="font-family:courier new,courier,monospace;">global</span> قبله (عليك أن تقوم بهذا قبل إسناد قيمة للمُتغير)، انظر المثال التالي:
	</p>
</div>

<div id="wmd-preview-section-73">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9203_48"><span class="pln">&gt;&gt;&gt; def say_hello():
...     global name
...     name = 'Abdelhadi'
... 
&gt;&gt;&gt; say_hello()
&gt;&gt;&gt; print name
Abdelhadi</span></pre>

	<p>
		نُلاحظ بأنّنا استطعنا الوصول إلى المُتغيّر <span style="font-family:courier new,courier,monospace;">name</span> خارج الدالة التي عُرّفَ بها.
	</p>
</div>

<div id="wmd-preview-section-74">
	<h2 id="تطبيق">
		تطبيق
	</h2>

	<p>
		سنضرب مثالا بالبرنامج الذي أنشأناه في <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/" rel="">درس التعابير الشرطية والإزاحات</a>.
	</p>
</div>

<div id="wmd-preview-section-75">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9203_50"><span class="pln">print </span><span class="str">'Hello User, this is a basic sign up/login Program'</span><span class="pln">
username </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter your username please: '</span><span class="pun">)</span><span class="pln">
password </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter the your password please: '</span><span class="pun">)</span><span class="pln">
password_verification </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Verify password: '</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> password </span><span class="pun">==</span><span class="pln"> password_verification</span><span class="pun">:</span><span class="pln">
    print </span><span class="str">'You have Successfully Signed up! \n'</span><span class="pln">
    username_sign_in </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter your username please: '</span><span class="pun">)</span><span class="pln">
    password_sign_in </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter your password please: '</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> username_sign_in </span><span class="pun">==</span><span class="pln"> username and password_sign_in </span><span class="pun">==</span><span class="pln"> password</span><span class="pun">:</span><span class="pln">
        print </span><span class="str">'You have Successfully Signed in!'</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        print </span><span class="str">'username or password do not match! Please try again!'</span><span class="pln">
</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    print </span><span class="str">'The password and the password verification do not match! Please try again'</span></pre>

	<p>
		سنركز على شيفرة التحقق من المُستخدم وكلمة المرور:
	</p>
</div>

<div id="wmd-preview-section-76">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9203_52"><span class="pln">    </span><span class="kwd">if</span><span class="pln"> username_sign_in </span><span class="pun">==</span><span class="pln"> username and password_sign_in </span><span class="pun">==</span><span class="pln"> password</span><span class="pun">:</span><span class="pln">
        print </span><span class="str">'You have Successfully Signed in!'</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        print </span><span class="str">'username or password do not match! Please try again!'</span></pre>

	<p>
		إذا أردنا أن نستخدمها لأكثر من مرة في برنامجنا فعلينا أن نضعها داخل دالة.
	</p>
</div>

<div id="wmd-preview-section-77">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9203_54"><span class="pln">def user_logged_in</span><span class="pun">?(</span><span class="pln">username_sign_in</span><span class="pun">,</span><span class="pln"> username</span><span class="pun">,</span><span class="pln"> password_sign_in</span><span class="pun">,</span><span class="pln"> password</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> username_sign_in </span><span class="pun">==</span><span class="pln"> username and password_sign_in </span><span class="pun">==</span><span class="pln"> password</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">True</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">False</span></pre>

	<p>
		يُمكنك استخدام الدالة في أي مكان من الشيفرة:
	</p>
</div>

<div id="wmd-preview-section-78">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9203_56"><span class="pln">def is_user_logged_in</span><span class="pun">(</span><span class="pln">username_sign_in</span><span class="pun">,</span><span class="pln"> username</span><span class="pun">,</span><span class="pln"> password_sign_in</span><span class="pun">,</span><span class="pln"> password</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> username_sign_in </span><span class="pun">==</span><span class="pln"> username and password_sign_in </span><span class="pun">==</span><span class="pln"> password</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">True</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">False</span><span class="pln">

new_password </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter new username: '</span><span class="pun">)</span><span class="pln">
new_username </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter new password: '</span><span class="pun">)</span><span class="pln">
print </span><span class="str">'Ok!'</span><span class="pln">
password </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Hello again, Enter your username: '</span><span class="pun">)</span><span class="pln">
username </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter username\'s password: '</span><span class="pun">)</span><span class="pln">

print is_user_logged_in</span><span class="pun">(</span><span class="pln">username</span><span class="pun">,</span><span class="pln"> new_username</span><span class="pun">,</span><span class="pln"> password</span><span class="pun">,</span><span class="pln"> new_password</span><span class="pun">)</span></pre>

	<p>
		الدالة <span style="font-family:courier new,courier,monospace;">is_user_logged_in </span>تقوم بمُقارنة كلمتي المرور واسمي المُستخدم فإن كانا متطابقين فستصبح قيمة الدالة True أما إن لم تتوافق القيم فإنّ الدالة تحمل القيمة False ويُمكنك الآن استخدام الدالة مع الجمل الشرطية في أي مكان من برنامجك دون الاضطرار لإعادة كتابة شيفرة التحقق كل مرة. كما أنّ التعديل على الشيفرة بسيط جدا، فالتّعديل من مكان واحد (الدالة) يكفي يطبّق على جميع الأماكن الأخرى (أمكنة استدعاء الدالة).
	</p>
</div>

<div id="wmd-preview-section-79">
	<h2 id="الدوال-المعرفة-مسبقا">
		الدوال المعرفة مسبقا
	</h2>

	<p>
		تُوفر بايثون دوالا مُعرفة مُسبقا، وقد تعاملنا مع كثير منها في الدروس السابقة، وإليك بعض الدوال المُفيدة التي توجد مُسبقا بلغة بايثون.
	</p>

	<ul>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">print</span></strong>: دالة الطّباعة التي استخدمناها أكثر من مرة لطباعة القيم في سابق الدروس.
		</li>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">Int</span></strong>: دالة تحويل القيم إلى عدد صحيح، مثال:
		</li>
	</ul>
</div>

<div id="wmd-preview-section-80">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_8"><span class="pln">&gt;&gt;&gt; int(5.5)
5</span></pre>

	<ul>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">str</span></strong>: دالة تحويل القيم إلى سلسلة نصيّة String:
		</li>
	</ul>
</div>

<div id="wmd-preview-section-81">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_12"><span class="pln">&gt;&gt;&gt; str(True)
'True'</span></pre>

	<p>
		وتُستعمل كثيرا لجمع سلسلة نصية بقيمة من نوع آخر بالعامل + (إذا لم تستخدم هذه الدالة فسيعرض لك مُفسر بايثون خطأ يُفيد بأنّك لا تستطيع جمع قيمتين من نوعين مُختلفين):
	</p>
</div>

<div id="wmd-preview-section-82">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_14"><span class="pln">&gt;&gt;&gt; print 'ABC' + str(122) + str(False)
ABC122False</span></pre>

	<ul>
		<li>
			<span style="font-family:courier new,courier,monospace;"><strong>abs</strong></span>: دالة للحصول على القيمة المُطلقة Absolute Value لعدد ما (إذا كان موجبا فهو العدد نفسه، وإذا كان سالبا فمُقابله):
		</li>
	</ul>
</div>

<div id="wmd-preview-section-83">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_16"><span class="pln">&gt;&gt;&gt; abs(3)
3
&gt;&gt;&gt; abs(-3)
3</span></pre>

	<ul>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">len</span></strong>: دالة لقياس عدد عناصر قائمة أو عدد أحرف سلسلة نصية.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-84">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_18"><span class="pln">&gt;&gt;&gt; a = ['Abdelhadi', 'Dyouri', 'Academy', 'Hsoub']
&gt;&gt;&gt; b = 'Hello'
&gt;&gt;&gt; len(a)
4
&gt;&gt;&gt; len(b)
5</span></pre>

	<ul>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">min</span></strong>: دالة لتحديد أقل قيمة بين قيمتين أو أكثر.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-85">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_20"><span class="pln">&gt;&gt;&gt; min(4, 5, 7, 88, 3, 2)
2</span></pre>

	<ul>
		<li>
			<span style="font-family:courier new,courier,monospace;"><strong>max</strong></span>: دالة لتحديد أقل قيمة بين قيمتين أو أكثر.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-86">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_22"><span class="pln">&gt;&gt;&gt; max(4, 5, 7, 88, 3, 2)
88</span></pre>

	<ul>
		<li>
			<span style="font-family:courier new,courier,monospace;"><strong>range</strong></span>: لتوليد قائمة بأعداد بين قيمة المعامل الأول وقيمة المُعامل الثاني:
		</li>
	</ul>
</div>

<div id="wmd-preview-section-87">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_24"><span class="pln">&gt;&gt;&gt; range(0, 11)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
&gt;&gt;&gt; range(0, 11, 3)
[0, 3, 6, 9]</span></pre>

	<ul>
		<li>
			<span style="font-family:courier new,courier,monospace;"><strong>raw_input</strong></span>: دالة للحصول على مُدخل نصي من المُستخدم، يُمكنك أن تسند هذا المُدخل إلى مُتغير.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-88">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6449_26"><span class="pln">&gt;&gt;&gt; def say_hello(name):
...     print 'Hello', name
... 
&gt;&gt;&gt; say_hello(raw_input())
Abdelhadi
Hello Abdelhadi</span></pre>

	<p>
		كما قُلنا سابقا، فإنك تستطيع أن تقوم بإسناد دالة كمعامل لدالة أخرى، وهذا ما فعلناه في المثال أعلاه، إذ مررنا الدالة <span style="font-family:courier new,courier,monospace;">raw_input</span> ليكون معاملا للدالة <span style="font-family:courier new,courier,monospace;">say_hello</span>.
	</p>
</div>

<div id="wmd-preview-section-89">
	<h2 id="تمارين">
		تمارين
	</h2>
</div>

<div id="wmd-preview-section-90">
	<h3 id="تمرين-1">
		تمرين 1
	</h3>

	<p>
		اكتب برنامجا للحصول على قيمة من المُستخدم وتحويلها إلى قيمة عددية.
	</p>
</div>

<div id="wmd-preview-section-91">
	<h3 id="تمرين-2">
		تمرين 2
	</h3>

	<p>
		اكتب دالة لطباعة جملة لعدد من المرات، واترك للمُستخدم حرية اختيار عدد مرات التكرار (مُساعدة: استعمل الدالة <span style="font-family:courier new,courier,monospace;">raw_input</span> للحصول على قيمة من المُستخدم)
	</p>
</div>

<div id="wmd-preview-section-92">
	<h3 id="تمرين-3">
		تمرين 3
	</h3>

	<p>
		اكتب دالة للجمع بين عددين يُدخلهما المُستخدم.
	</p>
</div>

<div id="wmd-preview-section-93">
	<h3 id="تمرين-4">
		تمرين 4
	</h3>

	<p>
		بَرمِجْ آلة حاسبة بسيطة تقوم بالجمع، الطّرح، الضرب والقسمة. إليك طريقة العمل: 
	</p>

	<ol>
		<li>
			احصل على قيمة العدد الأول من المُستخدم. 
		</li>
		<li>
			احصل على قيمة العدد الثاني. 
		</li>
		<li>
			حول القيمتين النصيتين إلى قيمتين عدديتين. 
		</li>
		<li>
			احصل على العامل الرياضي (*، /، - أو +) من المُستخدم. 
		</li>
		<li>
			استخدم الجمل الشرطية لإجراء العملية المُناسبة (إذا كان المُدخل + فقم بالجمع).
		</li>
	</ol>

	<p>
		ترجمة -وبتصرف- من الكتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow" target="_blank">Python Practice Book</a> لكاتبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">292</guid><pubDate>Wed, 23 Mar 2016 13:25:00 +0000</pubDate></item><item><title>&#x62D;&#x644;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x643;&#x631;&#x627;&#x631; (Loops) &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%83%D8%B1%D8%A7%D8%B1-loops-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r291/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/python-loops.png.75c0432f2257d4f9d5ff0ac5a91ea6f9.png" /></p>
<div id="wmd-preview-section-26">
	<p>
		بعد أن تعلّمنا في الدّرس السّابق <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/" rel="">كيفيّة التّعامل مع التّعابير الشّرطية</a>، وكيفيّة استعمال الجمل الشّرطية في برامجنا وكيفّية القيّام بإزاحة مناسبة عند التّعامل مع أجزاء متعدّدة من الشّيفرة في لغة بايثون، سنكمل مشوار تعلّم هذه اللغة الجميلة. سنتعلّم في هذا الدّرس كيفيّة التّعامل مع حلقات التّكرار مثل حلقة <span style="font-family:courier new,courier,monospace;">for</span> وحلقة <span style="font-family:courier new,courier,monospace;">while</span>. مع التذكير بأنّ جميع الشّيفرات التّي تبدأ بعلامة <strong>&lt;&lt;&lt; </strong>يجب أن تنفّذ على مفسر بايثون.
	</p>

	<p style="text-align: center;">
		<img alt="python-loops.png.f0688d15821395a907597c8" class="ipsImage ipsImage_thumbnailed" data-fileid="13675" data-unique="yqqvqlcws" src="https://academy.hsoub.com/uploads/monthly_2016_03/python-loops.png.f0688d15821395a907597c817926258c.png">
	</p>
</div>

<div id="wmd-preview-section-28">
	<p id="حلقات-التكرار">
		تُمكّنك الحلقات من تكرار شيفرة عددا من المرّات، يُمكنك أن تحدّد عدد مرّات التّكرار حسب إرادتك.
	</p>
</div>

<div id="wmd-preview-section-29">
	<h2 id="حلقة-while">
		حلقة While
	</h2>

	<p>
		حلقة While تقوم بتكرار شيفرة ما عندما يكون الشّرط محقّقا ولا تتوقّف إلا عندما يكون الشّرط خاطئا، ولإنشاء حلقة <span style="font-family:courier new,courier,monospace;">while</span> يجب تحديد عدد المرّات التّي تتكرّر فيها ووضعها كشرط ثم زيادة قيمة مُتغيّر بواحد، بحيث يزداد إلى أن يصل إلى العدد المُحدّد في الشّرط فيتوقّف. بإمكانك أيضًا تحديد شرط من نوع آخر بحيث لا ترتبط الحلقة بتنفيذ الشيفرة بعدد مُعيّن من المرّات وإنما بتحقق شرط مُعيّن (أن تصبح قيمة مُتغيّر مُخالفة لقيمة نقوم بتحديدها) <br>
		لنقل بأنّنا نريد طباعة "Hello" مائة مرّة، بالطّبع قد تقول أكرّر الجملة التالية مائة مرة: 
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_8"><span class="pln">print "Hello"</span></pre>

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

	<p>
		كمثال يُمكننا طباعة "Hello" عشر مرّات بالطّريقة التّاليّة، لاحظ بأنّ الجمل التّابعة للكلمة <span style="font-family:courier new,courier,monospace;">while</span> مُزاحةٌ بأربع مسافات بيضاء:
	</p>
</div>

<div id="wmd-preview-section-30">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_10"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> i </span><span class="pun">&lt;</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">     print </span><span class="str">"Hello"</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     i </span><span class="pun">=</span><span class="pln"> i </span><span class="pun">+</span><span class="lit">1</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_12"><span class="pln">Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello</span></pre>

	<p>
		شرح المثال أعلاه: 
	</p>

	<ul>
		<li>
			<strong>السّطر الأول</strong>: نقوم بوضع قيمة بدئية للمتغيّر <span style="font-family:courier new,courier,monospace;">i</span>. 
		</li>
		<li>
			<strong>السّطر الثّاني</strong>: نقوم بإضافة الشّرط وهو أن تكون قيمة المتغير أصغر من العدد عشرة فإن كان يُساوي 10 يتوقّف البرنامج. 
		</li>
		<li>
			<strong>السّطر الثّالث</strong>: نقوم بطباعة الكلمة 
		</li>
		<li>
			<strong>السّطر الرّابع</strong>: نقوم بزيّادة قيمة المتغير
		</li>
	</ul>

	<p>
		في المرّة الأولى سيقرأ المفسّر قيمة المُتغيّر فيجدها تُساوي العدد 0، ثمّ يتحقّق من أنّ شرط أن تكون القيمة أصغر من 10 صحيح، وبما أنّ الشّرط مُحقّق في المرّة الأولى (بالطّبع لأنّ 0 أصغر من 10) سيُتابع البرنامج العمل، وسيطبع جملة التّرحيب "Hello" بعد ذلك يزيد المُفسّر قيمة المتغيّر<span style="font-family:courier new,courier,monospace;"> i</span> بواحد (لتكون القيمة الجديدة هي 1) يتحقّق المُفسّر من صحّة الشّرط مُجدّدا وبما أنّه مُحقّق فقد طُبعت الجملة "Hello" مرّة ثانيّة، بعدها يزيد من قيمة المُتغيّر بواحد مجدّدا لتكون القيمة الجديدة للمُتغيّر<span style="font-family:courier new,courier,monospace;"> i </span>هي العدد 2 والذي بدوره أصغر من 10 فتُطبع الجملة مرّة ثالثة. وهكذا دواليك إلى أن تصل قيمة المُتغيّر إلى العدد 10 فيُصبح الشّرط خاطئا (لأنّ العدد 10 ليس أصغر من 10 بل مُساو له)، وبالتّالي يتوقّف التّكرار. 
	</p>

	<p>
		لتستوضح الأمر بشكل أفضل، يُمكنك أن تطبع قيمة المُتغيّر <span style="font-family:courier new,courier,monospace;">i </span>عند كلّ تكرار، انظر المثال:
	</p>
</div>

<div id="wmd-preview-section-31">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_14"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> i </span><span class="pun">&lt;</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">     print </span><span class="str">"Hello"</span><span class="pun">,</span><span class="pln"> i
</span><span class="pun">...</span><span class="pln">     i </span><span class="pun">=</span><span class="pln"> i </span><span class="pun">+</span><span class="lit">1</span><span class="pln">
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_16"><span class="pln">Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9</span></pre>

	<h2>
		أمثلة تطبيقية لاستعمال حلقة While
	</h2>
</div>

<div id="wmd-preview-section-33">
	<h3 id="مثال-1-الوصول-إلى-عناصر-قائمة-مجموعة-صف">
		مثال 1: الوصول إلى عناصر قائمة، مجموعة أو صف
	</h3>

	<p>
		هناك عدّة أمثلة تطبيقيّة لاستعمال حلقة While، وعلى سبيل المثال يُمكن أن تُستخدم حلقة التّكرار هذه للدّوران على قائمة وطباعة عناصرها، انظر المثال التّالي:
	</p>
</div>

<div id="wmd-preview-section-34">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_18"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> I </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> children </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'Omar'</span><span class="pun">,</span><span class="str">'Khaled'</span><span class="pun">,</span><span class="str">'Hassan'</span><span class="pun">,</span><span class="str">'Zaid'</span><span class="pun">,</span><span class="str">'Youssef'</span><span class="pun">]</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">children</span><span class="pun">):</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print children</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     i </span><span class="pun">=</span><span class="pln"> i </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_20"><span class="pln">Omar
Khaled
Hassan
Zaid
Youssef</span></pre>

	<p>
		في المثال أعلاه، قُمنا بإنشاء قائمة باسم <span style="font-family:courier new,courier,monospace;">children</span> تحتوي على خمسة عناصر، ثمّ قُمنا بطباعة كلّ عنصر عند كلّ تكرار، وقد وضعنا وجوب أن تكون قيمة المُتغيّر <span style="font-family:courier new,courier,monospace;">i</span> أصغر من عدد عناصر القائمة والتّي حدّدناها بمُساعدة الدّالة <span style="font-family:courier new,courier,monospace;">len</span>، وذلك ليتوقّف البرنامج عند وصول قيمة المتغير إلى العدد 5. 
	</p>

	<p>
		<strong>مُلاحظة</strong>: هذا مجرّد مثال لكيفيّة استخدام حلقة While. وعادة ما تُستخدم الحلقة <span style="font-family:courier new,courier,monospace;">for</span> لمثل هذه التّطبيقات (الدّوران على القوائم، المجموعات والصفوف…) وذلك لأنّها أكثر مرونة، وفي النّهاية يعود الاختيار لك (ويُمكنك استخدام الطّريقة التّي تُناسبك).
	</p>
</div>

<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>

<div id="wmd-preview-section-35">
	<h3 id="مثال-2-عمل-البرنامج-إلى-أن-يجيب-المستخدم-بجواب-معين">
		مثال 2: عمل البرنامج إلى أن يجيب المستخدم بجواب معين
	</h3>

	<p>
		لنقل بأنّك سألت المُستخدم سؤالا رياضيا (مثلا: "ما جمع 4 زائد 3" )، وتريد تهنأته عند إدخال الجواب الصحيح، الأمر بسيط، ولا يتعدى بضعة أسطر، افتح ملفّا وسمّه <span style="font-family:courier new,courier,monospace;">Answer.py</span>، وضع فيه الأسطر التّالية:
	</p>
</div>

<div id="wmd-preview-section-36">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_22"><span class="pln">number </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter the Result of 3+4: '</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">int</span><span class="pun">(</span><span class="pln">number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln">
    print </span><span class="str">'Congratulation'</span></pre>

	<p>
		نستخدم الدّالة <span style="font-family:courier new,courier,monospace;">int</span> هنا لتحويل القيمة المُدخلة من طرف المُستخدم إلى قيمة من نوع integer أي عدد صحيح، وهذا مُفيد لأنّ القيمة التّي تُستقبل في الدّالة <span style="font-family:courier new,courier,monospace;">raw_input </span>تكون عبارة عن سلسلة نصيّة. 
	</p>

	<p>
		بعد أن قُمنا بجزء من المطلوب لنفترض بأنّ المُستخدم قد أدخل إجابة خاطئة، الأمر الذي قد يخطر في بالك الآن هو طباعة جملة تُفيد المُستخدم بأنّ إجابته خاطئة والخروج من البرنامج، الأمر جيّد ، ولكن ماذا لو أردنا أن نوفّر للمُستخدم حقّ المُحاولة من جديد، بحيث يطبع البرنامج جملة تفيد بأنّ الإجابة المُدخلة خاطئة ثمّ يطلب من المُستخدم أن يُحاول مجدّدا مع توفير إمكانيّة إدخال قيمة جديدة، يُمكن أن نقوم بذلك بالاستعانة بجملة <span style="font-family:courier new,courier,monospace;">else</span> انظر المثال التّالي:
	</p>
</div>

<div id="wmd-preview-section-37">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_24"><span class="pln">number </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter the Result of 3+4: '</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">int</span><span class="pun">(</span><span class="pln">number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln">
    print </span><span class="str">'Congratulation!'</span><span class="pln">
</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    print </span><span class="str">'Sorry, Your Answer is not correct, please try again:'</span><span class="pln">
    number </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter the Result of 3+4: '</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">int</span><span class="pun">(</span><span class="pln">number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln">
        print </span><span class="str">'Congratulation!'</span></pre>

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

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

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

<div id="wmd-preview-section-38">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_26"><span class="pln">number </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Enter the Result of 3+4: '</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">while</span><span class="pln"> </span><span class="kwd">int</span><span class="pun">(</span><span class="pln">number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln">
    number </span><span class="pun">=</span><span class="pln"> raw_input</span><span class="pun">(</span><span class="str">'Wrong answer please try again, enter the Result of 3+4: '</span><span class="pun">)</span><span class="pln">
print </span><span class="str">'Congratulation'</span></pre>

	<ul>
		<li>
			<strong>السّطر الأول</strong>: يقوم البرنامج بطلب الإجابة من المُستخدم.
		</li>
		<li>
			<strong>السّطر الثاني</strong>: تتحقّق حلقة While من كون الإجابة خاطئة، إذا تحقّق الشّرط، ينتقل البرنامج إلى السّطر الثالث، إذا لم يتحقّق (أي قيمة المتغير تساوي 7)، ينتقل البرنامج إلى السّطر الرابع. 
		</li>
		<li>
			<strong>السّطر الثالث</strong>: يقوم البرنامج بإخبار المُستخدم بأنّ الإجابة خاطئة ويطلب منه إعادة المُحاولة. 
		</li>
		<li>
			<strong>السّطر الرابع</strong>: يطبع البرنامج جملة التهنئة.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-39">
	<h2 id="حلقة-التكرار-for">
		حلقة التكرار For
	</h2>

	<p>
		حلقة For جملة برمجية أخرى تُمكّن من التكرار، وهي من الأساليب المُستعملة للدوران حول قيم القوائم كذلك، وتتميّز بتعريف مُتغيّر العدّ في بداية الحلقة، أي أنّك على خلاف حلقة While لا تحتاج إلى تعريف المُتغيّر قبل البدء بكتابة الحلقة، كما أنّ حلقة for لا تحتاج إلى شرط معيّن بل تُحدّد عدد مرّات التّكرار حسب عدد عناصر القائمة المُسندة. انظر المثال التّالي، لاحظ بأنّ الجمل التّابعة للسّطر <span style="font-family:courier new,courier,monospace;">(for counter in range(1, 11</span> مُزاحةٌ بأربع مسافات بيضاء (انظر <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/" rel="">درس الإزاحات والمساحات البيضاء</a>).
	</p>
</div>

<div id="wmd-preview-section-40">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_29"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> counter in range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">):</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print counter</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Hello World!'</span><span class="pln">
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_31"><span class="pln">1 Hello World!
2 Hello World!
3 Hello World!
4 Hello World!
5 Hello World!
6 Hello World!
7 Hello World!
8 Hello World!
9 Hello World!
10 Hello World!</span></pre>

	<p>
		في المثال أعلاه أنشأنا حلقة تكرار تدور على قائمة أنشأناها باستخدام الدّالة <span style="font-family:courier new,courier,monospace;">range</span>، وأسندنا قيم التّكرار إلى المتغيّر <span style="font-family:courier new,courier,monospace;">counter</span> الاختلاف هنا عن حلقة <span style="font-family:courier new,courier,monospace;">while</span> هو أنّ المُتغيّر <span style="font-family:courier new,courier,monospace;">counter</span> يعتبر جزءا من قائمة وليس مُتغيّرا يحمل قيمة في كلّ تكرار.
	</p>

	<p>
		<strong>مُلاحظة</strong>: لدّالة <span style="font-family:courier new,courier,monospace;">range</span> تقوم بإنشاء قائمة أعداد مرتّبة من الأصغر إلى الأكبر حسب عاملين الأول رقم البداية والثّاني يُمثّل النّهاية مع ملاحظة بأنّ الرّقم النّهائي في السّلسلة لا يحتسب (في المثال التّالي 1 هو العدد الأول والعدد النّهائي هو العدد 11 ).
	</p>
</div>

<div id="wmd-preview-section-41">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_41"><span class="pln">&gt;&gt;&gt; range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</span></pre>

	<p>
		يُمكن إنشاء قائمة معكوسة بتمرير معامل ثالث بقيمة 1- وقلب المعاملات:
	</p>
</div>

<div id="wmd-preview-section-42">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_43"><span class="pln">&gt;&gt;&gt; range(10, 0, -1)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]</span></pre>

	<p>
		تُمكّنُ حلقة <span style="font-family:courier new,courier,monospace;">for</span> من الدّوران على عناصر مجموعة ما (القوائم الصفوف، السّلاسل النّصيّة…) عن طريق تمرير اسم المُتغيّر بعد كلمة <span style="font-family:courier new,courier,monospace;">in</span> في الشيفرة، لاحظ بأنّ الجمل التّابعة للسّطر<span style="font-family:courier new,courier,monospace;"> for lettre in v </span>مُزاحةٌ بأربع مسافات بيضاء (انظر <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/" rel="">الدّرس السّابق</a>).
	</p>
</div>

<div id="wmd-preview-section-43">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_46"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> v </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello"</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> lettre in v</span><span class="pun">:</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print lettre
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_48"><span class="pln">H
e
l
l
o</span></pre>

	<p>
		في المثال أعلاه، قمنا بتعيين القيمة "Hello" للمتغير <span style="font-family:courier new,courier,monospace;">v</span> وبعدها استخدمنا حلقة <span style="font-family:courier new,courier,monospace;">for</span> لكي نطبع كل حرف من هذه الكلمة والذي عيّناه للمتغير <span style="font-family:courier new,courier,monospace;">lettre</span>.
	</p>

	<p>
		كما رأينا من قبل يُمكن كذلك استخدام <span style="font-family:courier new,courier,monospace;">for</span> لتكرار شيفرة ما عددا من المرّات، كما فعلنا مع حلقة <span style="font-family:courier new,courier,monospace;">while</span> بمُساعدة الدّالة <span style="font-family:courier new,courier,monospace;">range</span>:
	</p>
</div>

<div id="wmd-preview-section-44">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_50"><span class="kwd">for</span><span class="pln"> i in range</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">100</span><span class="pun">):</span><span class="pln">
    print i</span></pre>

	<p>
		يُمكن كذلك أن نستعمل حلقة <span style="font-family:courier new,courier,monospace;">for</span> لنقوم بالمرور على مفاتيح قاموس ما لنحصل على كل مفتاح على حدة، انظر المثال التالي:
	</p>
</div>

<div id="wmd-preview-section-45">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_52"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln">

</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> key in a</span><span class="pun">:</span><span class="pln">
</span><span class="pun">...</span><span class="pln">    print key
</span><span class="pun">...</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_54"><span class="pln">x
y
z</span></pre>

	<p>
		وكما قلنا سابقا في الدّرس الرابع، يُمكنك الحصول على كل من مفاتيح وقيم وعناصر قاموس على شكل قائمة:
	</p>
</div>

<div id="wmd-preview-section-46">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_56"><span class="pln">&gt;&gt;&gt; a = {'x': 1, 'y': 2, 'z': 3}
&gt;&gt;&gt; a.keys()
['x', 'y', 'z']
&gt;&gt;&gt; a.values()
[1, 2, 3]
&gt;&gt;&gt; a.items()
[('x', 1), ('y', 2), ('z', 3)]</span></pre>

	<p>
		ومما سبق نستنتج بأنّنا نستطيع الحصول على كل واحدة من قيم القاموس:
	</p>
</div>

<div id="wmd-preview-section-47">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_58"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> value in a</span><span class="pun">.</span><span class="pln">values</span><span class="pun">():</span><span class="pln">
</span><span class="pun">...</span><span class="pln">    print value
</span><span class="pun">...</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_60"><span class="pln">1
2
3</span></pre>

	<p>
		وبالتّالي يُمكنك أن تستنتج بأنّنا نستطيع المرور على كل من مفاتيح القواميس وقيمها معا في نفس الوقت:
	</p>
</div>

<div id="wmd-preview-section-48">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_62"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln">

</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> value in a</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">
</span><span class="pun">...</span><span class="pln">    print key</span><span class="pun">,</span><span class="pln"> value
</span><span class="pun">...</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_64"><span class="pln">x 1
y 2
z 3</span></pre>

	<h2>
		أمثلة تطبيقية لاستعمال حلقة For
	</h2>
</div>

<div id="wmd-preview-section-50">
	<h3 id="مثال-1-طباعة-مفاتيح-وقيم-قاموس-معين">
		مثال 1: طباعة مفاتيح وقيم قاموس معين
	</h3>

	<p>
		يُمكننا أن نستعمل حلقة <span style="font-family:courier new,courier,monospace;">for</span> لطباعة كل مفتاح وقيمته في قاموس ما. 
	</p>

	<p>
		لنقل مثلا بأنّنا نمتلك قاموسا يحتوي على أسماء الألوان وشيفرة كلّ لون بنظام hex (نظام يستخدمه مطورو الويب لإسناد لون مُعيّن لعنصر ما، فعوضا عن كتابة اسم اللون تُستخدم شيفرته)، ونُريد أن نطبع كل لون متبوعا بشيفرته، القاموس الذي نمتلكه هو كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-51">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_66"><span class="pln">colors = {
    "red":"#f00",
    "green":"#0f0",
    "blue":"#00f",
    "cyan":"#0ff",
    "magenta":"#f0f",
    "yellow":"#ff0",
    "black":"#000"
}</span></pre>

	<p>
		ونريد أن نعرض هذه المفاتيح مع قيمها بشكل لطيف، هل يُمكنك أن تُفكّر في طريقة لإنجاز مرادنا؟ 
	</p>

	<p>
		الحل يكون باستخدام حلقة <span style="font-family:courier new,courier,monospace;">for</span> للمرور على كل مفتاح وقيمته ومن ثمَّ طباعتها، يُمكننا القيام بذلك بسطرين فقط من شيفرة بايثون، وذلك كالتّالي (ضعها في ملف بامتداد <span style="font-family:courier new,courier,monospace;">py</span> ونفّذ الملف).
	</p>
</div>

<div id="wmd-preview-section-52">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_68"><span class="pln">colors </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="str">"red"</span><span class="pun">:</span><span class="str">"#f00"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"green"</span><span class="pun">:</span><span class="str">"#0f0"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"blue"</span><span class="pun">:</span><span class="str">"#00f"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"cyan"</span><span class="pun">:</span><span class="str">"#0ff"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"magenta"</span><span class="pun">:</span><span class="str">"#f0f"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"yellow"</span><span class="pun">:</span><span class="str">"#ff0"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">"black"</span><span class="pun">:</span><span class="str">"#000"</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> color_name</span><span class="pun">,</span><span class="pln"> hex_value in colors</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">
    print color_name </span><span class="pun">+</span><span class="pln"> </span><span class="str">': '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> hex_value</span></pre>

	<p>
		مُخرجات البرنامج ستكون كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-53">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_70"><span class="pln">blue: #00f
yellow: #ff0
green: #0f0
cyan: #0ff
magenta: #f0f
red: #f00
black: #000</span></pre>

	<p>
		هذا مُجرّد مثال بسيط على استخدام كل من حلقة <span style="font-family:courier new,courier,monospace;">for</span> والقواميس على أرض الواقع، ولا يجب عليك أن تضع حدّا لإبداعك، إذ يُمكنك استخدام ما تعلّمته بطرق مُختلفة وبرمجة برمجيات تقوم بوظائف لا محدودة، لذا لا تربط علمك بهذه الأمثلة، بل فكّر في طريقة للاستفادة مما تعلّمته لإنتاج برامج أكثر تعقيدا وذات وظائف مُتعدّدة، وسيُسعدني إن شاركت برامجك معنا.
	</p>
</div>

<div id="wmd-preview-section-54">
	<h2 id="إيقاف-حلقة-بجملة-break">
		إيقاف حلقة بجملة :break
	</h2>

	<p>
		يُمكن أن توقف حلقة تكراريّة من نوع <span style="font-family:courier new,courier,monospace;">while</span> عند نقطة معيّنة بالجملة <span style="font-family:courier new,courier,monospace;">break</span> ويُمكن تحديد نقطة التوقف باستخدام جملة <span style="font-family:courier new,courier,monospace;">if</span> الشّرطيّة، انظر المثال:
	</p>
</div>

<div id="wmd-preview-section-55">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_72"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">30</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"> i </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">15</span><span class="pun">:</span><span class="pln">
</span><span class="pun">...</span><span class="pln">         print </span><span class="str">"Stop the loop"</span><span class="pln">
</span><span class="pun">...</span><span class="pln">         </span><span class="kwd">break</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print i
</span><span class="pun">...</span><span class="pln">     i </span><span class="pun">=</span><span class="pln"> i </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_74"><span class="pln">0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Stop the loop</span></pre>

	<p>
		في المثال أعلاه، كان من المُفترض أن تُكمل الحلقة التنفيذ إلى أن يصل المُتغيّر iإلى القيمة 30، ولكنّه توقّف بمُجرّد أن وصلت قيمة المُتغيّر إلى 15 وهذا لأنّنا وضعنا شرطا لإيقاف التكرار عندما تُصبح قيمة<span style="font-family:courier new,courier,monospace;"> i</span> أكبر من 15 وبما أنّ الشّرط أصبح صحيحا فقد توقّف البرنامج لأنّنا أمرناه بالجملة <span style="font-family:courier new,courier,monospace;">break</span>.
	</p>

	<p>
		ويُمكن كذلك أن توقف حلقة تكراريّة من نوع <span style="font-family:courier new,courier,monospace;">for</span> عند نقطة معيّنة بالجملة <span style="font-family:courier new,courier,monospace;">break</span> ويُمكن تحديد نقطة التوقف باستخدام جملة <span style="font-family:courier new,courier,monospace;">if</span> الشّرطيّة:
	</p>
</div>

<div id="wmd-preview-section-56">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_76"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> list </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">5</span><span class="pun">,</span><span class="lit">10</span><span class="pun">,</span><span class="lit">15</span><span class="pun">,</span><span class="lit">20</span><span class="pun">,</span><span class="lit">25</span><span class="pun">]</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> i in list</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"> i </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">15</span><span class="pun">:</span><span class="pln">
</span><span class="pun">...</span><span class="pln">             print </span><span class="str">"Stop the loop"</span><span class="pln">
</span><span class="pun">...</span><span class="pln">             </span><span class="kwd">break</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print i
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_78"><span class="pln">1
5
10
15
Stop the loop</span></pre>

	<p>
		في المثال أعلاه، توقّف الدوران على القائمة <span style="font-family:courier new,courier,monospace;">list</span> بعد أن وصل المتغيّر إلى القيمة 15، وهذا هو الشرط الذي وضعناه في جملة <span style="font-family:courier new,courier,monospace;">if</span>.
	</p>
</div>

<div id="wmd-preview-section-57">
	<h2 id="تجاهل-تنفيذ-الشيفرة-في-حلقة-بجملة-continue">
		تجاهل تنفيذ الشيفرة في حلقة بجملة :continue
	</h2>

	<p>
		يُمكن أن توقف حلقة تكراريّة من نوع <span style="font-family:courier new,courier,monospace;">for</span> عند نقطة معيّنة ثمّ تُكمل التكرار في الخطوة التّاليّة، أي قفز خطوة عند التّكرار، وذلك بالاستعانة بالجملة <span style="font-family:courier new,courier,monospace;">continue</span> ويُمكن تحديد نقطة التوقف باستخدام جملة <span style="font-family:courier new,courier,monospace;">if</span> الشّرطيّة، يعني أنّك تستطيع إخبار البرنامج بالانتقال إلى التنفيذ التّالي إذا ما تحقّق هذا الشّرط، انظر المثال:
	</p>
</div>

<div id="wmd-preview-section-58">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_80"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> list </span><span class="pun">=</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">31</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> i in list</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"> i </span><span class="pun">==</span><span class="pln"> </span><span class="lit">15</span><span class="pun">:</span><span class="pln">
</span><span class="pun">...</span><span class="pln">             print </span><span class="str">"Continue the loop"</span><span class="pln">
</span><span class="pun">...</span><span class="pln">             </span><span class="kwd">continue</span><span class="pln">
</span><span class="pun">...</span><span class="pln">     print i
</span><span class="pun">...</span><span class="pln"> </span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_82"><span class="pln">1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue the loop
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30</span></pre>

	<p>
		في المثال أعلاه، كان من المُفترض أن تُكمل الحلقة التنفيذ إلى أن يصل المُتغيّر iإلى القيمة 30، ولكنّه توقّف بمُجرّد أن وصلت قيمة المُتغيّر إلى 15 وتابعت عندما وصلت القيمة إلى العدد 16 وهذا لأنّنا وضعنا شرطا لإيقاف التكرار عندما تُساوي قيمة i العدد 15 وبما أنّ الشّرط قد تحقّق فقد توقّف البرنامج عند تلك النّقطة وطبع جملة Continue the loop لأنّنا أمرناه بالجملة continue.
	</p>
</div>

<div id="wmd-preview-section-59">
	<h2 id="تمارين">
		تمارين
	</h2>

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

	<p>
		يُمكنك أن تنشر حلول التّمارين في صندوق التعليقات إذا كنت ترغب في ذلك، ومن المفضل أن تُحاول حل التّمارين بنفسك قبل أن تنظر إلى أجوبة زملائك.
	</p>
</div>

<div id="wmd-preview-section-60">
	<h3 id="تمرين-1">
		تمرين 1
	</h3>

	<p>
		اكتب برنامجين يقومان بطباعة جملة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_33"><span class="pln"> Hello World!</span></pre>

	<p>
		1000 مرة. البرنامج الأول باستخدام حلقة While والثاني بحلقة For.
	</p>
</div>

<div id="wmd-preview-section-61">
	<h3 id="تمرين-2">
		تمرين 2
	</h3>

	<p>
		اكتب برنامجا يقوم بأخذ قيمة من المُستخدم ثمّ يطبعها 10 مرات.
	</p>
</div>

<div id="wmd-preview-section-62">
	<h3 id="تمرين-3">
		تمرين 3
	</h3>

	<p>
		ما مُخرجات البرنامج التّالي:
	</p>
</div>

<div id="wmd-preview-section-63">
	<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2279_35"><span class="pln">number </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">
list </span><span class="pun">=</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">31</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> i in list</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> i </span><span class="pun">==</span><span class="pln"> number</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">continue</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="lit">15</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">21</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">continue</span><span class="pln">     
    print i</span></pre>

	<h3>
		تمرين 4
	</h3>
</div>

<div id="wmd-preview-section-64">
	<p>
		اكتب برنامجا يقوم بطباعة عناصر القائمة التّالية مع جملة ترحيب.
	</p>
</div>

<div id="wmd-preview-section-65">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_37"><span class="pln">list = ['Ahmed', 'Abdelhadi', 'Dyouri', 'Hossam', 'Mohammed', 'Khaled', 'Ibrahim', 'Othman']</span></pre>

	<p>
		يجب أن تكون مُخرجات البرنامج كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-66">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2279_39"><span class="pln">Hello, Ahmed
Hello, Abdelhadi
Hello, Dyouri
Hello, Hossam
Hello, Mohammed
Hello, Khaled
Hello, Ibrahim
Hello, Othman</span></pre>

	<h3>
		تمرين 5
	</h3>
</div>

<div id="wmd-preview-section-67">
	<p>
		عد إلى الدّرس السّابق وعدّل برنامج تسجيل الدخول لكي يقبل مُحاولة المُستخدم من جديد إذا كانت كلمة السّر خاطئة. ولا تنس أن تنشر برنامجك في قسم التّعليقات على هذا المقال إذا أردت ذلك.
	</p>

	<p>
		ترجمة -وبتصرف- من الكتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow" target="_blank">Python Practice Book</a> لصاحبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">291</guid><pubDate>Thu, 03 Mar 2016 08:32:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x628;&#x64A;&#x631; &#x627;&#x644;&#x634;&#x631;&#x637;&#x64A;&#x629; &#x648;&#x627;&#x644;&#x625;&#x632;&#x627;&#x62D;&#x627;&#x62A; (&#x627;&#x644;&#x645;&#x633;&#x627;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x628;&#x64A;&#x636;&#x627;&#x621;) &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%A5%D8%B2%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%B6%D8%A7%D8%A1-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r285/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/python-cond-indent.png.4248eb41abbd8e7325dc3870f3273f43.png" /></p>

<div id="wmd-preview-section-11">
	<p id="التعابير-الشرطية-والإزاحات-المساحات-البيضاء-في-بايثون">
		بعد أن تعلّمنا في الدّرس السّابق <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B5%D9%81%D9%88%D9%81%D8%8C-%D8%A7%D9%84%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D9%88%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-r226/">كيفيّة التعامل مع كل من الصفوف، المجموعات والقواميس في لغة بايثون</a> ، سنكمل مشوار تعلّم هذه اللغة الجميلة. سنتعلّم في هذا الدّرس كيفيّة التّعامل مع التّعابير الشّرطية، و كيفيّة استعمال الجمل الشّرطية في برامجنا وكيفّية القيّام بإزاحة مناسبة عند التّعامل مع أجزاء متعدّدة من الشّيفرة، وسنكمل هذا الدّرس بمثال تطبيقي يتجلى في برنامج تسجيل حساب والولوج إليه. مع التذكير بأنّ جميع الشّيفرات التّي تبدأ بعلامة <strong>&lt;&lt;&lt;</strong> يجب أن تنفّذ على مفسر بايثون.
	</p>

	<p style="text-align: center;">
		<img class="ipsImage ipsImage_thumbnailed" data-fileid="13036" data-unique="8kcod8ja5" src="https://academy.hsoub.com/uploads/monthly_2016_02/python-cond-indent.png.ed15af48ea4df168471b67ce0ccb5b24.png" alt="python-cond-indent.png.ed15af48ea4df1684"></p>
</div>

<div id="wmd-preview-section-13">
	<h2 id="التعابير-الشرطية-conditional-expressions">
		التعابير الشرطية Conditional Expressions
	</h2>

	<p>
		توفّر لنا لغة بايثون عدّة مُعاملات لمُقارنة القيّم، ونتيجة المُقارنة تكون قيمة منطقيّة Boolean إمّا True أو False.
	</p>
</div>

<div id="wmd-preview-section-14">
	<pre class="ipsCode" id="ips_uid_630_8">
&gt;&gt;&gt; 2 &lt; 3
False
&gt;&gt;&gt; 2 &gt; 3
True</pre>

	<p>
		إليك قائمة بالمُعاملات المُتوفّرة في لغة بايثون.
	</p>

	<ul><li>
			<strong>==</strong> يُساوي
		</li>
		<li>
			<strong>=!</strong> لا يُساوي
		</li>
		<li>
			<strong>&gt;</strong> أصغر من
		</li>
		<li>
			<strong>&lt;</strong> أكبر من
		</li>
		<li>
			<strong>=&gt;</strong> أصغر من أو تُساوي
		</li>
		<li>
			<strong>=&lt;</strong> أكبر من أو تُساوي
		</li>
	</ul><p>
		ويُمكن استعمال هذه المُعاملات أكثر من مرّة في السّطر الواحد:
	</p>
</div>

<div id="wmd-preview-section-15">
	<pre class="ipsCode" id="ips_uid_630_10">
&gt;&gt;&gt; x = 5
&gt;&gt;&gt; 2 &lt; x &lt; 10
True
&gt;&gt;&gt; 2 &lt; 3 &lt; 4 &lt; 5 &lt; 6
True</pre>

	<p>
		وتعمل المعاملات على السّلاسل النّصية كذلك (التّرتيب يكون بشكل معجمي، أي حسب ترتيب الكلمات في المُعجم).
	</p>
</div>

<div id="wmd-preview-section-16">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_630_12">
<span class="pln">&gt;&gt;&gt; "python" &gt; "perl"
True
&gt;&gt;&gt; "python" &gt; "java"
True</span></pre>

	<p>
		يُمكن الجمع بين القيّم المنطقيّة بمعاملات منطقيّة:
	</p>

	<ul><li>
			<strong><span style="font-family:courier new,courier,monospace;">a and b</span></strong>: صحيح فقط إذا كان كل من a و b يحملان القيمة True.
		</li>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">a or b</span></strong>: صحيح إذا كانت إحدى القيمتين صحيحة.
		</li>
		<li>
			<strong><span style="font-family:courier new,courier,monospace;">not a</span></strong>: صحيح فقط إذا كان a يحمل القيمة False.
		</li>
	</ul><p>
		وإليك مثالا على المُعاملات المنطقيّة:
	</p>
</div>

<div id="wmd-preview-section-17">
	<pre class="ipsCode" id="ips_uid_630_14">
&gt;&gt;&gt; True and True
True
&gt;&gt;&gt; True and False
False
&gt;&gt;&gt; 2 &lt; 3 and 5 &lt; 4
False
&gt;&gt;&gt; 2 &lt; 3 or 5 &lt; 4
True</pre>

	<h3>
		الجملة الشرطية If
	</h3>
</div>

<div id="wmd-preview-section-18">
	<p>
		تُستعمل الجملة الشّرطيّة <span style="font-family:courier new,courier,monospace;">If</span> (إذا كان) لتنفيذ جزء من الشّيفرة إذا كان الشّرط مُحقّقا:
	</p>
</div>

<div id="wmd-preview-section-19">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_15">
<span class="pln">&gt;&gt;&gt; if x % 2 == 0:
...     print 'even'
...

even
&gt;&gt;&gt;</span></pre>

	<p>
		في المثال أعلاه طُبعَت الكلمة <span style="font-family:courier new,courier,monospace;">even</span> لأنّ باقي قسمة 42 على 2 يُساوي صفرا (<strong>x % 2 == 0</strong>)، وبالتّالي فقد تحقّق الشّرط، فلو أنّ الشّرط لم يتحقّق لما أرجع المُفسّر أي نتيجة.
	</p>

	<p>
		يُمكن استخدام <span style="font-family:courier new,courier,monospace;">If</span> كشرط لتنفيذ جزء منفصل من الشيفرة بالإزاحة (انظر فصل الإزاحة والمساحات أسفله)، ويكون هذا الأمر مُفيدا عندما يحتوي برنامجك على الكثير من الجمل. لاحظ بأنّ الجمل التّابعة للسّطر <span style="font-family:courier new,courier,monospace;">if x % 2 == 0</span> مُزاحةٌ بأربع مسافات بيضاء.
	</p>
</div>

<div id="wmd-preview-section-20">
	<h3>
		الجملة else
	</h3>
</div>

<div id="wmd-preview-section-21">
	<p>
		يُمكن أن تزيد على جملة <span style="font-family:courier new,courier,monospace;">If</span> بند <span style="font-family:courier new,courier,monospace;">else</span> وترجمته (وإلّا / إذا لم يكن ذلك صحيحًا)، والتي تنفّذ الشيفرة التّي من بعدها إذا كان الشّرط الأول خاطئا.
	</p>
</div>

<div id="wmd-preview-section-22">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_18">
<span class="pln">&gt;&gt;&gt; x = 3
&gt;&gt;&gt; if x % 2 == 0:
...     print 'even'
... else:
...     print 'odd'
...
odd
&gt;&gt;&gt;</span></pre>

	<p>
		في المثال أعلاه، كان الشّرط الأول خاطئا لأن باقي قسمة 3 على 2 لا يُساوي صفرًا، ولذلك انتقل البرنامج لتنفيذ الشّيفرة بعد جملة <span style="font-family:courier new,courier,monospace;">else</span> وقام بطباعة كلمة odd.
	</p>
</div>

<div id="wmd-preview-section-23">
	<h3 id="الجملة-elif">
		الجملة elif
	</h3>

	<p>
		يُمكن كذلك أن تزيد جملة <span style="font-family:courier new,courier,monospace;">elif</span> وهي اختصار لـ <span style="font-family:courier new,courier,monospace;">else if</span> والتّي تعني "إذا لم يتحقّق الشرط فانظر الشّرط التّالي":
	</p>
</div>

<div id="wmd-preview-section-24">
	<pre class="ipsCode" id="ips_uid_4795_20">
&gt;&gt;&gt; x = 42
&gt;&gt;&gt; if x &lt; 10:
...     print 'one digit number'
... elif x &lt; 100:
...     print 'two digit number'
... else:
...     print 'big number'
...
two digit number
&gt;&gt;&gt;</pre>

	<p>
		في المثال أعلاه، هناك شرطان مختلفان، أولا عند تحقّق شرط كون قيمة المتغيّر<span style="font-family:courier new,courier,monospace;"> x</span> أصغر من العدد 10 فسيطبع البرنامج الجملة التي تقول بأنّ قيمة المتغير<span style="font-family:courier new,courier,monospace;"> x </span>عبارة عن رقم واحد، إذا لم يتحقّق الشّرط السّابق فسينتقل البرنامج إلى الشّرط الذي يليه وهو ما يتبع الجملة <span style="font-family:courier new,courier,monospace;">elif</span> أي إذا كانت قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">x</span> أصغر من 100 فسيطبع البرنامج الجملة التي تفيد بأنّ قيمة المتغير <span style="font-family:courier new,courier,monospace;">x</span> عبارة عن رقمين والجملة <span style="font-family:courier new,courier,monospace;">else</span> تنفَّذُ إذا لم يتحقّق أي شرط وتفيد بأنّ قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">x</span> عبارة عن عدد كبير (لأنّه يتكون من 3 أرقام فأكثر).
	</p>
</div>

<div id="wmd-preview-section-25">
	<h2 id="المساحة-والمسافات-والإزاحة">
		المساحة والمسافات والإزاحة
	</h2>

	<p>
		المساحات التّي تسبق الشّيفرات في بايثون مُهمّة جدّا لترتيب شيفرة البرنامج ولتسهيل قراءته، كما أنّها تكون ضروريّة في بايثون، فإن لم تتّبع قوانين الإزاحة فلن يعمل البرنامج، وتُستعمل هذه الطّريقة لفصل الشّيفرات التّابعة لجزء معيّن من البرنامج، والإزاحة تكون بكتابة الشّيفرة بعد عدد معيّن من المسافات، ومن المُفضّل أن تكون أربع مسافات بيضاء، انظر المثال:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_630_22">
<span class="pln">هل الشّرط محقّق؟ 
.... نعم الشّرط محقّق 
.... لا الشرط غير محقق
انتهى البرنامج</span></pre>

	<p>
		في المثال أعلاه، الجملتان "نعم الشّرط محقّق" و "لا الشّرط غير محقّق" تابعتان للجملة "هل الشّرط محقّق؟" أمّا الجملة "انتهى البرنامج" فتابعة للبرنامج عامّة. وقد اعتمدت على النّقاط لتوضيح فكرة الإزاحة فقط وعليك أن تستبدل النّقاط بالمسافات في ملفّات بايثون.
	</p>

	<p>
		يُمكن كذلك أن تكون الشّيفرة تابعة لجملة ما، والتّي بدورها تابعة لجملة أخرى، لتتّضحك الأمور أكثر، فكّر في شجرة عائلة تتكوّن من الآباء والأولاد:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_24">
<span class="pln">جدّ 
....أب 1 
........ابن 1.1
........ابن 1.2 
....أب 2 
........ابن 2.1 
........ابن 2.2</span></pre>

	<p>
		للجد ابنان، ولكل ابن ابنان، نستنتج من هذا أنّ كلّ ابن تابع لأبيه بإزاحة أربع مسافات، أمّا الحفيد فتابع للجدّ بثماني مسافات.
	</p>

	<p>
		وإلى الآن تعرّفنا على موضع واحد تكون فيه الإزاحة إجباريّة وهي الجمل الشّرطيّة، فمثلا البرنامج التّالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_26">
<span class="pln">x = 42
if x % 2 == 0:
    print 'even'
print 'Hello World'</span></pre>

	<p>
		في المثال أعلاه جميع السّطور المزاحة بأربع مسافات (أي الجملة التي تطبع كلمة even) تُنفّذ عند تحقّق الشّرط فقط، أي أنّها جزء مرتبط بالشّرط في البرنامج، أمّا الشيفرة التي لم تُسبق بمسافات فتنفّذ بشكل طبيعي وتعتبر ضمن البرنامج عامّة.
	</p>
</div>

<div id="wmd-preview-section-26">
	<p>
		أمّا إذا أردنا أن نطبع جملة بعد التّحقّق من شرطين فسيكون البرنامج كالتّالي: 
	</p>

	<p>
		الشّرط الأول محقّق، إذن انتقل إلى الشّرط الثّاني. <br>
		الشّرط الأول غير محقّق، إذن لا تنتقل إلى الشّرط الثّاني. 
	</p>

	<p>
		إليك تطبيقا للأمر في لغة بايثون:
	</p>
</div>

<div id="wmd-preview-section-27">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_28">
<span class="pln"># البرنامج
x = 42
if x % 2 == 0:
    print 'even'
    if x / 2 == 21:
        print '42/2 = 21 Is true'

print 'Hello World'

# المُخرج
even
42/2 = 21 Is true
Hello World</span></pre>

	<p>
		في المثال أعلاه، قمنا بالتّحقّق من أنّ باقي قسمة العدد 42/2 يساوي 0، وبما أنّ الشّرط مُحقّق فقد طبعت الكلمة even وانتقل المُفسّر إلى الشّرط التّالي وهو التّحقّق من أن 42/2 يُساوي 21 وبما أنّه بدوره شرط مُحقّق أيضا فقد قام البرنامج طباعة الجملة 42/2 = 21 Is true وبعدها قام بطباعة الجملة Hello World لأنّها غير مُرتبطة بأي شرط. <br>
		وبطبيعة الحال إذا لم يكن الشّرط الأول محقّقا، فلن ينتقل المُفسّر للشّرط التّالي ولن يقوم بأي شيء حتّى ولو كان الشّرط مُحقّقا.
	</p>
</div>

<div id="wmd-preview-section-28">
	<h2 id="الحصول-على-قيم-من-مستخدم-البرنامج">
		الحصول على قيم من مستخدم البرنامج
	</h2>

	<p>
		يُمكن أن تطلب من المُستخدم أن يُدخل قيمة معيّنة، ثمّ تسند هذه القيمة إلى مُتغيّر في البرنامج، فمثلا لنقل بأنّك ترغب بالتّرحيب بالمُستخدم، أولا يجب أن تطلب منه أن يُدخل اسمه، بعدها تقوم بطباعة الجملة "Hello, Person"، بحيث تستبدل Person بالقيمة التّي أدخلها المُستخدم، انظر المثال:
	</p>
</div>

<div id="wmd-preview-section-29">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_30">
<span class="pln">&gt;&gt;&gt; person = raw_input('Enter your name: ')
&gt;&gt;&gt; 'Hello ', person</span></pre>

	<p>
		إذا نفّذت البرنامج فسيكون المُخرج كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-30">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_32">
<span class="pln">Enter your name: </span></pre>

	<p>
		وبعد إدخال اسمي والضّغط على مفتاح ENTER، فإنّ المُخرج سيكون كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-31">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_34">
<span class="pln">Hello Abdelhadi</span></pre>

	<p>
		ما يحدث هو أن البرنامج يأخذ القيمة المُدخلة ويُسندها للمُتغيّر <span style="font-family:courier new,courier,monospace;">person</span> وبعدها تستطيع أنت أن تطبع المُتغيّر للمُستخدم.
	</p>
</div>

<div id="wmd-preview-section-32">
	<h2 id="تطبيق">
		تطبيق
	</h2>

	<p>
		لنطبّق ما تعلّمناه ولننشئ برنامجا بسيطًا لجدولة مُقابلات العمل:
	</p>

	<p>
		سنطلب من المُستخدم توفير المعلومات التّاليّة: 
	</p>

	<ul><li>
			اسم المُتقدّم 
		</li>
		<li>
			اسم المسؤول عن المُقابلة 
		</li>
		<li>
			وقتُ المُقابلة 
		</li>
	</ul><p>
		وبعدها سنطبع جملة تحتوي على جميع المعلومات التّي قدّمها المُستخدم، افتح ملفّا باسم <span style="font-family:courier new,courier,monospace;">interview.py</span> واكتب فيه التّالي:
	</p>
</div>

<div id="wmd-preview-section-33">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_36">
<span class="pln">applicant = raw_input('Enter the applicant name: ')
interviewer = raw_input('Enter the interviewer name: ')
time = raw_input('Enter the appointment time: ')
print interviewer, "will interview", applicant, "at", time</span></pre>

	<p>
		في المثال أعلاه نطلب أولا من مُستخدم البرنامج أن يُدخل اسم المُتقدّم ثمّ تُسندُ القيمة إلى المتغيّر <span style="font-family:courier new,courier,monospace;">applicant</span>، بعد ذلك يُطلب اسم المسؤول عن المُقابلة وتُسند قيمته إلى المُتغيّر <span style="font-family:courier new,courier,monospace;">interviewer</span> وبعد ذلك نحصل على وقتُ المُقابلة من المُستخدم ونُسند القيمة إلى المُتغيّر <span style="font-family:courier new,courier,monospace;">time</span>، وفي النّهاية نطبع الجملة الجامعة لكل المعلومات وتقديمها بشكل أسهل. 
	</p>

	<p>
		جرّب الأمر بنفسك، وأسند القيّم التّي تريد، وانظر إلى النّتيجة، العب بالشّيفرة، أضف مميّزات أخرى كالتّحقّق من أن عُمر المُتقدّم أكبر من 18 عاما مثلا، وتذكّر بأنّ التعلّم بالتّطبيق أفضل من أي طريقة أخرى.
	</p>
</div>

<div id="wmd-preview-section-34">
	<h2 id="تطبيق-عملي-إنشاء-برنامج-تسجيل-دخول-بسيط">
		تطبيق عملي: إنشاء برنامج تسجيل دخول بسيط
	</h2>

	<p>
		الآن حان الوقت لنطبّق ما تعلّمناه، ولنقم بكتابة برنامج تسجيل دخول بسيط، ومبدأه كالتّالي: 
	</p>

	<ul><li>
			يُرحب البرنامج بالمُستخدم. 
		</li>
		<li>
			يطلبُ منه معلومات التّسجيل. 
		</li>
		<li>
			يفيد البرنامج المُستخدم بأنّ التّسجيل قد تم بنجاح أو بعكس ذلك. 
		</li>
		<li>
			يطلب البرنامج معلومات الدّخول. 
		</li>
		<li>
			يتحقّق البرنامج من أنّ المعلومات التّي أدخلها صحيحة. 
		</li>
		<li>
			إذا كانت صحيحة، يطبع البرنامج رسالة نجاح. 
		</li>
		<li>
			إذا كانت خاطئة، يطبع البرنامج رسالة فشل. 
		</li>
	</ul><p>
		المُتغيّرات التّي سنعتمد عليها: 
	</p>

	<ul><li>
			<strong>username:</strong> اسم المُستخدم 
		</li>
		<li>
			<strong>password</strong>: كلمة المرور 
		</li>
		<li>
			<strong>password_verification</strong>: تأكيد كلمة المرور (فقط للتّأكد من أنّ المُستخدم أدخل نفس كلمة المرور وأنّه يتذكّرها دون مشاكل).
		</li>
	</ul><p>
		أولا جملة التّرحيب:
	</p>
</div>

<div id="wmd-preview-section-35">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_38">
<span class="pln">print 'Hello User, this is a basic sign up/login Program'</span></pre>

	<p>
		ثانيّا لنطلب من المُستخدم توفير قيّم المتغيرّات (<strong>username</strong>: اسم المُستخدم، <strong>password</strong>: كلمة المرور، <strong>password_verification</strong>: تأكيد كلمة المرور):
	</p>
</div>

<div id="wmd-preview-section-36">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_40">
<span class="pln">username = raw_input('Enter your username please: ')
password = raw_input('Enter the your password please: ')
password_verification = raw_input('Verify password: ')</span></pre>

	<p>
		الآن لنتحقق من أنّ كلمة المرور التّي أدخلها المستخدم في البداية هي نفسها التّي أدخلها عند تأكيد كلمة المرور وذلك بمقارنة المتغيّرين <span style="font-family:courier new,courier,monospace;">password</span> و <span style="font-family:courier new,courier,monospace;">password_verification</span> فإذا كانا يحملان نفس القيمة فهذا يعني بأنّ التّسجيل ناجح وسنطبع للمُستخدم جملة تفيد بأنّ عملية التّسجيل قد نجحت. أما إذا لم تكن القيم متساوية سنطبع جملة تفيد المستخدم بأنّ كلمة المرور وتأكيدها لا يتوافقان، ويمكن القيام بالأمر بالأسطر الآتية:
	</p>
</div>

<div id="wmd-preview-section-37">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_42">
<span class="pln">if password == password_verification:
    print 'You have been successfully signed up!'
else:
    print 'The password and the password verification don't match! Please try again'</span></pre>

	<p>
		لقد انتهينا الآن من برمجة نظام التّسجيل، ويجب علينا الانتقال إلى الخطوة التّالية وهي مرحلة تسجيل الدّخول. 
	</p>

	<p>
		بعد طباعة الجملة التّي تفيد بأنّ المستخدم قام بالتّسجيل بنجاح (انظر الشّيفرة أعلاه) سنطلب منه معلومات الولوج وذلك بإدخال اسم مُستخدمه وكلمة المرور، سنعيّن هذه القيم المدخلة حديثا إلى متغيّرين جديدين، وذلك لمقارنتهما مع قيم المتغيّرين القديمين، إذا كانت القيم توافق ما أدخله قبل قليل فسنطبع جملة تفيد بأنّ عمليّة الولوج قد نجحت، إذا لم يكن الأمر كذلك سنطبع جملة تفيد المستخدم بأنّ القيم التّي أدخلها خاطئة ثمّ يتوقّف البرنامج. الآن، لنطوّر الشّيفرة أعلاه وندخل عليها التّعديلات المطلوبة لإجراء عمليّة الولوج:
	</p>
</div>

<div id="wmd-preview-section-38">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_44">
<span class="pln">if password == password_verification:
    print 'You have Successfully Signed up! \n'
    username_sign_in = raw_input('Enter your username please: ')
    password_sign_in = raw_input('Enter your password please: ')
    if username_sign_in == username and password_sign_in == password:
        print 'You have Successfully Signed in!'
    else:
        print 'username or password do not match! Please try again!'
else:
    print 'The password and the password verification do not match! Please try again'</span></pre>

	<p>
		لاحظ استخدام المعامل المنطقي <span style="font-family:courier new,courier,monospace;">and</span> عند التّحقّق من أنّ اسم المستخدم وكلمة المرور المدخلتان (المخزّنة في المتغيّرين <span style="font-family:courier new,courier,monospace;">username_sign_in</span> و <span style="font-family:courier new,courier,monospace;">password_sign_in</span>) توافقان ما تم إدخاله من قبل. العامل <span style="font-family:courier new,courier,monospace;">and</span> يحرص على أنّ كلا الشّرطين محققان. وبهذا نكون قد انتهينا من البرمجية الصغيرة والبسيطة، وهذه هي الشّيفرة الكاملة:
	</p>
</div>

<div id="wmd-preview-section-39">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_46">
<span class="pln">print 'Hello User, this is a basic sign up/login Program'
username = raw_input('Enter your username please: ')
password = raw_input('Enter the your password please: ')
password_verification = raw_input('Verify password: ')
if password == password_verification:
    print 'You have Successfully Signed up! \n'
    username_sign_in = raw_input('Enter your username please: ')
    password_sign_in = raw_input('Enter your password please: ')
    if username_sign_in == username and password_sign_in == password:
        print 'You have Successfully Signed in!'
    else:
        print 'username or password do not match! Please try again!'
else:
    print 'The password and the password verification do not match! Please try again'</span></pre>

	<h2>
		تمارين
	</h2>
</div>

<div id="wmd-preview-section-40">
	<h3>
		تمرين 1
	</h3>

	<p>
		ما مُخرجات البرنامج التّالي:
	</p>
</div>

<div id="wmd-preview-section-41">
	<pre class="ipsCode" id="ips_uid_4795_50">
print 2 &lt; 3 and 3 &gt; 1
print 2 &lt; 3 or 3 &gt; 1
print 2 &lt; 3 or not 3 &gt; 1
print 2 &lt; 3 and not 3 &gt; 1</pre>

	<h3>
		تمرين 2
	</h3>

	<p>
		ما مُخرجات البرنامج التّالي:
	</p>
</div>

<div id="wmd-preview-section-42">
	<pre class="ipsCode" id="ips_uid_4795_52">
x = 4
y = 5
p = x &lt; y or x &lt; z
print p</pre>

	<h3>
		تمرين 3
	</h3>

	<p>
		ما مُخرجات البرنامج التّالي:
	</p>
</div>

<div id="wmd-preview-section-43">
	<pre class="ipsCode" id="ips_uid_4795_54">
x = 4
y = 5
p = x &lt; y or x &lt; z
print p</pre>

	<h3>
		تمرين 4
	</h3>

	<p>
		ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك.
	</p>
</div>

<div id="wmd-preview-section-44">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_56">
<span class="pln">x = 2
if x == 2:
    print x
else:
    print y</span></pre>

	<h3>
		تمرين 5
	</h3>

	<p>
		ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك.
	</p>
</div>

<div id="wmd-preview-section-45">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_58">
<span class="pln">x = 2
if x == 2:
    print x
else:
    x +</span></pre>

	<h3>
		تمرين 6
	</h3>

	<p>
		هل الإزاحة في البرنامج التّالي صحيحة؟ إذا لم يكن الأمر كذلك، فأصلح الخطأ.
	</p>
</div>

<div id="wmd-preview-section-46">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4795_60">
<span class="pln">x = 2
if x == 2:
    print x
    if x+1 == 3:
    print 'x+1 = 3'
else:
    print x + 2</span></pre>

	<h2>
		مصادر
	</h2>

	<p>
		درس <a href="http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html#input-and-output" rel="external nofollow">Input and Output</a> للكاتب Dr. Andrew N. Harrington.<br>
		كتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow">Python Practice Book</a> لكاتبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">285</guid><pubDate>Wed, 17 Feb 2016 13:34:01 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x635;&#x641;&#x648;&#x641;&#x60C; &#x627;&#x644;&#x645;&#x62C;&#x645;&#x648;&#x639;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x642;&#x648;&#x627;&#x645;&#x64A;&#x633; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B5%D9%81%D9%88%D9%81%D8%8C-%D8%A7%D9%84%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D9%88%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-r226/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_12/python-tuples-sets-dict.png.7292fcfac15d63f340b0019ae383d3bb.png" /></p>

<div id="wmd-preview-section-48">
	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_12/python-tuples-sets-dict.png.e990ba64a3c81c66bfb95e35804992c4.png" data-fileid="10404" rel=""><img alt="python-tuples-sets-dict.thumb.png.2e5945" class="ipsImage ipsImage_thumbnailed" data-fileid="10404" src="https://academy.hsoub.com/uploads/monthly_2015_12/python-tuples-sets-dict.thumb.png.2e5945351365b20f65f7efc80eab1e16.png"></a>
	</p>

	<h2 id="التعامل-مع-الصفوف-المجموعات-والقواميس-في-بايثون">
		الصفوف Tuple
	</h2>
</div>

<div id="wmd-preview-section-49">
	<p>
		الصّفوف نوع من البيانات التسلسليّة تماما مثل القوائم، لكنّ الصفوف غير قابلة للتغيير، يتألّف صفّ من مجموعة من القيّم نفصل بينها بفاصلة "," ولإنشاء صفّ نقوم بإسناد مجموعة من القيّم إلى متغيّر حيث نفصل بين القيم بفاصلة كما في المثال التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> 
</span><span class="lit">1</span></pre>

	<p>
		ويُمكن أيضاً إنشاء صفّ بدون أقواس:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> 
</span><span class="lit">1</span></pre>

	<p>
		خاصيّة قياس عدد العناصر <span style="font-family:courier new,courier,monospace;">len</span> وتشريح الصّف ممكن أيضا، وتُطبّق هذه الخاصيّات كما فعلنا مع <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%88%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-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r223/" rel="">القوائم</a> في الدّرس السّابق.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> 
</span><span class="lit">3</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</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></pre>

	<p>
		وبما أن الأقواس تُستعمل للجمع كذلك، فيجب أن تنشئ صفّا من قيمة واحدة مع فاصلة زائدة.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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="pun">&gt;&gt;</span><span class="pln"> a 
</span><span class="lit">1</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </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="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> 
</span><span class="lit">1</span></pre>

	<p>
		ويُمكن جمع صفّين في صفّ واحد بحيث يحتوي الصّفّ الجديد على كلّ من عناصر الصفّ الأول والثّاني، فمثلا في البرنامج التّالي قُمنا بالجمع بين الصّف a و الصف b وأسندنا قيمهما إلى الصف c:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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">3</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</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">3</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> c </span><span class="pun">=</span><span class="pln"> a</span><span class="pun">+</span><span class="pln">b 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> c 
</span><span class="pun">(</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="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span></pre>

	<p>
		يُمكن أن تحتوي الصفوف على مُختلف أنواع البيانات كذلك (الأرقام، السّلاسل النّصيّة، القيم المنطقيّة…)، ويُمكن -كما الحال مع القوائم- للعناصر النّصيّة أن تكون بين علامتي تنصيص مزدوجتين. انظر المثال:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="com"># هذا مثال على إمكانية إسناد قيم من أنواع مختلفة </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Python'</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">10</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">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Python'</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">10</span><span class="pun">,</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="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">"Hsoub Academy"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Python"</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">10</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">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Python'</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">10</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">)</span></pre>

	<p>
		إذا أردت إنشاء صفّ يحتوي على قيمة مُكرّرة عدّة مرّات فيُمكنك إنشاء صف من عنصر واحد ثمّ إجراء عمليّة ضرب بعدد المرّات الذي تريده:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Academy'</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="str">'Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Academy'</span><span class="pun">)</span></pre>

	<p>
		عند كتابة عدّة قيم والفصل بينها بفاصلة دون إحاطة العناصر بأي علامات تجميع كالأقواس وعلامتي []، فإنّها تكون صفوفا بشكل افتراضي، انظر المثال:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="str">'Hsoub academy'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</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">'Abdelhadi'</span><span class="pln"> 
</span><span class="typ">Hsoub</span><span class="pln"> academy </span><span class="lit">5</span><span class="pln"> </span><span class="kwd">False</span><span class="pln"> </span><span class="typ">Abdelhadi</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</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="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="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Value of a and b : "</span><span class="pun">,</span><span class="pln"> a</span><span class="pun">,</span><span class="pln">b 
</span><span class="typ">Value</span><span class="pln"> of a </span><span class="kwd">and</span><span class="pln"> b </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">2</span></pre>
</div>

<div id="wmd-preview-section-58">
	<h3 id="العمليات-على-الصفوف">
		العمليات على الصفوف
	</h3>

	<p>
		تُوفّر لنا <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>عدّة دوال للتّعامل مع الصّفوف وقد ذكرنا الدّالة <span style="font-family:courier new,courier,monospace;">len</span> وكيفية استخدامها أعلاه. وقد حان الوقت للحديث عن بعض الدوال الأخرى المُساعدة في التّعامل مع الصّفوف:
	</p>

	<p>
		دالة <span style="font-family:courier new,courier,monospace;">cmp</span> للمُقارنة بين صفين، إذا كان الصّفان مُتساويان فالنّتيجة تكون 0 أمّا إذا كانا مُختلفين فالنّتيجة تطبع القيمة 1 أو القيمة -1 حسب الاختلاف:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> b </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> cmp</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="lit">0</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> b </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">2</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> cmp</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="lit">1</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> b </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">2</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> cmp</span><span class="pun">(</span><span class="pln">b</span><span class="pun">,</span><span class="pln"> a</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">-</span><span class="lit">1</span></pre>

	<p>
		دالة <span style="font-family:courier new,courier,monospace;">max</span> لإرجاع أكبر قيمة في صفّ:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> max</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> 
</span><span class="str">'Hsoub Academy'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </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">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="pun">&gt;&gt;&gt;</span><span class="pln"> max</span><span class="pun">(</span><span class="pln">b</span><span class="pun">)</span><span class="pln"> 
</span><span class="lit">3</span></pre>

	<p>
		دالة <span style="font-family:courier new,courier,monospace;">min</span> لإرجاع أصغر قيمة في صفّ:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> min</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> 
</span><span class="str">'Abdelhadi'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </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="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> min</span><span class="pun">(</span><span class="pln">b</span><span class="pun">)</span><span class="pln"> 
</span><span class="lit">1</span></pre>
</div>

<div id="wmd-preview-section-62">
	<h2 id="المجموعات-sets">
		المجموعات Sets
	</h2>

	<p>
		المجموعات عبارة عن جمع غير منظّم لقيّم فريدة، بحيث لا تُكرّر قيمة أكثر من مرّة.
	</p>

	<p>
		يُمكن إنشاء مجموعة فارغة وإضافة العناصر لها بالتّابع <span style="font-family:courier new,courier,monospace;">add</span>، مع مُلاحظة أنّ التّابع <span style="font-family:courier new,courier,monospace;">add</span> لا يقبل سوى عنصر واحد في كلّ مرة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="lit">1</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</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="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="str">"Hsoub Academy"</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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></pre>

	<p>
		ولإضافة عدّة عناصر مرّة واحدة فعليك الاعتماد على التّابع <span style="font-family:courier new,courier,monospace;">update</span> مع ملاحظة أنّ العناصر المُضافة يجب أن تكون داخل علامتي []:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">update</span><span class="pun">([</span><span class="lit">1</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">5</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Hsoub Academy"</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span></pre>

	<p>
		ولحذف عنصر من مجموعة ما، فيُمكنك الاستعانة بالتّابع <span style="font-family:courier new,courier,monospace;">remove</span> بحيث تُمرّر العنصر الذي ترغب بحذفه:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">remove</span><span class="pun">(</span><span class="str">"Hsoub Academy"</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="lit">1</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">5</span><span class="pun">])</span></pre>

	<p>
		أمّا إذا كنت ترغب بحذف جميع عناصر مجموعة ما، فالتّابع <span style="font-family:courier new,courier,monospace;">clear</span> سيتكفّل بالأمر:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([])</span></pre>

	<p>
		ويُمكنك نسخ مجموعة وإسناد المنسوخ إلى مجموعة أخرى بالتّابع <span style="font-family:courier new,courier,monospace;">copy</span>، في المثال التّالي قمنا بنسخ المجموعة x وأسندنا المنسوخ إلى المجموعة y :
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">copy</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> y 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span></pre>

	<p>
		ويُمكن إنشاء مجموعة بقيّم مُتعدّدة، لاحظ في المثال التّالي أنّ النّاتج مجموعة تحتوي على عناصر فريدة (حُذِف العنصر 1 لأنّه مُكرّر):
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="lit">3</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">1</span><span class="pun">])</span><span class="pln"> 
</span><span class="kwd">set</span><span class="pun">([</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>
		وهناك طريقة جديدة لإنشاء المجموعات في بايثون 2.7:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">3</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">1</span><span class="pun">}</span><span class="pln"> 
</span><span class="kwd">set</span><span class="pun">([</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>
		ويُمكن أن تُضيف قيمة إلى مجموعة، وذلك بالدّالة <span style="font-family:courier new,courier,monospace;">add</span>.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</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="pun">&gt;&gt;&gt;</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">4</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</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></pre>

	<p>
		يُمكن الجمع بين مجموعتين بالمُعامل | بحيث تكون المجموعة الجديدة مُحتويّة على كلّ من عناصر المجموعتين، في المثال التّالي ننشئ أولا المجموعة x ثمّ ننشئ المجموعة y وبعد ذلك نقوم بتوحيد المجموعتين ونُسند النّتيجة إلى المجموعة x_y :
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Hsoub Academy'</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">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">"Dyouri"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Abdelhadi"</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> y 
</span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">])</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x_y </span><span class="pun">=</span><span class="pln"> x </span><span class="pun">|</span><span class="pln"> y 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x_y 
</span><span class="kwd">set</span><span class="pun">([</span><span class="lit">1</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">5</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Dyouri'</span><span class="pun">])</span></pre>

	<p>
		وكما في القوائم، يُمكنك أن تتحقّق من وجود قيمة من عدمه بالعامل <span style="font-family:courier new,courier,monospace;">in</span>، وهذه العمليّة تكون أسرع في المجموعات من القوائم ولكنك لن تستطيع أن ترى فرقا كبيرا إلّا إذا كان عدد العناصر كبيرًا.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</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="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> x 
</span><span class="kwd">True</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> x 
</span><span class="kwd">False</span></pre>
</div>

<div id="wmd-preview-section-73">
	<h2 id="القواميس">
		القواميس
	</h2>

	<p>
		القواميس تُشبه القوائم، الفرق أنّك تستطيع فهرسة العناصر داخل القواميس بأي نوع من القيم، ففي القوائم يُمكنك الوصول إلى القيم فقط عبر الأعداد الصّحيحة مثل <span style="font-family:courier new,courier,monospace;">[]x</span> أما في القواميس فتستطيع الوصول إلى قيّم عبر المفاتيح كالتّالي: 
	</p>

	<p>
		أولا ننشئ قاموسا، بحيث تملك كلّ قيمة مفتاحا معيّنا، كمثال المفتاح x يحمل القيمة 1:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span></pre>

	<p>
		ويُمكنك الوصول إلى القيّم عبر المفاتيح (عوضا عن الأرقام في كما في القوائم):
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'x'</span><span class="pun">]</span><span class="pln"> 
</span><span class="lit">1</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'z'</span><span class="pun">]</span><span class="pln"> 
</span><span class="lit">3</span></pre>

	<p>
		يُمكنك كذلك إنشاء قاموس فارغ وإسناد المفاتيح والقيّم بعد ذلك:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b</span><span class="pun">[</span><span class="str">'x'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b</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">'foo'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b</span><span class="pun">[(</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="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="pun">{(</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="str">'x'</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">2</span><span class="pun">:</span><span class="pln"> </span><span class="str">'foo'</span><span class="pun">}</span></pre>

	<p>
		يُمكن تعديل قيمة مفتاح بالطّريقة التّالية:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'y'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span></pre>

	<p>
		في المثال أعلاه غيّرنا قيمة المفتاح y من القيمة 2 إلى القيمة Hsoub Academy. ويُمكن إضافة مفاتيح وقيم جديدة كذلك:
	</p>
</div>

<div id="wmd-preview-section-77">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'w'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="str">'w'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pun">}</span></pre>

	<p>
		يُمكنك حذف العناصر باستخدام <span style="font-family:courier new,courier,monospace;">del</span> كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-78">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">del</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'x'</span><span class="pun">]</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span></pre>

	<p>
		ويُمكنك حذف جميع مُكوّنات قاموس بالتّابع <span style="font-family:courier new,courier,monospace;">clear</span> كالتّالي:
	</p>
</div>

<div id="wmd-preview-section-79">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{}</span></pre>

	<p>
		ويُمكن كذلك حذف القاموس بأكمله:
	</p>
</div>

<div id="wmd-preview-section-80">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">del</span><span class="pln"> a 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="typ">Traceback</span><span class="pln"> </span><span class="pun">(</span><span class="pln">most recent call </span><span class="kwd">last</span><span class="pun">):</span><span class="pln"> 
  </span><span class="typ">File</span><span class="pln"> </span><span class="str">"&lt;stdin&gt;"</span><span class="pun">,</span><span class="pln"> line </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="str">&lt;module&gt;</span><span class="pln"> 
</span><span class="typ">NameError</span><span class="pun">:</span><span class="pln"> name </span><span class="str">'a'</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">defined</span></pre>

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

<div id="wmd-preview-section-81">
	<p>
		الدّالة <span style="font-family:courier new,courier,monospace;">keys</span> تُرجع جميع المفاتيح الموجودة في قاموس، وبالطّريقة نفسها يُمكن إرجاع جميع قيّم قاموس ما باستعمال <span style="font-family:courier new,courier,monospace;">values</span> ، أمّا إن أردت إرجاع القيم والمفاتيح الموجودة في قاموس فيُمكنك استعمال <span style="font-family:courier new,courier,monospace;">items</span> :
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">[</span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">]</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">values</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">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="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">items</span><span class="pun">()</span><span class="pln"> 
</span><span class="pun">[(</span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="str">'y'</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="str">'z'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)]</span></pre>

	<p>
		ويُمكن استعمال حلقة <span style="font-family:courier new,courier,monospace;">for</span> للتّقدّم في القاموس واستخراج القيّم والمفاتيح:
	</p>
</div>

<div id="wmd-preview-section-82">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> key </span><span class="kwd">in</span><span class="pln"> a</span><span class="pun">:</span><span class="pln"> 
</span><span class="pun">...</span><span class="pln">     </span><span class="kwd">print</span><span class="pln"> key 
</span><span class="pun">...</span><span class="pln"> 
x 
y 
z 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><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"> a</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln"> 
</span><span class="pun">...</span><span class="pln">     </span><span class="kwd">print</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> value 
</span><span class="pun">...</span><span class="pln"> 
x </span><span class="lit">1</span><span class="pln"> 
y </span><span class="lit">2</span><span class="pln"> 
z </span><span class="lit">3</span></pre>

	<p>
		يُمكن التحقق من تواجد مفتاح على قاموس باستخدام عامل <span style="font-family:courier new,courier,monospace;">in</span> أو دالة <span style="font-family:courier new,courier,monospace;">has_key</span>.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="str">'x'</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> a 
</span><span class="kwd">True</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="str">'p'</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> a 
</span><span class="kwd">False</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">has_key</span><span class="pun">(</span><span class="str">'x'</span><span class="pun">)</span><span class="pln"> 
</span><span class="kwd">True</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">has_key</span><span class="pun">(</span><span class="str">'p'</span><span class="pun">)</span><span class="pln"> 
</span><span class="kwd">False</span></pre>

	<p>
		يُمكن كذلك الاعتماد على كلّ من <span style="font-family:courier new,courier,monospace;">get</span> و <span style="font-family:courier new,courier,monospace;">setdefault</span> بحيث الأولى تقوم بعرض قيمة مفتاح إذا كان موجودا وإذا لم يكن موجودا فترجع القيمة الافتراضيّة والتّي توضع كعامل Parameter ثان. انظر المثال لتفهم قصدي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> d </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> d</span><span class="pun">.</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'x'</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">1</span></pre>

	<p>
		لقد أرجع السّطر السّابق القيمة (1) رغم أنّنا حدّدنا قيمة افتراضيّة (5) وذلك لأن المفتاح موجود ويحمل قيمة مُسبقا.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> d</span><span class="pun">.</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'p'</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">5</span></pre>

	<p>
		في المثال أعلاه، أرجعت الدّالة <span style="font-family:courier new,courier,monospace;">get</span> القيمة (5) وذلك لأنّ المفتاح p غير موجود أصلاً.
	</p>
</div>

<div id="wmd-preview-section-86">
	<p>
		و <span style="font-family:courier new,courier,monospace;">setdefaul</span> تقوم بوضع قيمة افتراضيّة لمفتاح إذا لم يكن موجودا.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">setdefault</span><span class="pun">(</span><span class="str">'x'</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="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> d 
</span><span class="pun">{</span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">setdefault</span><span class="pun">(</span><span class="str">'p'</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">0</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> d 
</span><span class="pun">{</span><span class="str">'y'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="str">'p'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">}</span></pre>

	<p>
		يُمكن استخدام القواميس لتمثيل السّلاسل النّصيّة عبر المفاتيح، حيث يُستبدَلُ المفتاح بقيمته:
	</p>
</div>

<div id="wmd-preview-section-87">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="str">'hello %(name)s'</span><span class="pln"> </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">'python'</span><span class="pun">}</span><span class="pln"> 
</span><span class="str">'hello python'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="str">'Chapter %(index)d: %(name)s'</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="str">'index'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</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">'Data Structures'</span><span class="pun">}</span><span class="pln"> 
</span><span class="str">'Chapter 2: Data Structures'</span></pre>

	<h3>
		ملاحظة حول المفاتيح 
	</h3>

	<p>
		لا يمكن أن تُسند لمفتاح واحد أكثر من قيمة، إذا حاولت أن تُسند قيمتين لأكثر من مفتاح، فإنّ آخر قيمة تكون قيمة المفتاح في النّهاية:
	</p>
</div>

<div id="wmd-preview-section-88">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'FirstName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Abd'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'LastName'</span><span class="pun">:</span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Job'</span><span class="pun">:</span><span class="str">'Writer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FirstName'</span><span class="pun">:</span><span class="str">'Abdelhadi'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'LastName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Job'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Writer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FirstName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">[</span><span class="str">'FirstName'</span><span class="pun">]</span><span class="pln"> 
</span><span class="str">'Abdelhadi'</span></pre>

	<p>
		يُمكن الجمع بين قاموسين في قاموس واحد بالتّابع <span style="font-family:courier new,courier,monospace;">update</span>، مع تمرير القاموس الثّاني، في المثال التّالي، أنشأنا قاموسا a ثمّ أنشأنا القاموس b، بعد ذلك حدّثنا القاموس a واضعين فيه مُكونات القاموس b فأصبح في الأخير يحمل جميع مكونات القاموسين :
	</p>
</div>

<div id="wmd-preview-section-89">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'FirstName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Abd'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'LastName'</span><span class="pun">:</span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Job'</span><span class="pun">:</span><span class="str">'Writer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FirstName'</span><span class="pun">:</span><span class="str">'Abdelhadi'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'LastName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Job'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Writer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FirstName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'Website'</span><span class="pun">:</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Language'</span><span class="pun">:</span><span class="str">'Arabic'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="pun">{</span><span class="str">'Website'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Language'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Arabic'</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="pln">b</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="pun">{</span><span class="str">'Website'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'LastName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Dyouri'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Job'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Writer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Language'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Arabic'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FirstName'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-91">
	<h3 id="تطبيق-حول-القواميس">
		تطبيق حول القواميس
	</h3>

	<p>
		لننشئ تطبيقا بسيطا لتحويل الأرقام إلى كلمات في لغة بايثون، بحيث يكون لكلّ رقم كلمة تُقابله، افتح ملفّا واحفظه باسم <span style="font-family:courier new,courier,monospace;">dict.py</span> واكتب فيه الشيفرات التّالية، اقرأ التّعليقات لتفهم الشّيفرة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="com"># -*- coding: utf-8 -*- </span><span class="pln">

</span><span class="com"># طباعة اسم التّطبيق </span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="str">'Dictionary Version 1.0.0'</span><span class="pln"> 

</span><span class="com"># تعريف القاموس وتعيين القيم له </span><span class="pln">
dict </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="str">'One'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="str">'Two'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="str">'Three'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">:</span><span class="str">'Four'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">:</span><span class="str">'Five'</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> 

</span><span class="com"># الدّوران حول قيم ومفاتيح القاموس وطباعتها </span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> key </span><span class="kwd">in</span><span class="pln"> dict</span><span class="pun">:</span><span class="pln"> 
    </span><span class="kwd">print</span><span class="pln"> key </span><span class="pun">,</span><span class="pln"> </span><span class="str">'in English is :'</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> dict</span><span class="pun">[</span><span class="pln">key</span><span class="pun">]</span></pre>
</div>

<div id="wmd-preview-section-92">
	<p>
		مُخرجات التطبيق (بعد حفظ الملفّ وتنفيذه) ستكون كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="typ">Dictionary</span><span class="pln"> </span><span class="typ">Version</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">0</span><span class="pln"> 
</span><span class="lit">1</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="typ">English</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">One</span><span class="pln"> 
</span><span class="lit">2</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="typ">English</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Two</span><span class="pln"> 
</span><span class="lit">3</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="typ">English</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Three</span><span class="pln"> 
</span><span class="lit">4</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="typ">English</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Four</span><span class="pln"> 
</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="typ">English</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Five</span></pre>

	<p>
		يُمكنك أن تعدّل في الشّيفرة كما تشاء، ويُمكنك إضافة المزيد من القيم، الأمر يعود لك.
	</p>
</div>

<div id="wmd-preview-section-94">
	<h2 id="تمارين">
		تمارين
	</h2>

	<h3>
		تمرين 1
	</h3>

	<p>
		اجمع قيم الصّفين التّاليين وضعها في صفّ باسم c:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'One'</span><span class="pun">,</span><span class="str">'Two'</span><span class="pun">,</span><span class="str">'Three'</span><span class="pun">)</span><span class="pln"> 
b </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Hsoub Academy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Abdelhadi'</span><span class="pun">)</span></pre>
</div>

<div id="wmd-preview-section-95">
	<h3>
		تمرين 2
	</h3>

	<p>
		أحذف القيمة HTML من المجموعة x في الشّيفرة التّاليّة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">([</span><span class="str">'Ruby'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Python'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'HTML'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Perl'</span><span class="pun">])</span></pre>
</div>

<div id="wmd-preview-section-96">
	<h3>
		تمرين 3
	</h3>

	<p>
		قم بتطبيق تعلّماتك لتنشئ برنامجا يعرض كلّ دولة عربية واختصارها، مثلا دولة المغرب اختصارها MA ومصر اختصارها EGY. بحيث تكون نتيجة البرنامج شيئا يبدو كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="typ">Morocco</span><span class="pun">:</span><span class="pln"> MA </span><span class="typ">Egypt</span><span class="pun">:</span><span class="pln"> EGY</span></pre>

	<p>
		ترجمة -وبتصرف- للكتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow" target="_blank">Python Practice Book</a> لصاحبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">226</guid><pubDate>Wed, 30 Dec 2015 19:16:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x642;&#x648;&#x627;&#x626;&#x645; &#x648;&#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x627;&#x644;&#x646;&#x635;&#x64A;&#x629; &#x641;&#x64A; &#x644;&#x63A;&#x629; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D9%88%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-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r223/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_12/python-lists-strings.png.203ca87f02a206a377deee136bb85f80.png" /></p>

<div id="wmd-preview-section-31">
	<p id="التعامل-مع-القوائم-والسلاسل-النصية-في-لغة-بايثون">
		بعد أن تعرّفنا في الدّرس السّابق على <a href="https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r221/">طريقة التّعامل مع البيانات مثل المُتغيّرات</a> وأنواعها كالأرقام وإسناد القيم، سنكمل في هذا الدّرس الثّالث مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع كل من القوائم والسّلاسل النّصيّة. 
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_12/python-lists-strings.png.fe78b180340354f07363b8ce9c7e7d83.png"><img alt="python-lists-strings.thumb.png.4f897b1b0" class="ipsImage ipsImage_thumbnailed" data-fileid="10176" src="https://academy.hsoub.com/uploads/monthly_2015_12/python-lists-strings.thumb.png.4f897b1b0604a3883d9904e6455700ea.png"></a>
	</p>

	<p>
		<strong>تذكير:</strong> الشيفرات التّي تكون مسبوقة بعلامة "&lt;&lt;&lt;" يجب أن تُنفّذ على مُفسّر بايثون.
	</p>
</div>

<div id="wmd-preview-section-33">
	<h2 id="القوائم">
		القوائم
	</h2>

	<p>
		تعتبر القوائم طريقة رائعة للتّعامل مع البيانات في لغة بايثون، وتتعلّق القائمة بمتغيّر معيّن بحيث يحمل أكثر من قيمة، ويمكن الوصول إلى هذه القيم باستعمال رقم كل قيمة.
	</p>

	<p>
		لتفهم أكثر، اعتبر أنّ لك 5 أبناء، بحيث تكون قائمة الأبناء:
	</p>

	<ul><li>
			0، عمر
		</li>
		<li>
			1، خالد
		</li>
		<li>
			2، حسن
		</li>
		<li>
			3، زيد
		</li>
		<li>
			4، يوسف
		</li>
	</ul><p>
		في بايثون، ننشئ القائمة بالطّريقة التاليّة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; children = ['Omar','Khaled','Hassan','Zaid','Youssef']</pre>

	<p>
		لنسمّي القائمة أعلاه باسم <span style="font-family:courier new,courier,monospace;">children</span>، وتحتوي على خمس عناصر، ولكل عنصر رقم خاص به، بحيث يبدأ العدّ من الصّفر، فمثلا إذا أردنا مناداة الابن "عمر" فسيتوجّب علينا مناداته برقمه (أي الرقم 0)، وطريقة مناداة باقي الأبناء تكون بالشّكل التّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; print 'Come here ' + children[0] 
Come here Omar 
&gt;&gt;&gt; print 'Come here ' + children[1] 
Come here Khaled 
&gt;&gt;&gt; print 'Come here ' + children[2] 
Come here Hassan 
&gt;&gt;&gt; print 'Come here ' + children[3] 
Come here Zaid 
&gt;&gt;&gt; print 'Come here ' + children[4] 
Come here Youssef</pre>

	<p>
		الآن، لننتقل إلى تطبيق مبادئ القوائم على بايثون، يُمكننا إسناد قائمة إلى متغيّر كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3]</pre>

	<p>
		ويُمكنك إنشاء قائمة سلاسل نصيّة عوضا عن الأرقام:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = ["hello", "world"]</pre>

	<p>
		يُمكن أن تجمع بين أنواع القيّم المُختلفة، هذا المثال يجمع بين الأرقام والسّلاسل النّصيّة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, "hello, "world"]</pre>

	<p>
		ويُمكن أن تحتوي القائمة على قائمة أخرى:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, "hello, "world", ["another", "list"]]</pre>

	<p>
		أو بالطّريقة التّاليّة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; a = [1, 2] 
&gt;&gt;&gt; b = [1.5, 2, a] 
&gt;&gt;&gt; b 
[1.5, 2, [1, 2]]</pre>

	<p>
		يُمكن أن نستخدم الدّالة <span style="font-family:courier new,courier,monospace;">len</span> المعرّفة مُسبقا لنقيس طول قائمة ما (عدد مكونات القائمة):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3] 
&gt;&gt;&gt; len(x) 
3</pre>

	<p>
		نصل إلى عناصر قائمة ما بكتابة اسم المُتغيّر الذي يحمل القائمة، ثمّ رقم العنصر بين رمزي []:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3] 
&gt;&gt;&gt; x[1] 
2 
&gt;&gt;&gt; x[1] = 4 
&gt;&gt;&gt; x[1] 
4</pre>

	<p>
		مع ملاحظة أنّ التّرقيم يبدأ بالصّفر، بحيث يكون العنصر الأوّل من القائمة يحمل الرّقم 0 والعنصر الثّاني يحمل رقم 1 وهكذا دواليك.
	</p>
</div>

<div id="wmd-preview-section-42">
	<p>
		يُمكن إنشاء قائمة تحتوي على أعداد صحيحة من مجال معيّن بالدّالة <span style="font-family:courier new,courier,monospace;">Range</span>، في المثال التّالي قُمنا بإنشاء قائمة تحتوي على أربعة عناصر من 0 إلى 3، ثمّ قائمة تحتوي على ثلاثة عناصر بين العددين 3 و 6، ثمّ في السّطر الأخير قُمنا بإنشاء قائمة مُتكوّنة من 3 عناصر بين العددين 2 و 10 مع زيادة بقيمة 3 :
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; range(4) 
[0, 1, 2, 3] 
&gt;&gt;&gt; range(3, 6) 
[3, 4, 5] 
&gt;&gt;&gt; range(2, 10, 3) 
[2, 5, 8]</pre>

	<p>
		يُمكن كذلك استخدام الدّالة <span style="font-family:courier new,courier,monospace;">len</span> لحساب عدد عناصر قائمة ما:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; a = [1, 2, 3, 4] 
&gt;&gt;&gt; len(a) 
4</pre>

	<p>
		كما يُمكنك التّعامل مع القوائم بالرموز الرّياضيّة <strong>*</strong> و <strong>+</strong> لتكرار أو الجمع بين عناصر قائمة ما:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; a = [1, 2, 3] 
&gt;&gt;&gt; b = [4, 5] 
&gt;&gt;&gt; a + b 
[1, 2, 3, 4, 5] 
&gt;&gt;&gt; b * 3 
[4, 5, 4, 5, 4, 5]</pre>

	<p>
		للوصول إلى عناصر قائمة مُعيّنة نستعين برقم العنصر، مع ملاحظة بأنّ التّرقيم يبدأ من الصّفر إلى ( عدد العناصر-1 ).
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2] 
&gt;&gt;&gt; x[0] 
1 
&gt;&gt;&gt; x[1] 
2</pre>

	<p>
		إذا استخدمت فهرسا (ترقيما) خاطئا، فسيُرجِع مفسّر بايثون خطأ:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; x[6] 
Traceback (most recent call last): 
  File "&lt;stdin&gt;", line 1, in ? 
IndexError: list index out of range</pre>

	<p>
		يُمكنك كذلك استخدام التّرقيم السّلبي للوصول إلى عناصر القائمة من الآخر إلى الأول ( آخر عنصر يحمل القيمة -1 والعنصر الأول يحمل الرقم السّلبي لعدد العناصر):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; x[-1] 
4 
&gt;&gt;&gt; x[-2] 
3 
&gt;&gt;&gt; x[-4] 
1</pre>

	<p>
		يُمكننا تشريح قائمة (تقسيمها إلى أجزاء)، بالطّريقة التّاليّة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; x[0:2] 
[1, 2] 
&gt;&gt;&gt; x[1:4] 
[2, 3, 4]</pre>

	<p>
		ويمكن استخدام الأرقام السلبيّة في التّقسيم كذلك:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x[0:-1] 
[1, 2, 3]</pre>

	<p>
		إذا تركت مكان الرقم الأول فارغا، فالقيمة الافتراضيّة هي الصّفر، و القيمة الافتراضيّة للشّطر الثاني تكون عدد عناصر القائمة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; a[:2] 
[1, 2] 
&gt;&gt;&gt; a[2:] 
[3, 4] 
&gt;&gt;&gt; a[:] 
[1, 2, 3, 4]</pre>

	<p>
		يُمكن استخدام رقم ثالث لتحديد الخطوة (يعني المقدار الذي نضيفه في العنصر الحالي مقارنة بالعنصر السّابق)، والذي يكون الرّقم واحد افتراضيّا:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = range(10) 
&gt;&gt;&gt; x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
&gt;&gt;&gt; x[0:6:2] 
[0, 2, 4]</pre>

	<p>
		يُمكننا عكس عناصر القائمة بتحديد -1 كقيمة للزيّادة بالشّكل التّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = range(10) 
&gt;&gt;&gt; x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
&gt;&gt;&gt; x[::-1] 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]</pre>

	<p>
		يُمكن كذلك تغيير قيم عناصر القائمة بتعيين قيمة أخرى:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; x[1] = 5 
&gt;&gt;&gt; x 
[1, 5, 3, 4]</pre>

	<p>
		يُمكن استعمال العامل <span style="font-family:courier new,courier,monospace;">in </span>للتحقق من تواجد عنصر في القائمة، فإن أرجع القيمة <span style="font-family:courier new,courier,monospace;">True</span> فهذا يعني أن القيمة موجودة، أما إن أرجع <span style="font-family:courier new,courier,monospace;">False</span> فهذا يعني بأنّ القيمة غير موجودة في القائمة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = [1, 2, 3, 4] 
&gt;&gt;&gt; 2 in x 
True 
&gt;&gt;&gt; 10 in x 
False</pre>

	<p>
		يُمكن إضافة قيم أخرى إلى قائمة بدالّة الإلحاق <span style="font-family:courier new,courier,monospace;">append</span>، في المثال التّالي نلحق (نضيف) القيمة 3 إلى القائمة <span style="font-family:courier new,courier,monospace;">a</span>:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; a = [1, 2] 
&gt;&gt;&gt; a.append(3) 
&gt;&gt;&gt; a 
[1, 2, 3]
</pre>
</div>

<div id="wmd-preview-section-57">
	<h2 id="السلاسل-النصية">
		السلاسل النصية
	</h2>

	<p>
		السّلاسل النّصيّة أو Strings هي التّقنيّة المُستخدمة لكتابة النّصوص في بايثون، وهي سلاسل من الحروف (والتّي بدورها تُشكل جملا فنصوصا)، فمثلا الكلمة "مرحبا" عبارة عن سلسلة نصيّة تحتوي على 5 عناصر، ويمكن الوصول إلى كلّ عنصر كالآتي:
	</p>

	<ul><li>
			العنصر رقم 0 =&gt; م 
		</li>
		<li>
			العنصر رقم 1 =&gt; ر 
		</li>
		<li>
			العنصر رقم 2 =&gt; ح 
		</li>
		<li>
			العنصر رقم 3 =&gt; ب 
		</li>
		<li>
			العنصر رقم 4 =&gt; ا
		</li>
	</ul><p>
		مع ملاحظة أنّ المسافات تُحسَبُ كذلك في السّلاسل النّصيّة فمثلا السّلسلة "مرحبا " تحتوي على 6 عناصر (لاحظ المسافة بعد الألف).
	</p>

	<p>
		وتكون السلاسل النّصية ضمن علامتي تنصيص مزدوجتين "" أو علامتي تنصيص مُفردتين ''.
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = "hello" 
&gt;&gt;&gt; y = 'world' 
&gt;&gt;&gt; print x, y 
hello world</pre>

	<p>
		مع ملاحظة أنّ هناك فرقا بين علامات التّنصيص المزدوجة والمنفردة، ويُمكن استعمالهما بشكل تبادلي. 
	</p>

	<p>
		أمّا السّلاسل النّصيّة التي تحتوي على أكثر من سطر، فيُمكن تعيينها لمُتغيّر باستعمال ثلاثة رموز إمّا ''' أو """، انظر المثال التّالي (لكي يعمل بشكل جيّد، من المُفضّل وضعه في ملفّ باسم <span style="font-family:courier new,courier,monospace;">example1.py</span> وتنفيذه بالأمر<span style="font-family:courier new,courier,monospace;"> python example1.py</span>):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
x = """This is a multi-line string 
written in 
three lines.""" 
print x 

y = '''multi-line strings can be written 
using three single quote characters as well. 
The string can contain 'single quotes' or "double quotes" ''' 
print y</pre>

	<p>
		في المثال أعلاه قمنا بتعيين سلسلة من ثلاثة أسطر للمُتغيّر <span style="font-family:courier new,courier,monospace;">x</span> بحيثُ يكون المُخرج عند طباعة المُتغيّر <span style="font-family:courier new,courier,monospace;">x</span>:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
This is a multi-line string written in three lines.</pre>

	<p>
		يُمكن كذلك إنشاء سلسلة نصيّة متعدّدة الأسطر بإضافة \n إلى نهاية كلّ سطر، انظر المثال:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; x = 'This is a multi-line string\nwritten in\nthree lines.' 
&gt;&gt;&gt; print x</pre>

	<p>
		مُخرجات المثال أعلاه:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
This is a multi-line string written in three lines.</pre>

	<p>
		يُمكن الاستعانة بدّالة المُعرّفة مُسبقا في بايثون لقيّاس عدد أحرف سلسلة نصّية، وهذه الدّالة تُدعى <span style="font-family:courier new,courier,monospace;">len</span> ويُمكن استخدامها على النّحو التّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; len("Abdelhadi") 
9</pre>

	<p>
		السّلاسل النّصيّة في بايثون تتصرّف تماما كالقوائم، بحيث تكون السّلسلة بمثابة قائمة تحتوي على عدّة أحرف، ويمكن فهرسة (الوصول إلى عناصر السّلسلة) وتقطيع السّلاسل النّصيّة بتتبع نفس مبدأ القوائم، انظر المثال:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; a = "helloworld" 
&gt;&gt;&gt; a[1] 
'e' 
&gt;&gt;&gt; a[-2] 
'l' 
&gt;&gt;&gt; a[1:5] 
"ello" 
&gt;&gt;&gt; a[:5] 
"hello" 
&gt;&gt;&gt; a[5:] 
"world" 
&gt;&gt;&gt; a[-2:] 
'ld' 
&gt;&gt;&gt; a[:-2] 
'hellowor' 
&gt;&gt;&gt; a[::-1] 
'dlrowolleh'</pre>

	<p>
		يُمكن استعمال العامل <span style="font-family:courier new,courier,monospace;">in</span> للتحقق فيما إذا كانت السّلسلة النّصيّة جزءا من سلسلة أخرى، في المثال التّالي نقوم بالتحقق من أنّ كلّا من hell و full و el ضمن hello:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; 'hell' in 'hello' 
True 
&gt;&gt;&gt; 'full' in 'hello' 
False 
&gt;&gt;&gt; 'el' in 'hello' 
True</pre>

	<p>
		عندما يكون المخرج <span style="font-family:courier new,courier,monospace;">True</span> (صحيح) فهذا يعني بأنّ السّلسلة الصغيرة جزء من السّلسلة النّصيّة الكبيرة. 
	</p>

	<p>
		هناك العديد من العمليّات التّي يُمكن تطبيقها على السّلاسل النّصيّة، وسنتعرّف على بعض منها فيما يلي من الأسطر:
	</p>

	<ul><li>
			<strong>split:</strong> فصل سلسلة نصّية إلى أجزاء يفصل بينها أي رمز (شرط أن يكون في السّلسلة) نقوم بتمريره إلى هذه الدّالة، إذا لم تُحدّد أي فاصل فاستعمل <span style="font-family:comic sans ms,cursive;">split</span> على فصل السّلسلة النّصيّة اعتمادا على مسافة بيضاء (أي تقسيم الجملة إلى كلمات)، لتفهم أكثر ما الذي أقصده تمعّن في المثال التّالي فبه سيتّضح المقال:
		</li>
	</ul></div>

<div id="wmd-preview-section-66">
	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; "hello world".split() 
['hello', 'world'] 
&gt;&gt;&gt; "a,b,c".split(',') 
['a', 'b', 'c']</pre>

	<ul><li>
			<strong>join:</strong> هذه الدّالة تعكس مفعول <span style="font-family:courier new,courier,monospace;">split</span> حيث تجمع بين عناصر القائمة وترجعها سلسلة نصّية:
		</li>
	</ul></div>

<div id="wmd-preview-section-67">
	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; " ".join(['hello', 'world']) 
'hello world' 
&gt;&gt;&gt; ','.join(['a', 'b', 'c']) 
'a,b,c'</pre>

	<ul><li>
			<strong>strip: </strong>تقوم بإرجاع سلسلة نصية مع حذف المسافات الزائدة.
		</li>
	</ul></div>

<div id="wmd-preview-section-68">
	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; ' hello world\n'.strip() 
'hello world'</pre>

	<p>
		في المثال أعلاه، يدّل الرّمز <span style="font-family:courier new,courier,monospace;">\n</span> على "سطر جديد" بحيث يطبع السّطر التّالي سطرين الأول hello والثّاني world:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; print 'hello\nworld' 
hello world</pre>

	<p>
		يُمكن كذلك تمرير قيمة نصيّة <span style="font-family:courier new,courier,monospace;">لـstrip</span> بحيث تُرجع الدّالة سلسلة نصيّة بدون القيمة المُمَرّرَةِ، لاحظ بأنّها تحذف فقط العناصر الموجودة في بداية وآخر السّلسلة، انظر المثال (لاحظ بأنّ d لم تُحذف، وذلك لأنّها وسط السّلسلة):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; 'abcdefgh'.strip('abdh') 
'cdefg'</pre>

	<ul><li>
			<strong>replace:</strong> تقوم باستبدال جزء من السّلسلة أو كامل السّلسلة بقيمة أخرى:
		</li>
	</ul><pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; 'Hsoub Academy'.replace('Academy', 'I/O') 
'Hsoub I/O'
</pre>
</div>

<div id="wmd-preview-section-72">
	<h2 id="تمارين">
		تمارين
	</h2>

	<h3>
		تمرين 1
	</h3>

	<p>
		ما مُخرجات البرنامج التّالي (اُكتبه في ملفّ باسم <span style="font-family:courier new,courier,monospace;">exercise1.py</span> ثمّ قم بتنفيذه بالأمر <span style="font-family:courier new,courier,monospace;">python exercise1.py</span>):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
x = [0, 1, [2]] 
x[2][0] = 3 
print x 
x[2].append(4) 
print x 
x[2] = 2 
print x</pre>

	<h3>
		تمرين 2
	</h3>

	<p>
		كم عدد عناصر القائمة <span style="font-family:courier new,courier,monospace;">x</span> في المثال التّالي (لا تقم بالأمر يدويّا، بل استعن بما تعلّمته):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
x = [1, 2, "hello, "world", ”Hi”, 4, 8, 3, 0, “Abdelhadi”, “Hsoub Academy”]</pre>

	<h3>
		تمرين 3
	</h3>

	<p>
		أزل القيمة "bad" من السّلسلة التاليّة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&gt;&gt;&gt; 'python is awesome bad'</pre>

	<p>
		ترجمة -وبتصرف- للكتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow" target="_blank">Python Practice Book</a> لصاحبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">223</guid><pubDate>Sat, 26 Dec 2015 23:46:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x627;&#x644;&#x645;&#x62A;&#x63A;&#x64A;&#x631;&#x627;&#x62A; &#x648;&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639;&#x647;&#x627; &#x641;&#x64A; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r221/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_12/variables-python.png.4adb61193cdf9e8136effc0c715926cc.png" /></p>
<div id="wmd-preview-section-20">
	<p id="تعرف-على-المتغيرات-وكيفية-التعامل-معها-في-بايثون">
		بعد أن تعرّفنا في <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/" rel="">الدّرس السّابق</a> على طريقة تنصيب بايثون وكيفيّة العمل معها، سنكمل في هذا الدّرس مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع البيانات مثل المُتغيّرات وأنواعها كالأرقام وإسناد القيم. ولكن قبل ذلك عليك أن تتعرّف على طريقة دعم اللغة العربيّة، ويجب عليك أن تفهم بعض المُصطلحات المتداولة في مجال البرمجة (والتّي اعتَمدتُ عليها في هذا الدّرس).
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="9895" href="https://academy.hsoub.com/uploads/monthly_2015_12/variables-python.png.08c3882d9dd1240d9bee52e9456696a7.png" rel="" data-fileext="png"><img alt="variables-python.png" class="ipsImage ipsImage_thumbnailed" data-fileid="9895" src="https://academy.hsoub.com/uploads/monthly_2015_12/variables-python.thumb.png.ebd2420608880695055b92c847b46fc3.png"></a>
	</p>
</div>

<div id="wmd-preview-section-21">
	<p>
		<strong>تذكير:</strong> نقوم بتنفيذ الأسطر البرمجيّة مُباشرة من مُفسّر بايثون، لمزيد من المعلومات عن المُفسّر راجع الدّرس السّابق. وللتوسع في لغة بايثون وتعلمها أكاديميًا، ننصحك بالانضمام إلى <a href="https://academy.hsoub.com/learn/python-application-development/" rel="">دورة تطوير تطبيقات باستخدام لغة بايثون</a> التي تقدمها أكاديمية حسوب.
	</p>

	<p style="text-align: center;">
		<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="480" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="600" data-embed-src="https://www.youtube.com/embed/1niwEWY7CN4"></iframe>
	</p>
</div>

<div id="wmd-preview-section-22">
	<h2 id="دعم-اللغة-العربية-في-بايثون">
		دعم اللغة العربية في بايثون
	</h2>

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

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="com"># -*- coding: utf-8 -*-</span></pre>

	<h2>
		المصطلحات
	</h2>
</div>

<div id="wmd-preview-section-24">
	<p>
		<strong>مخرج Output:</strong> تعني الجواب أو النّتيجة الذي يُقدّمها مُفسّر بايثون، فمثلا إذا طلبت من مُفسّر بايثون طباعة كلمة Hello، فستستخدم السّطر التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Hello"</span><span class="pln"> 
</span><span class="typ">Hello</span></pre>

	<p>
		هنا نُسمّي Hello المُخرج الذي يُرجعه البرنامج (أي نتيجة الأمر). 
	</p>

	<p>
		<strong>مُتغيّر:</strong> وهو الاسم الذي نُطلقه على حرف أو “كلمة” تحمل قيمة مُعيّنة، مثلا: 
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7919_8"><span class="pln">&gt;&gt;&gt; name = "abdelhadi"</span></pre>

	<p>
		هنا قُمنا بإنشاء مُتغيّر <span style="font-family:courier new,courier,monospace;">name</span> وأسندنا له القيمة <span style="font-family:courier new,courier,monospace;">abdelhadi</span>. <br>
		وإذا أردنا إظهار القيمة <span style="font-family:courier new,courier,monospace;">abdelhadi</span> فيكفي أن نكتب اسم المُتغيّر في مُفسّر بايثون:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> name</span></pre>

	<p>
		كما يُمكن أن نضيف تحّية على الشّكل التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Hello "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> name</span></pre>

	<p>
		تُفسّر الشيفرة أعلاه وتكون مُخرجاتها:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="typ">Hello</span><span class="pln"> </span><span class="typ">Abdelhadi</span><span class="pln"> </span></pre>

	<p>
		يُمكن أن يحمل المُتغيّر عدّة أنواع من القيم، كالأرقام والنّصوص والأحرف…
	</p>
</div>

<div id="wmd-preview-section-28">
	<h2 id="تعيين-القيم">
		تعيين القيم
	</h2>

	<p>
		يُعتبر تعيين قيمة لاسم معيّن من أهمّ أساسيّات البرمجة، وهذا الاسم معروف في البرمجة بالمُتغيّر، وإليك مثالا على ذلك:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">*</span><span class="pln"> x 
</span><span class="lit">16</span></pre>

	<p>
		قمنا في المثال أعلاه بوضع القيمة 4 للمتغيّر <span style="font-family:courier new,courier,monospace;">x</span>، بعبارة أخرى المُتغيّر <span style="font-family:courier new,courier,monospace;">x</span> يحمل القيمة 4. بحيث يُمكننا استعمال <span style="font-family:courier new,courier,monospace;">x</span> عوضا عن 4 في باقي الأسطر في برنامجنا. وبعدها قمنا بالعمليّة الحسابيّة <strong>x * x</strong> أي <strong>4 * 4</strong> وحصلنا على 16 كنتيجة. 
	</p>

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

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> foo 
</span><span class="typ">Traceback</span><span class="pln"> </span><span class="pun">(</span><span class="pln">most recent call </span><span class="kwd">last</span><span class="pun">):</span><span class="pln"> 
  </span><span class="typ">File</span><span class="pln"> </span><span class="str">"&lt;stdin&gt;"</span><span class="pun">,</span><span class="pln"> line </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> 
</span><span class="typ">NameError</span><span class="pun">:</span><span class="pln"> name </span><span class="str">'foo'</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">defined</span><span class="pln"> 

</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> foo </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> foo 
</span><span class="lit">4</span></pre>

	<p>
		حاولنا أعلاه أن نقوم باستخدام المُتغيّر <span style="font-family:courier new,courier,monospace;">foo</span> الذي لم نعرّفه أساساً، فحصلنا على رسالة من مُفسّر بايثون مفادها بأنّ المُتغيّر <span style="font-family:courier new,courier,monospace;">foo</span> ليس موجودا. وبعد تعريفه وتعيين القيمة "4" له أصبح بإمكاننا استدعاؤه بدون أي مشكلة.
	</p>
</div>

<div id="wmd-preview-section-30">
	<p>
		إذا وضعت قيمة مُغايرة لمتغيّر يحمل مُسبقاً قيمة ما، فالقيمة القديمة تُستَبدَل بالقيمة الجديدة، بحيث يحمل المتغيّر القيمة الجديدة.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="lit">4</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'hello'</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x 
</span><span class="str">'hello'</span></pre>

	<p>
		في المثال أعلاه، قمنا بتحديد القيمة "4" للمتغيّر <span style="font-family:courier new,courier,monospace;">x</span> ثمّ بعد ذلك قمنا بتحديد "hello" لنفس المُتغيّر فأصبح <span style="font-family:courier new,courier,monospace;">x</span> يحمل القيمة <span style="font-family:courier new,courier,monospace;">hello</span> في نهاية المطاف.
	</p>
</div>

<div id="wmd-preview-section-31">
	<p>
		ويُمكنك تعيين أكثر من قيمة لأكثر من مُتغيّر في آن واحد.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</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="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="lit">1</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="lit">2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a </span><span class="pun">+</span><span class="pln"> b 
</span><span class="lit">3</span></pre>

	<p>
		ومُبادلة قيمتي مُتغيّرين (بحيث يحمل المُتغيّر قيمة الآخر) سهل جدّا في لغة بايثون:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</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="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a</span><span class="pun">,</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> b</span><span class="pun">,</span><span class="pln"> a 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> a 
</span><span class="lit">2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> b 
</span><span class="lit">1</span></pre>

	<p>
		عند تعيينِ قيمة في بايثون، تكون الأهميّة للجانب الأيمن قبل الأيسر، بحيث يقوم بايثون بالتّعرّف على القيّم في الجانب الأيمن ثمّ يقوم بتعيينها للمتغيّرات في الجانب الأيسر لعلامة <strong>=</strong> . إذ ما يقع على يسار علامة <strong>= </strong>هو المُتغير وما يقع على يمينها هو القيمة.
	</p>
</div>

<div id="wmd-preview-section-34">
	<h2 id="التعليقات">
		التعليقات
	</h2>

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

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="com"># السّطر التّالي عبارة عن تعيين قيمة لمتغيّر </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'hello'</span><span class="pln"> </span><span class="com"># هذا السّطر عبارة عن تعيين قيمة لمتغيّر</span></pre>

	<h2>
		الأرقام
	</h2>
</div>

<div id="wmd-preview-section-36">
	<p>
		لقد تعرّفنا من قبل حول كيفيّة التّعامل مع الأرقام بشكل بسيط.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">42</span><span class="pln"> 
</span><span class="lit">42</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">6</span></pre>

	<p>
		تدعم بايثون الأعداد العشريّة كذلك.
	</p>
</div>

<div id="wmd-preview-section-37">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">4.2</span><span class="pln"> 
</span><span class="lit">4.2</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">4.2</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2.3</span><span class="pln"> 
</span><span class="lit">6.5</span></pre>

	<p>
		وتدعم العمليّات المُختلفة مثل الإضافة والفرق وغيرهما من العمليّات الحسابيّة:
	</p>

	<ul>
		<li>
			<span style="line-height: 1.6;"><strong>+ </strong>إضافة </span>
		</li>
		<li>
			<span style="line-height: 1.6;"><strong>-</strong> الفرق </span>
		</li>
		<li>
			<span style="line-height: 1.6;"><strong>*</strong> الضّرب </span>
		</li>
		<li>
			<span style="line-height: 1.6;"><strong>/</strong> القسمة </span>
		</li>
		<li>
			<span style="line-height: 1.6;"><strong>** </strong>الأس (القوة) </span>
		</li>
		<li>
			<span style="line-height: 1.6;"><strong>% </strong>باقي القسمة</span>
		</li>
	</ul>
</div>

<div id="wmd-preview-section-38">
	<p>
		لنجرّب هذه العمليّات على الأعداد الصّحيحة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="com"># عمليّة إضافة</span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">9</span><span class="pln">
 
</span><span class="com"># عمليّة فرق </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">5</span><span class="pln">
 
</span><span class="com"># عمليّة ضرب </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">14</span><span class="pln">
 
</span><span class="com"># عمليّة قسمة </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">3</span><span class="pln"> 

</span><span class="com"># الأس </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">**</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">49</span><span class="pln"> 

</span><span class="com"># باقي القسمة </span><span class="pln">
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">1</span></pre>

	<p>
		إذا تمعّنت في النّظر ستجد أنّ ناتج قسمة 7 على 2 يُساوي 3 وليس 3.5 وهذا لأنّ الرّمز <strong>/</strong> يُرجع الأرقام الصحيحة فقط عندما يعمل معها، لننظر مالذي سيحدث إذا جرّبنا نفس الأمر لكن بأعداد عشريّة هذه المرّة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7.0</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2.0</span><span class="pln"> 
</span><span class="lit">3.5</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7.0</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> 
</span><span class="lit">3.5</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2.0</span><span class="pln"> 
</span><span class="lit">3.5</span></pre>

	<p>
		يُمكن القيّام بالعمليّات الحسابيّة بالاعتماد على أكثر من عامل:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</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</span><span class="pln"> 
</span><span class="lit">11</span><span class="pln"> 
</span><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">2</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="lit">10</span></pre>

	<p>
		هذا مهمّ جدّا وذلك لفهم كيفيّة تعامل لغة بايثون مع العمليّات الحسابيّة، حيث هناك أولويّات للعمليّات وذلك كالقائمة التّالية، من الأقل أولويّة إلى الأه:
	</p>

	<p style="text-align: center;">
		<strong><span style="line-height: 1.6;">+  -  </span></strong>
	</p>

	<p style="text-align: center;">
		<strong><span style="line-height: 1.6;">*  /  </span></strong>
	</p>

	<p style="text-align: center;">
		<strong><span style="line-height: 1.6;">%  **</span></strong>
	</p>
</div>

<div id="wmd-preview-section-41">
	<p>
		ولفهم ذلك أكثر، إليك هذا المثال: عند تنفيذ العمليّة <strong>2 + 3 * 4</strong> في بايثون فالعمليّة الأولى التّي تُنفّذ هي <strong>3 * 4</strong> ، لأن العامل <strong>*</strong> أكثر أولويّة من عامل <strong>+</strong>، وبعد ذلك تضاف القيمة إلى 2.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="lit">2</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="lit">14</span></pre>

	<p>
		يُمكننا أن نعتمد على الأقواس <strong>()</strong> لتحديد أولويّات العمليّات، انظر المثال التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pun">&gt;&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> 
</span><span class="lit">20</span></pre>

	<p>
		في المثال أعلاه، قمنا بوضع العمليّة <strong>2+3</strong> بين قوسين لإخبار مُفسّر بايثون بأنّ لهذه العملية الأولويّة ويجب حسابها أوّلا، فإن لم نقم بوضع القوسين لقام المُفسّر بحساب العمليّة <strong>4*3</strong> ثم إضافة العدد 2.
	</p>
</div>

<div id="wmd-preview-section-43">
	<p>
		جميع العمليّات باستثناء <strong>**</strong> يبدأ تطبيقها من اليسار ثمّ اليمين.
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="lit">1</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</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="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</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="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</span><span class="pln">   </span><span class="pun">+</span><span class="pln">   </span><span class="lit">12</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">15</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">20</span></pre>

	<h2>
		تمارين
	</h2>

	<h3>
		تمرين 1
	</h3>

	<p>
		ما هي مُخرجات (القيّم التّي سيطبعها) البرنامج التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> 
y </span><span class="pun">=</span><span class="pln"> x </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</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="pln"> x</span><span class="pun">,</span><span class="pln"> y</span></pre>
</div>

<div id="wmd-preview-section-45">
	<h3>
		تمرين 2
	</h3>

	<p>
		ما هي مُخرجات (نتيجة) البرنامج التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pln">x</span><span class="pun">,</span><span class="pln"> y </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">6</span><span class="pln"> 
x</span><span class="pun">,</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> y</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="pln"> x</span><span class="pun">,</span><span class="pln"> y</span></pre>
</div>

<div id="wmd-preview-section-46">
	<h3>
		تمرين 3
	</h3>

	<p>
		ما هي مُخرجات البرنامج التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4"><span class="pln">a</span><span class="pun">,</span><span class="pln"> b </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="pln"> 
c</span><span class="pun">,</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> a</span><span class="pun">,</span><span class="pln"> c </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="pln"> a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">,</span><span class="pln"> c</span></pre>
</div>

<div id="wmd-preview-section-47">
	<p>
		ترجمة -وبتصرف- للكتاب <a href="http://anandology.com/python-practice-book/index.html" rel="external nofollow">Python Practice Book</a> لصاحبه Anand Chitipothu.
	</p>
</div>
]]></description><guid isPermaLink="false">221</guid><pubDate>Tue, 22 Dec 2015 22:23:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x644;&#x63A;&#x629; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/----.png.224a1459f6dc926673887ab03e0a5675.png" /></p>
<div id="wmd-preview-section-26">
	<p id="مقدمة">
		بايثون (Python) لغة برمجة تتميّز بسهولة تعلّمها، وتُعدّ مثالا جيّداً لبدء تعلّم البرمجة بالنّسبة للمبتدئين. وستجد في هذه السّلسلة من الدّروس (الذي يُمثّل هذا المقال الجزء الأوّل منها) ما تحتاج إليه لتعلّم أساسيّات هذه اللّغة.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="9038" href="https://academy.hsoub.com/uploads/monthly_2015_12/python1_(1).png.bfae24d361175ab58513cb0d041297df.png" rel=""><img alt="python1_(1).thumb.png.3be9c05d8183f9ccb7" class="ipsImage ipsImage_thumbnailed" data-fileid="9038" src="https://academy.hsoub.com/uploads/monthly_2015_12/python1_(1).thumb.png.3be9c05d8183f9ccb7507c14a6c0b83e.png"></a>
	</p>
</div>

<div id="wmd-preview-section-27">
	<h2 id="ما-هي-بايثون">
		ما هي بايثون؟
	</h2>

	<p>
		لغة برمجة ابتكرها “جايدو ڤان روسم”، وقد خرجت أول نسخة من بايثون في عام 1991. 
	</p>

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

<div id="wmd-preview-section-28">
	<h2 id="ما-الغرض-من-لغة-بايثون">
		ما الغرض من لغة بايثون؟
	</h2>

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

	<ul>
		<li>
			<strong>الويب:</strong> في أيامنا هذه تعتبر بايثون مع إطار العمل <strong>Django</strong> من أفضل الأدوات لتطوير مشاريع ضخمة على الويب تتمثّل أساسا في مواقع الأنترنت.
		</li>
		<li>
			<strong>الأنظمة:</strong> تعتبر بايثون كذلك من أحسن اللغات التي يستعملها مدراء الأنظمة لإنشاء برمجيّات للمُساعدة في إنجاز مهام مُتكرّرة وكذلك لصيّانة النظام، وإذا كنت ترغب في كتابة تطبيقات Java باستعمال بايثون فيُمكنك ذلك بفضل مشروع <strong>Jython</strong>.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-29">
	<h2 id="لماذا-بايثون">
		لماذا بايثون؟
	</h2>

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

	<p>
		كما هناك مكتبات خاصّة لإنشاء ألعاب 2D (وكذلك 3D)، ومكتبة <strong>PyGame</strong> مثال على ذلك.
	</p>
</div>

<div id="wmd-preview-section-30">
	<h2 id="من-يستعمل-بايثون">
		من يستعمل بايثون؟
	</h2>

	<p>
		شركة جوجل (وقد كان مؤسّس بايثون يعمل لصالح الشّركة منذ 2005 إلى 2012)،كما أنّ ياهوو، مايكروسوفت وناسا كلّها مؤسّسات تعتمد على بايثون وهذه الشركات على سبيل المثال فقط لا الحصر.
	</p>
</div>

<div id="wmd-preview-section-31">
	<h2 id="الفرق-بين-إصداري-بايثون-2-وبايثون-3">
		الفرق بين إصداري بايثون 2 وبايثون 3
	</h2>

	<p>
		كان هناك العديد من التّغييرات عند خروج الإصدار الثّالث من بايثون، وكان أكبر تغيير يتمثّل في تغيير جملة الطباعة <span style="font-family:courier new,courier,monospace;">print</span> من:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="kwd">print</span><span class="pln"> </span><span class="str">"مرحبا"</span></pre>

	<p>
		إلى:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">"مرحبا"</span><span class="pun">)</span></pre>

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

<div id="wmd-preview-section-34">
	<h2 id="تنصيب-بايثون">
		تنصيب بايثون
	</h2>
</div>

<div id="wmd-preview-section-35">
	<h3 id="تنصيب-بايثون-على-نظام-linux-أو-macos">
		تنصيب بايثون على نظام Linux أو MacOS
	</h3>

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

<div id="wmd-preview-section-36">
	<h3 id="تنصيب-بايثون-على-نظام-windows">
		تنصيب بايثون على نظام Windows
	</h3>

	<p>
		<a href="https://www.python.org/download/" rel="external nofollow">يُمكنك تحميل بايثون من الموقع الرّسمي.</a>
	</p>
</div>

<div id="wmd-preview-section-37">
	<h3 id="أي-نسخة-أختار">
		أي نسخة أختار؟
	</h3>

	<p>
		حاول اختيّار النّسخة الأكثر حداثة واستقرارا، وسنعمل بنسخة Python 2.7 لأنّها النّسخة الأكثر استخداما. 
	</p>

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

<div id="wmd-preview-section-38">
	<h2 id="مفسر-بايثون">
		مفسر بايثون
	</h2>

	<p>
		لاستعمال بايثون على Ubuntu مثلا، شغّل الطرفيّة Terminal: 
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="9031" href="https://academy.hsoub.com/uploads/monthly_2015_12/python1.png.7bb61ae492d4a1c61d2abc77942538c7.png" rel=""><img alt="python1.thumb.png.92c1f5fe8a4d11c53f4056" class="ipsImage ipsImage_thumbnailed" data-fileid="9031" src="https://academy.hsoub.com/uploads/monthly_2015_12/python1.thumb.png.92c1f5fe8a4d11c53f4056790ceb9938.png"></a>
	</p>

	<p>
		ثمّ نفّذ الأمر <span style="font-family:courier new,courier,monospace;">python</span>: 
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="9032" href="https://academy.hsoub.com/uploads/monthly_2015_12/python2.png.40cc90a6b83881456a78ddc4b03968c4.png" rel=""><img alt="python2.thumb.png.7516f8e9372f3b33c99dda" class="ipsImage ipsImage_thumbnailed" data-fileid="9032" src="https://academy.hsoub.com/uploads/monthly_2015_12/python2.thumb.png.7516f8e9372f3b33c99ddac442e732c3.png"></a>
	</p>

	<p>
		أمّا على نظام ويندوز فيمكنك الوصول إلى المُفسّر من قائمة "ابدأ".
	</p>

	<p>
		يُمكن ملاحظة الرّمز "<strong>&lt;&lt;&lt;</strong>" الذي يعني بأنّ مُفسّر لغة بايثون جاهز لاستقبال الإرشادات والأوامر. وبشكل عام في دروس بايثون يعني الرّمز السّابق إذا كان ملحقا بأيّ شيفرات، بأنّك يجب أن تُنفذ الشّيفرات على الطّرفيّة. ويُمكن القيّام بذلك عبر كتابته ثمّ الضغط على زر <span style="font-family:courier new,courier,monospace;">Enter</span>. 
	</p>

	<p>
		يُمكننا الآن أن نجرّب كتابة شيفرة بسيطة عبارة عن عمليّة حسابيّة "3+1": 
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="9033" href="https://academy.hsoub.com/uploads/monthly_2015_12/python3.png.ec16a4cbc53c1aed75c9f0aab8fe1557.png" rel=""><img alt="python3.thumb.png.41784b114bb06e6bc6414e" class="ipsImage ipsImage_thumbnailed" data-fileid="9033" src="https://academy.hsoub.com/uploads/monthly_2015_12/python3.thumb.png.41784b114bb06e6bc6414e7ed37b4465.png"></a>
	</p>

	<p>
		بهذا نكون قد فهمنا أساس مُفسّر بايثون وماهيّته.
	</p>

	<p>
		في بعض المُحرّرات (مثل المحرّر Wing IDE) يكون المُفسّر الخاصّ ببايثون مُضمّناً في البرنامج، وسنتحدّث عن الأمر في القسم التّالي من الدّرس.
	</p>
</div>

<div id="wmd-preview-section-39">
	<h2 id="المحرر">
		المحرر
	</h2>
</div>

<div id="wmd-preview-section-40">
	<h3 id="محرر-wing-ide">
		محرر Wing IDE
	</h3>

	<p>
		يعد مُحرّر <span style="font-family:arial,helvetica,sans-serif;"><strong>Wing IDE</strong></span> في نُسخته المجانيّة من أفضل المُحرّرات للمبتدئين لكتابة شيفرات بايثون خاصّة وأنّه يأتي مع مُفسّر بايثون. وهو محرّر مصمّم من مطوّري بايثون لمُطوّري بايثون، ويُعدّ من أفضل المُحرّرات لمن يرغب في تعلّم اللغة، النّسخة المجانيّة منه توفّر خيّارات أقلّ لمستخدميه مقارنة بالنّسخة المدفوعة (وتُباع بحوالي 45$). 
	</p>

	<p>
		يُمكنك تحميل النّسخة المجانيّة منه عبر <a href="https://wingware.com/" rel="external nofollow">هذا الرّابط</a>. 
	</p>

	<p>
		إذا كنت تعمل على نظام Ubuntu فحمّل الملفّ بامتداد <span style="font-family:courier new,courier,monospace;">deb.</span>، اضغط مرّتين على الملف ثم اضغط على "تنصيب". إذا واجهتك أي مُشكلة فحاول تنفيذ الأمر التّالي من الطّرفيّة:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install </span><span class="pun">-</span><span class="pln">f</span></pre>

	<p>
		هذه بعض اللقطات من البرنامج:
	</p>
</div>

<div id="wmd-preview-section-41">
	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="9034" href="https://academy.hsoub.com/uploads/monthly_2015_12/python4.png.38bfb8f275506544455ab39f45b93e97.png" rel=""><img alt="python4.thumb.png.c835d13eea0be1d59af631" class="ipsImage ipsImage_thumbnailed" data-fileid="9034" src="https://academy.hsoub.com/uploads/monthly_2015_12/python4.thumb.png.c835d13eea0be1d59af631334e409a05.png"></a>
	</p>
</div>

<div id="wmd-preview-section-42">
	<h3 id="محرر-sublime-text">
		محرر Sublime Text
	</h3>

	<p>
		الآن لننتقل إلى هذا المُحرّر الرّائع الذي يجمع بين الخفّة والقوّة.
	</p>

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

	<p>
		من المُفضل أن تُثبّت أداة <strong>packagecontrol</strong>، التّي تُمكّنك من تنصيب الإضافات المُتطلّبة لمشروعك. 
	</p>

	<p>
		وإليك بعضا من اختصارات المحرّر الأكثر استخداما:
	</p>

	<ul>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + X</span> حذف سطر 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + P </span>تصفّح الملفّ 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + R</span> تحريك المؤشّر إلى الدّالة في الملفّ 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + L</span> تظليل السّطر الحالي 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + D</span> تظليل الكلمة الحاليّة 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + Shift + D</span> مُضاعفة السّطر الحالي 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + M</span> تحريك المؤشّر إلى نهاية الدّالة 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + G</span> تحريك المؤشّر إلى السّطر رقم X في الملف 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">Ctrl + Shift + T</span> إعادة فتح آخر ملف أُغلِق مؤخّراً 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">CTRL + SHIFT + F</span> البحث عن ملفّ في مجلّد ما 
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">CTRL + ALT + P</span> التبديل بين المشاريع
		</li>
	</ul>
</div>

<div id="wmd-preview-section-43">
	<h3 id="محرر-vim">
		محرر VIM
	</h3>

	<p>
		يعتبر محرّر<strong> VIM</strong> من أخفّ وأقوى المُحرّرات، ويعمل من الطّرفيّة مباشرة ما يتيح لك إمكانيّة التّعديل على الملفّات وتشغيلها بسرعة، كما يتميّز بعدم استهلاكه لموارد الجهاز. ويُمكنك معرفة المزيد عن هذا المُحرّر بالاطّلاع على <a href="https://academy.hsoub.com/search/?tags=%D9%85%D8%AF%D8%AE%D9%84%20%D8%A5%D9%84%D9%89%20%D9%85%D8%AD%D8%B1%D9%91%D8%B1%20vim" rel="">سلسلة</a> VIM التّي قُمت بكتابتها منذ مُدّة.
	</p>
</div>

<div id="wmd-preview-section-44">
	<h2 id="تنفيذ-سكريبتات-بايثون">
		تنفيذ سكريبتات بايثون
	</h2>

	<p>
		بعد أن تعرّفنا على الأساسيّات، حان الوقت لبدأ التعلم، افتح ملفّا جديدا بمحرّر من اختيّارك واكتب السّطر التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="kwd">print</span><span class="pln"> </span><span class="str">"hello, world!"</span></pre>

	<p>
		واحفظ الملف باسم <span style="font-family:courier new,courier,monospace;">hello.py</span>، لا يهم اسم الملف هنا المهمّ امتداده (<span style="font-family:courier new,courier,monospace;">py.</span>) الذي يخبر نظام التّشغيل بأنّ الملف مكتوب بلغة بايثون. 
	</p>

	<p>
		يُمكنك الآن تنفيذ (أو تشغيل) الملفّ الذي قمت بإنشائه بكتابة السّطر التّالي في الطّرفيّة ثمّ الضّغط على مفتاح <span style="font-family:courier new,courier,monospace;">ENTER</span>، فقط تأكد من أنّ الطّرفيّة والملفّ يشيران إلى نفس المجلّد:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">python hello</span><span class="pun">.</span><span class="pln">py</span></pre>

	<p>
		سترجع الطّرفيّة قيمة كالتالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">hello</span><span class="pun">,</span><span class="pln"> world</span><span class="pun">!</span></pre>

	<p>
		النّص الذي يكون مبدوءا برمز # لا يُنفّذ ويسمّى تعليقا (سنتطرّق للأمر لاحقاً):
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="com"># هذا برنامج بايثون يقوم بطباعة جملة مرحبا بالعالم</span><span class="pln">
</span><span class="com"># شغّل هذا البرنامج بالأمر التّالي: </span><span class="pln">
</span><span class="com"># python hello.py </span><span class="pln">

</span><span class="kwd">print</span><span class="pln"> </span><span class="str">"hello, world!"</span></pre>

	<p>
		والآن حان دورك. لكي تتعلّم البرمجة بشكل جيّد فيجب عليك أن تتمرّن باستمرار. 
	</p>

	<p>
		<strong>مسألة 1:</strong> أنشئ ملفّ بايثون يقوم بطباعة hello, world أربع مرّات.
	</p>
</div>

<div id="wmd-preview-section-48">
	<p>
		<strong>مسألة2:</strong> أنشئ ملف بايثون يحتوي على السّطر التّالي:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="lit">1</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</span></pre>

	<p>
		قم بتنفيذه. ما هي النّتيجة التي حصلت عليها؟ 
	</p>

	<p>
		إذا لم يقم البرنامج بطباعة أي شيء، فما التّغييرات التّي يجب عليك القيّام بها لطباعة النتيجة المُتوقّعة؟
	</p>

	<h2>
		كيف أحترف بايثون
	</h2>

	<p>
		ل<a href="https://academy.hsoub.com/python/" rel="">تعلم لغة بايثون</a> واحترافها، يُنصح بالانضمام إلى <a href="https://academy.hsoub.com/learn/python-application-development/" rel="">دورة تطوير تطبيقات باستخدام لغة بايثون</a> التي تقدمها أكاديمية حسوب، والتي تمكّنك من تعلّم التطوير بلغة بايثون للتطبيقات ولمواقع الويب بالاعتماد على النظريات السليمة والتطبيق العملي والدعم المباشر، وذلك بالانطلاق من الصفر حتى الاحتراف فيها. ستتعلم من خلال الدورة كيفية بناء تطبيقات فعلية بالاعتماد على لغة بايثون Python نفسها، كما ستتعلم كيفية بناء التطبيقات بالاعتماد على إطار العمل جانغو Django، إضافةً إلى تطبيقٍ عملي لإنشاء واجهة برمجية <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> باستخدام إطار العمل فلاسك Flask، إلى جانب الحصول على المتابعة اللازمة من المدربين لمرافقتك خلال رحلة تعلمك والإجابة على كافة استفساراتك.
	</p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="480" id="ips_uid_7885_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="600" data-embed-src="https://www.youtube.com/embed/1niwEWY7CN4"></iframe>

	<p>
		كما يمكنك الاستعانة <a href="https://wiki.hsoub.com/Python" rel="external">بتوثيق بايثون من موسوعة حسوب</a> لإثراء معارفك بها، ولا تنسى مطالعة سلسلة <a href="https://academy.hsoub.com/tags/python%20101/" rel="">paython 101</a>.
	</p>

	<p>
		ترجمة -وبتصرف- للدرس <a href="http://apprendre-python.com" rel="external nofollow">Apprendre le langage de programmation Python</a> لصاحبه Olivier ENGEL.
	</p>

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

	<ul>
		<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="">البرمجة بلغة بايثون 1.0.0</a>
		</li>
		<li>
			<a href="https://wiki.hsoub.com/Python" rel="external">توثيق لغة بايثون</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><br>
			 
		</li>
	</ul>
</div>
]]></description><guid isPermaLink="false">211</guid><pubDate>Fri, 11 Dec 2015 00:16:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x633;&#x62A;&#x62E;&#x62F;&#x645; &#x627;&#x644;&#x625;&#x637;&#x627;&#x631; &#x627;&#x644;&#x645;&#x635;&#x63A;&#x631; Bottle &#x644;&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; Python &#x644;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/python/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%B5%D8%BA%D8%B1-bottle-%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-python-%D9%84%D9%84%D9%88%D9%8A%D8%A8-r93/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/bottle.png.c02a4934ef1272120047697041bd8de6.png" /></p>

<p dir="rtl">بايثون (Python) لغة ممتازة لبرمجة الويب نظرا لمرونتها وأدائها العالي.</p><p dir="rtl">أطُرُ الويب يمكن أن تجعل برمجة تطبيقات الويب أبسط بكثير لأنها توصل العديد من المكونات الضرورية مع بعضها للحصول على تطبيق قوي.</p><p dir="rtl">في حين تهدف بعض أطر الويب إلى توفير كل شيء يمكن أن يرغب به المستخدم لتطوير تطبيق ما، هناك أطر أخرى تحاول البقاء بعيدا والاهتمام بالأهم، Bottle إطار للغة بايثون يندرج ضمن النوع الثاني. إنه بالفعل خفيف ومصغر، لكنه يجعل تطوير التطبيقات سهلا وسريعا.</p><p dir="rtl">في هذا المقال، سنعرض طريقة ضبط واستعمال إطار العمل المصغّر Bottle لإنشاء تطبيقات ويب بسيطة وباستعمال لغة Python.</p><h2 dir="rtl">كيفية تثبيت Bottle</h2><h3 dir="rtl">تثبيت Python</h3><p dir="rtl">إطار Bottle مبني على لغة Python وهي مثبتة مسبقا على أنظمة لينكس وOS X، أما بالنسبة لنظام Windows فيمكن <a rel="external nofollow" href="https://www.python.org/downloads/windows/">تنصيب Python 2 عبر تحميلها من موقعها الرسمي</a>.</p><p dir="rtl"><strong>الجدير بالذّكر أن هذا الدّرس خاصّ بالإصدار الثاني من بايثون (Python 2.x).</strong></p><h4 dir="rtl">تثبيت وتفعيل بيئة وهمية</h4><p dir="rtl">سنثبت حزمة virtualenv لعزل مشروع بايثون الخاص بنا من بيئة بايثون الخاصة بالنظام. يمكننا فعل هذا بسهولة عبر تنصيب أداة إدارة الحزم الخاصة ببايثون واسمها pip.</p><p dir="rtl">لتنصيب pip على Ubuntu يكفي تنصيب virtualenv مباشرة، فهي إحدى اعتمادياته:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update
sudo apt-get install python-virtualenv
</pre><p dir="rtl">بالنسبة لأنظمة OS X و Windows يمكن تنصيبه بتنصيب pip ثم تنصيب virtualenv عبرها:</p><p dir="rtl">أو احفظ هذا الملف على جهازك، ثم نفذ الأمر التالي على نافذة الأوامر بالنسبة لـ Windows أو Terminal بالنسبة لـِ Mac OS X، في كلا النظامين، <strong>ستحتاج أن تنفذ الأمر التالي بصلاحيات المدير</strong>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">python get-pip.py</pre><p dir="rtl">برنامج virtualenv عبارة عن بيئة وهمية لبايثون لتنصيب مكتبات بايثون في معزل عن بيئة بايثون الحقيقية على النظام، هذا مهم جدا لعزم اعتماديات مشروع الويب الخاص بك وما يحتاجه من حزم عن الحزم العامة المنصبة على كافة النظام، تحتوي بيئة مشاريع بايثون الخاصة بنا على حزمنا فقط، لكي لا تؤثر على نظام التشغيل ككل. سننشئ مجلد المشاريع projects في مجلد Home أو ماشابه، ثم نقوم بإنشاء بيئة وهمية في هذا المجلد، بالنسبة لـ Windows يمكن تنفيذ هذه الأوامر باستخدام طرفية PowerShell:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">mkdir ~/projects

cd ~/projects
virtualenv --no-site-packages venv
</pre><p dir="rtl">هذا سينشئ مجلدا باسم venv داخل مجلد المشاريع. لقد تُبِّتت بعض أدوات بايثون داخل هذا المجلد وأنشِئَت بنية مجلد لتثبيت أدوات إضافية.</p><p dir="rtl">يجب علينا تفعيل البيئة الوهمية قبل بداية العمل على مشروعنا :</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">source venv/bin/activate</pre><p dir="rtl">الأمر المُخرَج سيتغير لعكس حقيقة أننا نقوم بعمليات داخل بيئة وهمية الآن. وسيكون كالتالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">(venv)user@Hostname:~/projects$</pre><p dir="rtl">إذا أردت الخروج من البيئة الوهمية، يمكنك في أي وقت كتابة الأمر التالي :</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">deactivate</pre><p dir="rtl"><strong>ملاحظة</strong>: لا تخرج من البيئة الوهمية حاليا.</p><h2 dir="rtl">تثبيت Bottle</h2><p dir="rtl">أداة pip تُمكنك من تثبيت حزم بايثون بسهولة من <a rel="external nofollow" href="https://pypi.python.org/pypi">دليل حزم بايثون Python package index</a>، وهو مستودع مُفهرس لمكتبات بايثون.</p><p dir="rtl">إذا أردنا البحث عن حزم بايثون المتعلقة بـِ Bottle، يمكن تنفيذ:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">pip search bottle</pre><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right">سنبدأ بتثبيت حزمة Bottle فقط:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">pip install bottle</pre><p dir="rtl">بعد إنتهاء العملية، سنتمكن من استخدام إطار Bottle داخل تطبيقاتنا.</p><h2 dir="rtl">إنشاء أول تطبيق باستخدام Bottle</h2><p dir="rtl">كمعظم الأطر، Bottle يطبق نسخة من النمط البرمجي MVC .MVC اختصار لـِ Model, view, controller نموذج،عرض،هيكل؛ وهو أمر للفصل بين عوامل مختلفة بين واجهة المستخدم والمنطق البرمجي.</p><ul dir="rtl"><li>النموذج model تمثيل لمجموعة من البيانات وهو مسؤول عن تخزين، استعلام، وتحديث البيانات.</li><li>العرض view مسؤول عن كيفية تقديم المعلومة للمستخدم. ويُستخدم لتشكيل وضبط عرض البيانات.</li><li>الهيكل controller هو مركز العمليات الرئيسي للتطبيق، والذي يقرر كيفية الإجابة لطلبات المستخدم.</li></ul><p dir="rtl">تطبيقات bottle يمكنها أن تكون بسيطة للغاية. في شكلها البسيط يمكنها تنفيذ جميع المكونات في ملف واحد. سنقوم بإنشاء تطبيق "مرحبا بالعالم" لعرض كيفية العمل.</p><p dir="rtl">باستعمال محررك المفضل (في هذه الحالة سنستعمل محرر سطر الأوامر nano، بالنسبة لنظام Windows يمكنك استعمال محرر مرئي)، أنشئ تطبيق بايثون باسم hello.py:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">nano hello.py</pre><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right">في هذا الملف، سنقوم أولا باستدعاء بعض الوظائف من حزمة Bottle. الأمر الذي سيمكننا من استخدام أدوات الإطار داخل تطبيقنا:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">from bottle import route, run</pre><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right">هذا السطر يخبر برنامجنا بأننا نحتاج إلى استيراد المسار route وتشغيل النماذج modules من حزمة Bottle.</p><p dir="rtl">نموذج run الذي قمنا باستيراده يمكن أن يُستعمل لتشغيل التطبيق في خادوم التطوير، الشيء الذي يعتبر جيداً لرؤية نتائج برنامجك بسرعة.</p><p dir="rtl">نموذج route مسؤول عن إخبار التطبيق بالتعامل مع أي من طلباتURL باستخدام أي من دوال بايثون.تطبيقات Bottle تنفّذ التوجيه routing باستدعاء دالّة بايثون واحدة لكلّ طلب من طلبات URL. وتقوم بعد ذلك بإرجاع نتائج الدالة للمُستخدم.</p><p dir="rtl">نستطيع إضافة توجيه سيُوافق رابط URL /hello</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">from bottle import route, run
@route('/hello')</pre><p dir="rtl">هذا التوجيه سيوافق رابط URL /hello عندما يتمّ طلب هذا المسار على الخادوم. ستُنفّذ الدّالة التّابعة مباشرة:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
from bottle import route, run

@route('/hello')
def hello():
    return u"&lt;h1&gt;مرحباً بالعالم&lt;/h1&gt;"</pre><p dir="rtl"><strong>ملاحظات</strong>:</p><ul dir="rtl"><li>السطر # -*- coding: utf-8 -*- مسؤولٌ عن دعم اليونيكود وبالتالي اللغة العربية، فهو يخبر مفسر بايثون أن هذا الملف به أحرف unicode غير الأحرف الانجليزية.</li><li>حرف u (اختصارًا لـ unicode) قبل النص العربي مهم أيضا لإخبار بايثون أن هذه السلسلة النصية بالضبط تحتوي على أحرف يونيكود وبالتالي يعامل السلسلة النصية بطريقة خاصة.</li></ul><p dir="rtl">هذه الدّالة بسيطة جدّاً، لكنّها كافية لإكمال المتطلّب الوحيد لدالّة توجيه: تقوم بإرجاع قيمة يُمكن عرضها على المتصفّح. في هذه الحالة، القيمة عبارة عن نص HTML. يمكننا حذف وسم h1 وستُعرض نفس القيمة بشكل غير منسّق.</p><p dir="rtl">أخيراً، نحتاج إلى تشغيل تطبيقنا باستعمال خادوم التّطوير development server:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
from bottle import route, run

@route('/hello')
def hello():
    return u"&lt;h1&gt;مرحباً بالعالم&lt;/h1&gt;"

run(host='0.0.0.0', port=8080)</pre><p dir="rtl">هذا السطر سيُشغل الخادوم. بتمرير المعامل<span style="font-family:courier new,courier,monospace;"> 'host='0.0.0.0</span> الأمر سيقوم بإرجاع المحتوى لأي حاسوب، وليس فقط الحاسوب المحليّ. هذا مهم بما أن تطبيقنا مستضاف عن بعد. معامل port يقوم بتحديد المنفذ الذي سنستخدمه.</p><p dir="rtl">يُمكننا تشغيل التطبيق بتنفيذ الأمر:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">python hello.py</pre><p dir="rtl">يمكنك زيارة التطبيق بمتصفح الويب عن طريق الذهاب إلى عنوان IP الخاصّ بك (إن كنت تعمل على خادوم) أو localhost إن كنت تعمل محليا، متبوعاً برقم المنفذ الذي قمنا باختياره (8080)، متبوعا بالتوجيه الذي أنشأناه (<span style="font-family:courier new,courier,monospace;">hello/</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">http://localhost:8080/hello</pre><p dir="rtl">سيظهر لك التالي:</p><p dir="rtl" style="margin-bottom: 0in; line-height: 100%; text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/1.png.c2e28a930284ffcb024e4854ce8d132d.png"><img data-fileid="2355" class="ipsImage ipsImage_thumbnailed" alt="1.thumb.png.967ea5f4cad65496cfe66060e388" src="https://academy.hsoub.com/uploads/monthly_2015_06/1.thumb.png.967ea5f4cad65496cfe66060e388b609.png"></a></p><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right">يُمكن إيقاف الخادوم في أي وقت بالضغط على <span style="font-family:courier new,courier,monospace;">CTRL-C</span> في نافذة الطرفيّة أو سطر الأوامر.</p><h2 dir="rtl">تطبيق مبدأ MVC</h2><p dir="rtl">لقد نفّذنا الآن تطبيقنا الأول. لقد كان بسيطاً بالتأكيد، ولكنّه لا ينفّذ مبادئ MVC، أو لا يقوم بشيء مثير للاهتمام. لنحاول جعله تطبيقاً أكثر تعقيداً هذه المرّة.</p><h3 dir="rtl">إنشاء النموذج</h3><p dir="rtl">لنبدأ بنموذجنا، هذا هو الجزء الخاص بالتّعامل مع تخزين البيانات في برنامجنا. يمكن لـ Bottle بسهولة استخدام مجموعة من الواجهات الخلفية backends للبيانات باستعمال الإضافات.</p><p dir="rtl">سنستخدم ملف SQLite لقاعدة بيانات التطبيق. هذه قاعدة بيانات بسيطة للغاية مُصمّمة للعمليّات الخفيفة التي يُمكن أن يقوم بها برنامجنا.</p><p dir="rtl">ثبّت أولا SQLite، على Ubuntu يمكن ذلك عبر الأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install sqlite</pre><p dir="rtl">بالنسبة لـ Windows و OS X يمكن <a rel="external nofollow" href="https://www.sqlite.org/download.html">تثبيتها من على موقعها الرسمي</a>.</p><p dir="rtl">نحتاج كذلك إلى تحميل وتثبيت إضافة Bottle التي تُخوّلنا لاستعمال قواعد البيانات هذه:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">pip install bottle-sqlite</pre><p dir="rtl">الآن نحن نمتلك المكوّنات الأساسية، نستطيع أن ننشئ قاعدة بيانات بسيطة لتخزين بياناتنا فيها. سنقوم بإنشاء ملفّ بايثون لتوليد قاعدة بيانات SQLite مع بعض البيانات بداخلها عندما ننفّذ الملفّ. يُمكننا فعل الأمر على مترجم بايثون، لكنّ هذه الطريقة تجعل الأمر أسهل للتكرار. سننشئ ملفا باسم <span style="font-family:courier new,courier,monospace;">picnic_data.py</span>.</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">nano picnic_data.py</pre><p dir="rtl">هنا نقوم باستيراد حزمة SQLite. بعد ذلك، يمكننا تنفيذ أمر يُنشئ جدولا ويدخل بيانات فيه. وفي الأخير، ننّفذ التغييرات:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('خبز' , 4')")
db.execute("INSERT INTO picnic (item,quant) VALUES ('جبن', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('عنب', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('كعك', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('مشروبات', 4)")
db.commit()</pre><p style="margin-bottom: 0in; line-height: 100%">احفظ الملفّ وأغلقه</p><p dir="rtl">يُمكننا تنفيذ الملفّ، الشيء الذي سينشئ ملفّ قاعدة بيانات باسم نزهة.db داخل المُجلّد:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">python picnic_data.py
</pre><p dir="rtl">نموذج تطبيقنا الآن مكتمل. يمكننا الآن استنتاج أن النموذج يملي على التطبيق كيفية تعامل جزء التحكم مع البيانات.</p><h3 dir="rtl">إنشاء هيكل التّطبيق</h3><p dir="rtl">بعد أن أنشأنا قاعدة بيانات التّطبيق، يمكننا البدء في تطوير تطبيقنا الرئيسي. هذه العمليّة ستكون وظيفة الهيكل بشكل أساسي. وسيكون الملفّ الأكثر شبها بتطبيقنا الأول.</p><p dir="rtl">أنشئ ملفّا باسم picnic.py لحفظ تطبيقنا الرئيسي:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">nano picnic.py</pre><p dir="rtl">داخل هذا الملفّ، نحتاج إلى استيراد بعض الأشياء من حزمة Bottle، تماما كما سبق. نحتاج إلى بعض النّماذج الإضافية التي لم يسبق لنا أن استخدمناها. إضافة إلى ذلك، نحتاج إلى استيراد وظيفة SQLite:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
import sqlite3
from bottle import route, run, template</pre><p dir="rtl">تالياً، سنقوم بتعريف توجيه يوافق مسار URL على الشكل التالي <span style="font-family:courier new,courier,monospace;">picnic/</span>:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
import sqlite3
from bottle import route, run, template

@route('/picnic')</pre><p dir="rtl">سنضيف دالّة للاتصال بقاعدة البيانات، لتحضر البيانات من الجدول، والاتصال مع العرض View لتقديم الصفحة. وفي الأخير، ستُرجع المخرج إلى المُستخدم.</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
    db = sqlite3.connect('picnic.db')
    c = db.cursor()
    c.execute("SELECT item,quant FROM picnic")
    data = c.fetchall()
    c.close()
    output = template('bring_to_picnic', rows=data)
    return output</pre><p dir="rtl">بعد ذلك سنضيف أمر run لكي نقوم بتشغيل التطبيق:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint"># -*- coding: utf-8 -*-
import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
    db = sqlite3.connect('picnic.db')
    c = db.cursor()
    c.execute("SELECT item,quant FROM picnic")
    data = c.fetchall()
    c.close()
    output = template('bring_to_picnic', rows=data)
    return output

run(host='0.0.0.0', port=8080)</pre><p dir="rtl">احفظ وأغلق الملفّ.</p><p dir="rtl">نقوم بالاتصال مع قاعدة البيانات باستعمال:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">db = sqlite3.connect('picnic.db')</pre><p dir="rtl">نقوم باستعلام قاعدة البيانات وجلب جميع القيم بالأسطر الأربعة الموالية.</p><p dir="rtl">السطر الذي نقوم فيه بالإتصال إلى "العرض" لتشكيل البيانات هو:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">output = template('bring_to_picnic', rows=data)</pre><p dir="rtl">السطر يقوم بالاتصال بقالب (عرض) باسم <span style="font-family:courier new,courier,monospace;">bringtopicnic.tpl</span> لتشكيل البيانات وتقديمها. حيث يقوم بتمرير المتغير data لمتغير القالب rows.</p><p dir="rtl">سنقوم بإنشاء ملفّ القالب هذا في المرحلة التالية.</p><h3 dir="rtl">إنشاء العرض</h3><p dir="rtl">الآن نحن نمتلك كلّا من النموذج والهيكل، الشيء الوحيد المتبقّي هو إنشاء العرض. يُمكن القيام بهذا بسهولة بالاستعانة بمحرك القوالب المُدمج مع Bottle.</p><p dir="rtl">سيبحث التطبيق عن قالب موافق للاسم الذي عرّفناه في الدّالة السابقة، الملفّ يجب أن ينتهي ب .tpl</p><p dir="rtl">يُمكن للملفّ أن يكون إمّا في مجلّد المشروع، أو داخل مجلّد باسم "view”.</p><p dir="rtl">أنشئ ملفّا باسم يوافق الاسم الذي عرّفناه في دالّة القالب:</p><pre data-pbcklang="javascript" data-pbcktabsize="4" class="javascript ipsCode prettyprint">nano bring_to_picnic.tpl</pre><p dir="rtl">في هذا الملفّ، يُمكننا دمج HTML والبرمجة معاً. سيكون ملفّنا بسيطا جدّاً. سنقوم باستعمال حلقة تكرار لإنشاء جدول يقوم بعرض بيانات النّموذج:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;html dir="rtl" style="font:droid arabic naskh"&gt;
&lt;body&gt;
  &lt;h1&gt;أشياء لإحضارها إلى النّزهة&lt;/h1&gt;
  &lt;table&gt;
    &lt;tr&gt;&lt;th&gt;المكوّن&lt;/th&gt;&lt;th&gt;الكميّة&lt;/th&gt;&lt;/tr&gt;
    %for row in rows:
      &lt;tr&gt;
      %for col in row:
        &lt;td&gt;{{col}}&lt;/td&gt;
      %end
      &lt;/tr&gt;
    %end
  &lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><p dir="rtl">هذه الأسطر ستقوم بتقديم صفحتنا بصيغة HTML. لغة القالب التي رأينها هي ببساطة لغة بايثون. متغيّر row الذي قمنا بتمريره إلى القالب مُتاح للاستخدام عند تصميم المُخرجات.</p><p dir="rtl">يُمكننا كتابة أسطر بايثون بتقديم علامة "<span style="font-family:courier new,courier,monospace;">%</span>". يُمكننا الوصول إلى المُتغيّرات بداخل HTML باستخدام "<span style="font-family:courier new,courier,monospace;">{{var}}</span>".</p><p dir="rtl">احفظ الملفّ وأغلقه.</p><h2 dir="rtl">مشاهدة النتائج</h2><p dir="rtl">تطبيقنا مكتملٌ الآن ويمكننا تشغيل الملفّ الرئيسي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">python picnic.py</pre><p dir="rtl">يمكننا رؤية النتائج بزيارة عنوان IP متبوعا برقم المنفذ، متبوعاً بالتوجيه <span style="font-family:courier new,courier,monospace;">picnic/</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">http://localhost:8080/picnic</pre><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right"> </p><p dir="rtl" style="margin-bottom: 0in; line-height: 100%; text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/2.png.5771b46350309889c38e476af4cce963.png"><img data-fileid="2356" class="ipsImage ipsImage_thumbnailed" alt="2.thumb.png.6dc7eda74202a3782a9a60b3395b" src="https://academy.hsoub.com/uploads/monthly_2015_06/2.thumb.png.6dc7eda74202a3782a9a60b3395bca91.png"></a></p><h2 dir="rtl">ختاماً</h2><p dir="rtl">إلى هذه النقطة، يجب أن تكون قادراً على رؤية كيف يُمكنك بناء تطبيقات معقّدة باستخدام الإطار المُصغر والبسيط Bottle. رغم أنّ أمثلتنا بسيطة، إلا أنّك الآن تستطيع بسهولة أن تطوّر تطبيقات إلى القيام بوظائف متقدّمة.</p><p dir="rtl">نظام إضافات Bottle يعدّ أيضاً أصلاً مهمّاً. الإضافات مُشارَكةُ بنشاط في المجتمع وإضافة وظائف أكثر تعقيداً لتطبيقك يُمكن أن يُنفّذ بسهولة باستخدام الإضافات. هناك طريقة سهلة للبحث عن الإضافات وهي عن طريق استعمال الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">pip search bottle</pre><p dir="rtl">هذا سيُعطيك فكرة عن بعض الإضافات الأكثر شعبية.</p><p dir="rtl">ترجمة -وبتصرّف- للمقال: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-use-the-bottle-micro-framework-to-develop-python-web-apps">How To Use the Bottle Micro Framework to Develop Python Web Apps</a>.</p><p dir="rtl" style="margin-bottom: 0in; line-height: 100%" align="right"> </p>
]]></description><guid isPermaLink="false">93</guid><pubDate>Sat, 06 Jun 2015 08:22:00 +0000</pubDate></item></channel></rss>
