{ "cells": [ { "cell_type": "raw", "metadata": { "vscode": { "languageId": "raw" } }, "source": [ "---\n", "title: \"أمثلة توالي الأوامر\"\n", "og:title: control_flow_apps\n", "toc: true\n", "format:\n", " html: default\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[تحميل الدفتر](https://raw.githubusercontent.com/HassanAlgoz/python/main/book/chapters/ch2-control-flow/applications_2.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## تسجيل الدخول\n", "\n", "- استخدم الإجراء `input()` لطلب `اسم المستخدم (username)` و `كلمة المرور (password)` من المستخدم وخزن كل منهما في متغير مناسب\n", "- إذا كان اسم المستخدم هو `\"admin\"` وكلمة المرور هي `\"abc123\"`، اطبع: `\"Welcome admin\"`\n", "- أو إذا كان اسم المستخدم هو `\"backdoor\"` وكلمة المرور هي `\"let me in\"`، اطبع: `\"Nobody knows!\"`\n", "- خلاف ذلك، اطبع: `\"Access denied!\"`\n", "\n", "```python\n", "import getpass\n", "\n", "username = input(\"Enter your username: \")\n", "password = getpass.getpass(\"Enter your password: \")\n", "\n", "max_tries = 3\n", "tries = 0\n", "\n", "while tries < max_tries:\n", " if username == \"admin\" and password == \"abc123\":\n", " print(\"Welcome admin\")\n", " break\n", " elif username == \"backdoor\" and password == \"let me in\":\n", " print(\"Nobody knows!\")\n", " break\n", " else:\n", " print(\"Access denied!\")\n", " tries += 1\n", "```\n", "\n", "لاحظ:\n", "\n", "- وجود حلقة `while` لإعادة المحاولة ثلاث مرات فقط\n", "- وجود جملة `break` لإنهاء الحلقة إذا تم التسجيل بنجاح\n", " - لا توجد `break` في جزئية `else` الأخيرة وذلك لأن عدد المحاولات يزيد في كل مرة ليؤول الإجراء إلى انتفاء شرط الدوران\n", "\n", "\n", "## حساب مجموع الأعداد المدخلة\n", "\n", "هذا البرنامج الصغير يأخذ مجموعة أعداد، واحدًا تلوَ الآخر، ويجمعها جميعًا.\n", "\n", "```python\n", "total = 0\n", "\n", "while True:\n", " user_input = input(\"Enter a number: \")\n", " if user_input == \"quit\":\n", " break\n", " x = int(user_input)\n", " total += x\n", "print(total)\n", "```\n", "\n", "إليك شرحه بالتفصيل:\n", "\n", "**تذكر**: أن لكل متغير قيمة. وأن لكل قيمة نوعًا. وأن النوع يحدد ما يقبله المتغير من عمليات.\n", "\n", "- نعين المتغير `total = 0` لتجميع النتائج\n", "- نستعمل حلقة لا نهائية: `while True` لأننا نريد أن يستمر البرنامج إلى أن يكتب المستخدم `quit`\n", "- نطلب من المستخدم أن يدخل عددًا، ونضع ما أدخَل في متغير: `user_input`\n", "- هذا المتغير نوعه: `str` (نصي) لأن الإجراء `input()` يعطينا قيمة نصية\n", "- إن كان المدخل كلمة `quit`، نكسر الحلقة بـ: `break`\n", "- وإلا: \n", " - ننشئ قيمة عددية من المتغير `user_input` باستخدام `int(user_input)` أو `float(user_input)` ونعيِّنُ النتيجة في متغير جديد: `x`\n", " - نجمع العدد إلى الحاصل: `total`\n", " - عندها نكسر الحلقة بكلمة: `break`\n", "\n", "\n", "## المكيف\n", "\n", "تشغييل المكيف إن كانت درجة الحرارة أعلى من المرغوب، بشرط أن يكون المكيف يعمل:" ] }, { "cell_type": "code", "metadata": {}, "source": [ "room_temp = 30\n", "desired_temp = 24\n", "ac_functional = False\n", "\n", "if room_temp > desired_temp:\n", " if ac_functional:\n", " print(\"Turning on AC.\")\n", " else:\n", " print(\"AC malfunction! Please repair.\")" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## برنامج تفاعلي\n", "\n", "جرب انسخ هذا البرنامج واختبره بنفسك حتى تفهمه.\n", "\n", "```python\n", "inventory = 100\n", "\n", "while True:\n", " print(\"Store Menu:\")\n", " print(\"1. Buy Apples\")\n", " print(\"2. Restock Apples\")\n", " print(\"3. Exit\")\n", "\n", " choice = input(\"Enter your choice: \")\n", "\n", " if choice == \"1\":\n", " quantity = int(input(\"Enter the quantity of fish to buy: \"))\n", "\n", " if quantity <= inventory:\n", " inventory -= quantity\n", " print(\"You bought\", quantity, \"fish. Remaining inventory:\", inventory)\n", " else:\n", " print(\"Insufficient stock. Please try again later.\")\n", "\n", " elif choice == \"2\":\n", " quantity = int(input(\"Enter the quantity of fish to restock: \"))\n", " inventory += quantity\n", " print(\"Restocked\", quantity, \"fish. New inventory:\", inventory)\n", "\n", " elif choice == \"3\":\n", " print(\"Exiting the store...\")\n", " break\n", "\n", " else:\n", " print(\"Invalid choice. Please try again.\")\n", "```\n", "\n", "## حساب مضروب العدد\n", "\n", "$$\n", "!n = n(n-1)(n-2)\\cdots 1\n", "$$" ] }, { "cell_type": "code", "metadata": {}, "source": [ "i = 5\n", "j = i\n", "while j > 1:\n", " j -= 1\n", " i *= j\n", "print(i)" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "شرح للخطوات التنفيذية التفصيلية:\n", "\n", "- أولاً، قم بتعيين المتغير `i` إلى العدد `5`\n", "- ثانياً، قم بتعيين المتغير `j` إلى العدد `5`\n", "- ثالثاً، استمر في الدوران إلى أن يصل `j` إلى القيمة `1`\n", " - في كل دوران، قم بطرح `1` من `j`\n", " - ثم قم بضرب `i` بالقيمة الجديدة لـ `j`: المتحصل هو أن `i = i * (i - 1)\n", "- أخيراً، قم بطباعة القيمة النهائية لـ `i`" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 4 }