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

مشاريع بايثون عملية تناسب المبتدئين


Ola Saleh

إذا كنت من محبي لغة البرمجة بايثون وترغب في تعلمها واحترافها وتبحث عن اكواد مشاريع بايثون فهذا المقال سيوفر لك مجموعة متنوعة من مشاريع بايثون للمبتدئين الذين أنهوا تعلم أساسيات لغة بايثون ويرغبون في تعزيز معرفتهم بالتطبيق العملي والتدرب على طريقة التفكير في حل مشكلات برمجية مختلفة والاستفادة من الوحدات والمكتبات العديدة التي توفرها لغة بايثون المناسبة التي تساعد على حلها بسلاسة وسرعة.

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

أهمية تنفيذ مشاريع بايثون للمبتدئين

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

ستجد في الفقرات التالية عدة أفكار لمشاريع بايثون مختلفة بعضها غاية في البساطة وبعدها أصعب قليلًا كي تتعلم من خلالها تنفيذ بعض العمليات الرياضية ومعالجة النصوص والتعامل مع عناصر الواجهة الرسومية واستخراج بيانات الويب، وهذه المشاريع هي:

  1. مشروع آلة حاسبة بلغة بايثون.
  2. مشروع بايثون لطباعة سلسلة أعداد فيبوناتشي.
  3. مشروع التحقق من قوة كلمة المرور.
  4. مشروع حساب عدد الأحرف الصوتية والفراغات والكلمات في نص.
  5. مشروع حاسبة الزكاة.
  6. مشروع حل معادلة درجة ثانية ورسم خطها البياني.
  7. مشروع ساعة رقمية.
  8. مشروع استخراج بيانات من موقع ويب.

سنتناول في فقراتنا التالية كل مشروع من مشاريع بايثون المذكورة في هذه القائمة ونشرح الهدف منه ونوضح ما هي مدخلاته ومخرجاته وأهم خطوات تنفيذه برمجيًا.

مشروع آلة حاسبة بلغة بايثون

يعد مشروع تنفيذ الآلة الحاسبة من خلال واجهة سطر الأوامر أحد مشاريع بايثون البسيطة التي يمكنك من خلالها تطبيق العديد من المفاهيم مثل تعريف المتغيرات وتخزين القيم فيها، والتعامل مع أنواع البيانات المختلفة في بايثون مثل الأرقام الصحيحة والأرقام العشرية، وكيفية طلب البيانات من المستخدم وقراءتها وتحويلها لقيم عددية، وتعريف دوال لتنفيذ العمليات الحسابية واستخدام العبارات الشرطية لاستدعاء وتنفيذ الدالة الحسابية الصحيحة بناءً على شروط معينة وهذه المفاهيم على بساطتها تمكنك من كتابة مشاريع بايثون أكثر تعقيدًا فيما بعد.

الدخل: رمز العملية الحسابية المطلوب إجراؤها والعددان المطلوب تنفيذ العملية عليهما (يجب أن يدخل المستخدم رمز صحيح وإلا يمكن أن تعرض له رسالة تطلب منه إدخال رمز صحيح أو تنهي البرنامج)

الخرج: هو طباعة نتيجة العملية الحسابية.

كود مشروع آلة حاسبة باستخدام بايثون:

# calculator1.py


# دالة جمع عددين
def add(num1, num2):
    return num1 + num2


# دالة طرح عددين
def subtract(num1, num2):
    return num1 - num2


# دالة جداء عددين
def multiplnum2(num1, num2):
    return num1 * num2


# دالة قسمة عددين
def divide(num1, num2):
    if num2 == 0:
        return "لا يمكنك القسمة على صفر"
    return num1 / num2


# استدعاء الدالة المناسبة
print("اختر العملية الحسابيةالمطلوبة ")
print("للجمع اختر 1 ")
print("للطرح اختر 2 ")
print("للجداء اختر 3 ")
print("للقسمة اختر 4 ")
print("اختر أي مفتاح آخر لأنهاء التنفيذ")

while True:
    # إدخال قيمة العددين
    choice = input("حدد العملية المطلوبة (1/2/3/4): ")
    if choice in ("1", "2", "3", "4"):
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))

        if choice == "1":
            print(num1, "+", num2, "=", add(num1, num2))

        elif choice == "2":
            print(num1, "-", num2, "=", subtract(num1, num2))

        elif choice == "3":
            print(num1, "*", num2, "=", multiplnum2(num1, num2))

        elif choice == "4":
            print(num1, "/", num2, "=", divide(num1, num2))

    else:
        print("إنهاء التنفيذ ")
        break

عند تنفيذ المشروع سنحصل على خرج مشابه لما هو مبين في الصورة التالية:

مشروع بايثون الآلة الحاسبة

يمكنك إجراء بعض التحسينات على الكود السابق كأن تنشئ مكتبة أو وحدة خاصة بك لتعريف الدوال الحسابية وليكن اسمها math_operations.py ثم تستوردها في ملف البرنامج الرئيسي لتفهم الغرض من مكتبات باثيون فعندما تستورد مكتبة بايثون ستتمكن من الوصول لكافة وظائفها العامة وهذا ينظم كود مشروعك ويسهل فهمه وصيانته.

لاحظ الكود التالي عرفنا في البداية ملف باسم math_operations.py يمثل المكتبة ويتضمن تعريف كافة العمليات الحسابية.

# math_operations.py
# استيراد المكتبة
import math_op
# استدعاء الدالة المناسبة
print("اختر العملية الحسابيةالمطلوبة ")
print("للجمع اختر 1 ")
print("للطرح اختر 2 ")
print("للجداء اختر 3 ")
print("للقسمة اختر 4 ")
print("اختر أي مفتاح آخر لأنهاء التنفيذ")

while True:
    # إدخال قيمة العددين
    choice = input("حدد العملية المطلوبة (1/2/3/4): ")
    if choice in ("1", "2", "3", "4"):
        num1 = float(input("أدخل العدد الأول "))
        num2 = float(input("أدخل العدد الثاني  "))

        if choice == "1":
            print(num1, "+", num2, "=", math_op.add(num1, num2))

        elif choice == "2":
            print(num1, "-", num2, "=", math_op.subtract(num1, num2))

        elif choice == "3":
            print(num1, "*", num2, "=", math_op.multiplnum2(num1, num2))

        elif choice == "4":
            print(num1, "/", num2, "=", math_op.divide(num1, num2))

    else:
        print("إنهاء التنفيذ ")
        break

ثم عرفنا ملف المشروع الأساسي calculator2.py الذي يستورد المكتبة ويستخدم وظائفها كما يلي:

# calculator2.py
# استيراد المكتبة
import math_op
# استدعاء الدالة المناسبة
print("اختر العملية الحسابيةالمطلوبة ")
print("للجمع اختر 1 ")
print("للطرح اختر 2 ")
print("للجداء اختر 3 ")
print("للقسمة اختر 4 ")
print("اختر أي مفتاح آخر لأنهاء التنفيذ")

while True:
    # إدخال قيمة العددين
    choice = input("حدد العملية المطلوبة (1/2/3/4): ")
    if choice in ("1", "2", "3", "4"):
        num1 = float(input("أدخل العدد الأول "))
        num2 = float(input("أدخل العدد الثاني  "))

        if choice == "1":
            print(num1, "+", num2, "=", math_op.add(num1, num2))

        elif choice == "2":
            print(num1, "-", num2, "=", math_op.subtract(num1, num2))

        elif choice == "3":
            print(num1, "*", num2, "=", math_op.multiplnum2(num1, num2))

        elif choice == "4":
            print(num1, "/", num2, "=", math_op.divide(num1, num2))

    else:
        print("إنهاء التنفيذ ")
        break

لتنفيذ هذا المشروع بشكل صحيح يجب أن تحفظ كل من ملف المشروع الرئيسي calculator2.py وملف المكتبة التي عرفتها math_op.py في نفس المجلد.

توصيات حول المشروع:

جرب أن تضيف المزيد من التحسينات على هذا المشروع بأن تعرف دوال رياضية مثل دالة حساب رفع عدد لأس، أو حساب الجذر التربيعي لعدد ما، وجرب كذلك أن تحوله إلى مشروع واجهة رسومية بالاعتماد على مكتبات بايثون المناسبة.

مشروع بايثون لطباعة سلسلة أعداد فيبوناتشي

يعد مشروع طباعة سلسلة أعداد فيبوناتشي Fibonacci series على بساطته من مشاريع بايثون الكلاسيكية للمبتدئين فهي تعلمه كيف يفكر منطقيًا في الخطوات اللازمة لحساب وطباعة سلسلة أعداد فيبوناتشي وكتابة دالة برمجية مناسبة تحقق له المطلوب.

سلسلة فيبوناتشي هي عبارة عن سلسلة من الأعداد تبدأ بالعددين 0 و 1 والأعداد التالية ناتجة عن مجموع العددين السابقين، أي تكون أرقام السلسلة على النحو التالي:

F(0) = 0

F(1) = 1

F(2) = 0+1=1

F(3) = 1+1=2

F(3) = 2+1=3

F(n) = F(n-1) + F(n-2) (n > 1)

وهذه السلسلة لها تطبيقات واسعة في الرياضيات وعلوم الحاسوب والهندسة وغيرها من المجالات.

الدخل: عدد عناصر السلسلة المطلوب حسابها وليكن num.

الخرج: طباعة عناصر السلسلة.

هناك طريقتان يمكنك من خلالهما تنفيذ هذا البرنامج، الأولى باستخدام حلقات التكرار (Loops) في بايثون والثانية باستخدام مفهوم التعاود (Recursion)،

سنكتب الكود البرمجي لمشروع بايثون يعرض سلسلة أعداد فيبوناتشي بطريقة التعاود كما يلي:

#fibonacci-series.py

# سلسلة أعداد فيبوناتشي

def  fibonacci(n):

    if n == 1  or n == 0:

        return n;

    else:

        return fibonacci(n-2) + fibonacci(n - 1)


num = int(input("أدخل عددًا صحيحًا موجبًا "))

if num < 0:
    print("العدد الذي أدخلته سالب")

i = 0

print("سلسلة أعداد فيبوناتشي \n: ")

for i in range(0, num+1):
    print("F(", i, "):", fibonacci(i))

عند تنفيذ المشروع نحصل على الخرج التالي:

مشروع سلسلة أعداد فيبوناتشي

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

مشروع التحقق من قوة كلمة المرور

ستحتاج في الكثير من مشاريع بايثون لا سيما في مواقع وتطبيقات الويب التي تحتاج لتسجيل دخول المستخدمين إلى التحقق من قوة كلمة المرور التي يدخلها المستخدم لضمان أمانه وحماية حسابه من الاختراق، وفي هذا المشروع سنكتب الكود البرمجي اللازم لفحص كلمة مرور المستخدم وتحديد فيما إذا كانت كلمة المرور قوية أم ضعيفة بناءً على مجموعة من الشروط وهي كالتالي:

  1. يجب أن تحتوي كلمة المرور على حروف صغيرة (a-z).
  2. يجب أن تحتوي كلمة المرور على حروف كبيرة (A-Z).
  3. يجب أن تحتوي كلمة المرور على محارف خاصة (!@#$^%).
  4. يجب أن تحتوي كلمة المرور على أرقام (0-9).
  5. يجب أن لا يقل طول الكلمة عن 8 محارف ولا يزيد على 20 محرف

إذا توفرت جميع هذه الشروط في كلمة المرور التي أدخلها المستخدم سنعتبرها كلمة مرور قوية وإذا لم تتوفر جميع الشروط سنعتبرها كلمة ضعيفة ونطلب منه إدخال كلمة أخرى.

أسهل طريقة لتحقيق هذا المشروع هي باستخدام مفهوم التعابير النمطية في البرمجة regular expression والمعروفة اختصارًا باسم Regex، فمن خلالها يمكن تعريف نمط بحث للتحقق من قوة كلمة المرور بالشكل التالي:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*``#?&])[A-Za-z\d@$!#%*?&]{6,20}$

يفحص هذا التعبير النمطي قوة كلمة المرور حيث يبدأ بالرمز ^ الذي يعني أن الاختبار يجب أن يبدأ من بداية كلمة المرور وبعدها يليه (?=.*[a-z]) الذي يتحقق من وجود حرف صغير على الأقل في كلمة المرور ثم القسم (?=.*[A-Z]) الذي يتحقق من وجود حرف كبير على الأقل في كلمة المرور ثم (?=.*\d) الذي يتأكد من وجود رقم واحد على الأقل فيها والقسم (?=.*[@$!%*#?&]) للتأكد من وجود محرف خاص على الأقل في كلمة المرور والقسم [A-Za-z\d@$!#%*?&]{6,20} للتحقق من أن طول كلمة المرور بين 8 إلى 20 محرف وأنهينا التعبير النمطي بكتابة الرمز $ الذي يعني أن الاختبار يستمر حتى نهاية كلمة المرور.

وللتحقق من مطابقة كلمة المرور لهذا النمط في مشروعنا سنعتمد على مكتبة بايثون المسماة re وهي مكتبة قياسية في بايثون تساعدك على تعريف التعابير النمطية والتحقق من مطابقة سلسلة ما لنمط معين.

الدخل: كلمة المرور المطلوب فحصها.

الخرج: طباعة رسالة تظهر فيما إذا كانت كلمة المرور قوية أم ضعيفة.

مشروع بايثون للتحقق من قوة كلمة المرور:

import re

def is_strong_password(pwd):
    pattern = '^[a-z]+[A-Z]+[!@#$^%]+[0-9]+$'
    return bool(re.search(pattern, pwd))

while True:
    password = input("أدخل كلمة المرور: ")

    if is_strong_password(password):
        print("كلمة المرور قوية")
        break
    else:
        print("\nكلمة المرور ضعيفة، أدخل واحدة أخرى")

عند تنفيذ الكود أعلاه سنحصل على خرج مشابه للصورة التالية:

مشروع التحقق من قوة كلمة المرور

توصيات حول المشروع:

قد تبدو كتابة التعابير النمطية صعبة قليلًا لكنها الطريقة المثلى لتنفيذ التحقق، فهي تختصر عليك الكثير من الوقت، جرب على سبيل المثال التحقق من قوة كلمة المرور وفق الشروط التي ذكرناها دون الاعتماد على التعابير النمطية ولاحظ كمية التعليمات الشرطية التي ستحتاجها لتنفيذ المشروع. وحاول فكرة تعديل المشروع لجعله يولد لك كلمة مرور قوية بشكل تلقائي بدل إنشائها يدويًا.

مشروع حساب عدد الأحرف الصوتية والفراغات والكلمات في نص

يحتاج أي مبتدئ إلى تنفيذ عدة مشاريع بايثون تعالج السلاسل النصية وتستخدم دوال النصوص المناسبة للحصول على النتائج المطلوبة، في هذا المشروع سنكتب كود بايثون يطلب من المستخدم إدخال نص معين باللغة الإنجليزية ونحسب عدد الأحرف الصوتية الواردة فيه وعدد فراغاته وعدد كلماته.

بالنسبة للأحرف الصوتية فهي كما خمسة حروف a وe i و o و u ويجب أن تراعي وجود الأحرف الصغيرة والكبيرة أو يمكنك بشكل بديل تحويل النص المدخل من قبل المستخدم بالكامل إلى حروف صغيرة أو كبيرة لتسهيل عملية البحث.

أما بالنسبة للفراغات فيمكن أن تتحقق من وجود فراغ في نص ما بسهولة باستخدام الدالة الجاهزة isspaceو ويمكن كذلك حساب عدد الكلمات بعدة طرق ومن أسهل هذه الطرق الاستعانة بالدالة split التي تقسم الجملة إلى كلمات باستخدام الفراغ كفاصل وتعيد قائمة List بكافة هذه الكلمات وبعدها نستخدم الدالة len التي تعيد لنا عدد عناصر هذه القائمة.

الدخل: هو النص المطلوب البحث فيه

الخرج: عدد الأحرف الصوتية والفراغات والكلمات في هذا النص.

إليك كود بايثون لحساب الأحرف الصوتية والفراغات وعدد الكلمات في سلسلة نصية ويمكنك بالطبع تجربة طرق أخرى للحصول على النتائج المطلوبة.

# حساب عدد الفراغات والكلمات والأحرف الصوتية في سلسلة نصية

countv=0
countw=0
counts=0

input_sentence=input("أدخل النص هنا: ")

# عدد الأحرف الصوتية والفراغات
sentence=input_sentence.lower()
vowles=["a","e","i","o","u"]
for char in sentence:
    if char in vowles:
        countv=countv+1
    if(char.isspace()):
        counts=counts+1

# عدد الكلمات
countw = len(input_sentence.split())

# طباعة النتائج

print(" عدد الأحرف الصوتية :", countv)
print(" عدد الكلمات :", countw)
print(" عدد الفراغات :", counts)

عند تنفيذ البرنامج على السلسلة النصية "Learn PYTHON with Welcome to Hsoub Academy" نحصل على الخرج التالي:

مشروع البحث في سلسلة نصية

توصيات حول المشروع:

فكر في طرق أخرى لاستخراج النتائج المطلوبة من سلسلة نصية، وحاول تحويل المشروع من مشروع سطر الأوامر إلى مشروع واجهة رسومية لسهولة الاستخدام.

مشروع حاسبة الزكاة

يعرض هذا المشروع واجهة رسومية لحساب زكاة المال حيث يطلب من المستخدم إدخال قيمة أمواله كي يحسب الزكاة المستحقة بناءً على القيمة المدخلة فإذا كانت قيمة المال الذي حال عليه الحول تفوق النصاب أي الحد الأدنى للثروة التي يجب عليها الزكاة وجل دفع زكاة مال تبلغ 2.5% من قيمة المال وإلا فلا يتوجب دفع الزكاة أي أن قيمة الزكاة تكون صفر، وقد افترضنا هنا أن قيمة النصاب هي 442 دولار بحسب هيئة الإغاثة الإسلامية العالمية.

بالطبع قيمة النصاب المستخدمة هنا ليست ثابتة وهي تتغير بحسب سعر الذهب أو الفضة وحساب المبلغ الدقيق للزكاة يعتمد على العديد من العوامل التي يجب أخذها بالحسبان، لكن الهدف من مشروعنا البسيط هذا هي تعلم إنشاء مشاريع بايثون من خلال واجهة رسومية، وأسهل طريقة لبناء واجهة المستخدم الرسومية هو تعلم طريقة بناء واجهات مستخدم رسومية في بايثون باستخدام المكتبة Tkinter فهي مكتبة قياسية وسهلة الاستخدام وتتيح لك إنشاء نوافذ وأزرار وحقول إدخال وغيرها من عناصر واجهة المستخدم بسرعة ومرونة كبيرة.

الدخل: قيمة المال المطلوب حساب زكاته، وفي حال أدخل المستخدم قيمة أموال غير صحيحة كأن يدخل نصًا بدلاً من رقم يجب أن تظهر له رسالة خطأ تطالبه بإدخال قيمة صحيحة.

الخرج: عرض قيمة الزكاة المستحقة للمال إذا تجاوز النصاب.

إليك مشروع بايثون لحساب مقدار زكاة المال:

# مشروع بايثون لحساب زكاة المال
from tkinter import *
from tkinter import messagebox
# إنشاء واجهة المستخدم
window = Tk()
window.geometry("600x350")
window.resizable(0, 0)
window.config(bg="lightblue")
window.title("حاسبة زكاة المال")
# نصاب الزكاة بالدولار
nisab = 442
# إنشاء متغير لتخزين قيمة أموالك
money = DoubleVar()

# دالة حساب الزكاة
def calculate_zakat():
    try:
        money = float(money_entry.get())
        zakat_amount = money * 0.025 if money > nisab else 0
        result_label.config(
            text=f"قيمة الزكاة الواجبة عليك هي: {zakat_amount:.2f} دولار"
        )
    except ValueError:
        messagebox.showerror("خطأ", "الرجاء إدخال قيمة صالحة.")

Label(
    window,
    text="أدخل قيمة أموالك بالدولار",
    font="Tahoma 14",
    fg="gray",
    justify="right",
).place(x=200, y=20)
money_entry = Entry(window, textvariable=money, font="tahomab 12")
money_entry.place(x=200, y=70)

# إنشاء زر الحساب
calculate_button = Button(
    window,
    text="حساب الزكاة",
    font="tahoma 14 bold",
    bg="lightgreen",
    padx=2,
    command=calculate_zakat,
    justify="right",
)
calculate_button.place(x=220, y=120)

# إنشاء تسمية لعرض النتيجة
result_label = Label(
    window, text="", font="tahoma 14 bold", bg="lightblue", justify="right"
)
result_label.place(x=100, y=180)

window.mainloop()

عند تنفيذ الكود السابق سيظهر الخرج كما في الصورة التالية:

مشروع حاسبة زكاة المال

توصيات حول المشروع:

جرب أن تحسن مظهر الواجهة الرسومية للمشروع من خلال استخدام مكتبة أخرى غير tkinter لتصميم الواجهة الرسومية للمشروع فهناك مكتبات أكثر احترافية مثل مكتبة PyQt5 أو Kivy.

مشروع ساعة رقمية

يهدف هذا المشروع من مشاريع باثيون Python للمبتدئين إلى تعليم المبرمج المبتدئ لكيفية إنشاء تطبيق جهة رسومية يعرض لك التوقيت المحلي والتوقيت العالمي GMT بالاستفادة من مكتبات بايثون المساعدة كما وكيفية تحديث الواجهة الرسومية كل ثانية لتحديث الساعة وجعلها تظهر لنا الوقت الحالي بدقة.

يمكن تحقيق المشروع المطلوب من خلال إنشاء واجهة رسومية بسيطو باستخدام المكتبة القياسية tkinter والمكتبة القياسية time للوصول إلى معلومات الوقت وتنسيقه بالشكل المناسب.

الدخل: لا يحتاج المشروع للحصول على أي مدخلات من المستخدم

الخرج: عرض الساعة بالتوقيت المحلي والعالمي وتنسيقها بالشكل المطلوب

# مشروع بايثون لعرض التوقيت المحلي والعالمي
# digital-clock.py
# استيراد الوحدات المطلوبة
from tkinter import *
from time import strftime, gmtime,localtime

# إنشاء نافذة رئيسية
window = Tk()
window.title("مشروع بايثون لعرض التوقيت المحلي والعالمي")
window.configure(background="lavender")
#إنشاء نافذة بأبعاد ثابتة
window.geometry("510x250")
window.resizable(False, False)

# تعريف دالة تعيد لناالتوقيت المحلي والعالمي

def get_time():
    # توقيت GMT
    # %I نظام 12 ساعة
    # %M الدقائق
    # %S الثواني
    # %p تعرض AM / PM
    timeFormat1 = strftime("%I:%M:%S %p", gmtime())
    clock_g.config(text="GMT: " + timeFormat1)
    # توقيت محلي بتنسيق 12 ساعة
    timeFormat2 = strftime("%I:%M:%S %p",localtime())
    clock_l.config(text="LOC: " + timeFormat2)
    # جدولة تكرار استدعاء الدالة كل 1000 ميلي ثانية
    window.after(1000, get_time)


clock_l = Label(window, font="Verdana 37 bold", pady=30, bg="lavender")
clock_l.pack(side=TOP)

clock_g = Label(window, font="Verdana 37 bold", pady=30, bg="pink")
clock_g.pack(side=BOTTOM)

# استدعاء دالة عرض الوقت
get_time()

# تشغيل النافذة الرئيسية
mainloop()

عند تنفيذ المشروع ستظهر لك الواجهة التالية التي تعرض الساعة بالتوقيت المحلي وبتوقيت غرينتش

مشروع ساعة رقمية

توصيات حول المشروع:

جرب تطوير مشروع بايثون الحالي واعرض الوقت وكذلك التاريخ بتنسيقات مختلفة وجرب استخدام مكتبات بايثون أخرى للتعامل مع الوقت مثل الوحدة datetime وتعرف على الفرق بينها وبين الوحدة time.

مشروع حل معادلة درجة ثانية ورسم خطها البياني

في مشروع بايثون التالي سنقوم بإنشاء تطبيق واجهة مستخدم رسومية لحل معادلة رياضية من الدرجة الثانية أو ما يعرف بالمعادلة التربيعية بطريقة المميز delta ونرسم خطها البياني الذي يكون عادة على شكل قطع مكافئ، وسنستخدم كل من المكتبة Tkinter لبناء واجهة المستخدم الرسومية والمكتبة matplotlib لرسم الخط البياني.

الدخل: معاملات المعادلة a و b و c

الخرج: عرض حلول المعادلة x1 و x2 بحسب قيمة المميز ورسم خطها البياني.

# quadratic-equation.py

import tkinter as tk
from tkinter import messagebox
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# تعريف دالة لحساب جذور المعادلة

def solve_quadratic(a, b, c):
    try:
        a, b, c = float(a), float(b), float(c)
        delta = b**2 - 4 * a * c
        if delta > 0:
            x1 = (-b + delta**0.5) / (2 * a)
            x2 = (-b - delta**0.5) / (2 * a)
            x1_rounded = round(x1, 2)
            x2_rounded = round(x2, 2)
            return f"x1= {x1_rounded}, x2={x2_rounded}"
        elif delta == 0:
            x = -b / (2 * a)
            x_rounded = round(x, 2)
            return f"x= {x_rounded}"
        else:
            return "لا يوجد حلول حقيقة للمعادلة"
    except ValueError:
        return "أدخل قيم صحيحة للمعاملات"

# تعريف دالة لرسم المعادلة

def plot_quadratic(a, b, c):
    try:
        a, b, c = float(a), float(b), float(c)
        x = range(-10, 11)
        y = [a * x_val**2 + b * x_val + c for x_val in x]

        fig = Figure(figsize=(6, 4), dpi=100)
        ax = fig.add_subplot(111)
        ax.plot(x, y)

        canvas = FigureCanvasTkAgg(fig, master=window)
        canvas_widget = canvas.get_tk_widget()
        canvas_widget.grid(row=4, column=0, columnspan=3)

    except ValueError:
        messagebox.showerror("خطأ", "قيم خاطئة للمعاملات")


def calculate():
    a_val = a_entry.get()
    b_val = b_entry.get()
    c_val = c_entry.get()

    result = solve_quadratic(a_val, b_val, c_val)
    result_label.config(text=result)

    plot_quadratic(a_val, b_val, c_val)


# إنشاء الواجهة الرسومية

window = tk.Tk()
window.title("حل معادلة درجة ثانية")
window.geometry("800x600+100+50")


a_label = tk.Label(window, text="a:", font=("tahoma", 12))
a_label.grid(row=0, column=0, padx=10, pady=10)
a_entry = tk.Entry(window, font=("tahoma", 12))
a_entry.grid(row=0, column=1, padx=10, pady=10)

b_label = tk.Label(window, text="b:", font=("tahoma", 12))
b_label.grid(row=1, column=0, padx=10, pady=10)
b_entry = tk.Entry(window, font=("tahoma", 12))
b_entry.grid(row=1, column=1, padx=10, pady=10)

c_label = tk.Label(window, text="c:", font=("tahoma", 12))
c_label.grid(row=2, column=0, padx=10, pady=10)
c_entry = tk.Entry(window, font=("tahoma", 12))
c_entry.grid(row=2, column=1, padx=10, pady=10)

calculate_button = tk.Button(
    window, text="Calculate", command=calculate, font=("tahoma", 12)
)
calculate_button.grid(row=3, column=0, columnspan=2, padx=10, pady=10)

result_label = tk.Label(window, text="", font=("tahoma", 14))
result_label.grid(row=3, column=2, padx=10, pady=10)

plot_label = tk.Label(window, text="الرسم البياني", font=("tahoma", 14))
plot_label.grid(row=4, column=0, columnspan=3, padx=10, pady=10)

window.mainloop()

توضح الصورة التالية نتيجة تنفيذ المشروع لحل معادلة درجة ثانية ورسم خطها البياني

مشروع حل معادلة

توصيات حول المشروع:

تأكد من تثبيت المكتبة matplotlib على نظامك قبل تنفيذ المشروع باستخدام التعليمة pip install matplotlib وجرب تطوير واجهة المشروع وتخصيص شكل الرسم البياني ليظهر أكثر احترافية ويظهر حلول المعادلة بيانيًا.

مشروع استخراج بيانات من موقع ويب

تعد مشاريع بايثون التي تقوم باستخراج البيانات من الويب Web Scraping من تطبيقات بايثون المفيدة والمطلوبة في سوق العمل فمن خلالها يمكنك جمع المعلومات المختلفة مثل أحدث الأخبار والمقالات، أو عناوين الكتب، أو المنشورات والتعليقات من مواقع التواصل، أو أسعار المنتجات من مواقع ويب بشكل تلقائي لسهولة تصفحها أو تنظيمها وتخزينها في ملفات قواعد بيانات ثم تحليلها ومقارنتها بدلاً من جلب هذه البيانات يدويًا من عدة أماكن.

يمكنك بناء مشاريع بايثون Python لاستخراج بيانات الويب بسهولة بفضل ما توفره لغة بايثون من مكتبات مساعدة في هذا المجال مثل Beautiful Soup و Scrapy و Selenium لكن انتبه فبعض المواقع قد لا تسمح لك باستخراج البيانات منها وقد تحظر أي طلبات تقوم بها.

لاستخراج البيانات من موقع ما عليك بداية تحديد البيانات التي تريد استخراجها كالنصوص أو الصور أو الروابط وفحص بنية HTML الخاصة بالموقع باستخدام أدوات مطور المتصفح لتحديد العناصر التي تحتاج إلى استهدافها بدقة بعدها سيكون عليك كتابة التعليمات البرمجية اللازمة لإجراء طلبات استرداد صفحات الويب المطلوبة من الموقع وتحليل محتوى HTML واستخراج البيانات التي تحتاجها والتعامل مع الحالات الخاصة التي قد لا تتمكن فيها من الحصول على البيانات المطلوبة، قد تحتاج بعد ذلك إلى تنسيق البيانات أو تخزينها أو تحليلها حسب الطلب.

سنقوم بإنشاء مشروع بلغة بايثون يستخرج أحدث المقالات المنشورة في موقع ووردبريس بالعربية باستخدام المكتبة tkinter و BeautifulSoup وهي مكتبة بايثون مشهورة تستخدم لتحليل مستندات HTML وXML واستخراج بياناتها والمكتبة requests لتقديم طلب HTTP GET إلى عنوان URL لصفحة الويب التي تريد استخراج بياناتها.

كود بايثون لاستخراج بيانات من موقع ويب:

# مشروع استخلاص البيانات من موقع ووردبريس بالعربية

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext  # لإضافة scrollbar للنتائج
import requests
from bs4 import BeautifulSoup

# استخلاص عناوين المقالات المنشورة حديثًا

def fetch_and_extract_labels():
    url = url_entry.get()

    result_text.config(state=tk.NORMAL)
    result_text.delete(1.0, tk.END)
    result_text.config(state=tk.DISABLED)
    try:
        response = requests.get(url)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        labels = [link.get('aria-label') for link in soup.find_all('a', class_='p-flink')]
        result_text.config(state=tk.NORMAL)
        result_text.delete(1.0, tk.END)

        result_text.tag_configure("rtl", justify="right")
        for label in labels:
            result_text.insert(tk.END, f"{label}\n", "rtl")
    except requests.exceptions.RequestException as e:
        result_text.config(state=tk.NORMAL)
        result_text.delete(1.0, tk.END)
        result_text.insert(tk.END, "خطأ قي جلب البيانات-تحقق من العنوان")
    except Exception as e:
        result_text.config(state=tk.NORMAL)
        result_text.delete(1.0, tk.END)
        result_text.insert(tk.END, f"خطأ: {str(e)}")
    finally:
        result_text.config(state=tk.DISABLED)

app = tk.Tk()
app.title("استخلاص البيانات")

button_style = ttk.Style()
button_style.configure("TButton", font="tahoma", padding=5, background="#3498db")

url_label = ttk.Label(app, text="عنوان الموقع", font="tahoma")
url_label.pack(pady=5)

default_url = "https://www.wpar.net/"
url_entry = ttk.Entry(app, width=50 , font="tahoma")
url_entry.insert(0, default_url)
url_entry.pack(pady=5)

scrape_button = ttk.Button(app, text="استخراج", style="TButton", command=fetch_and_extract_labels)
scrape_button.pack(pady=10)

result_text = scrolledtext.ScrolledText(app, wrap=tk.WORD, height=15, width=50,font="tahoma")
result_text.pack(pady=5)
result_text.config(state=tk.DISABLED)

app.mainloop()

عند تنفيذ المشروع والنقر على زر استخراج ستحصل على البيانات المطلوبة بالشكل التالي:

مشروع استخلاص بيانات الويب

توصيات حول المشروع:

عليك تثبيت المكتبات المطلوبة من خلال التعليمة pip install module_name لتنفيذ الكود بشكل صحيح، كما يتوجب عليك التحقق باستمرار من الكود البرمجي الذي يستخلص البيانات من موقع معين لأن بعض المواقع قد تغير تصميمها، وبالتالي يتوجب عليك التأكد من أن الكود البرمجي الذي كتبته يجلب لك البيانات الصحيحة، وبعد تنفيذ هذا المشروع جرب جلب بيانات أخرى مثل صور المقالات أو روابطها أو اسم الكاتب واعرضها بالشكل المناسب.

أفكار مشاريع بايثون أخرى للتدريب

استعرضنا لك في الفقرات السابقة عدة مشاريع بايثون جاهزة للمبتدئين والتي يمكنك تجربتها كمبتدئ وهناك بالطبع الكثير من أفكار شاريع بايثون للتدريب يمكنك تطبيقها فمجالات وتطبيقات لغة بايثون كثيرة ومتنوعة وإذا كنت مهتمًا بأحد هذه المجالات فمن الأفضل أن تركز على تطوير مشاريع فيه.

إليك قائمة ببعض الأفكار الأخرى لمشاريع عملية متنوعة تناسب المبتدئين يمكنك تنفيذها لغة البرمجة بايثون.

  • مشروع يطلب من المستخدم إدخال تاريخ ميلاده ويحسب عمره بالأيام أو الأشهر أو السنوات.
  • مشروع التحويل بين العملات.
  • مشروع لعبة بسيطة مثل لعبة Tic-Tac-Toe أو لعبة مسابقات تطرح الأسئلة وتتحقق من الإجابات.
  • مشروع توليد رمز QR للروابط.
  • مشروع لتلخيص النصوص.
  • مشروع فهرس أو قاموس بلغة بايثون.
  • استخراج النص من مقطع فيديو.
  • مشروع أتمتة مهام مثل مهمة التقاط الشاشة أو إرسال بريد إلكتروني.
  • مشروع قواعد بيانات لحفظ أسماء جهات اتصالك وأرقامهم وعناوينهم.
  • مشروع قائمة المهام.
  • مشروع التحقق من صحة البريد الإلكتروني.
  • مشروع استخراج أسماء وأسعار المنتجات من مواقع للتجارة الإلكترونية.
  • مشاريع ذكاء اصطناعي بلغة البايثون مثل مشروع تصنيف الصور أو مشروع تصنيف رسائل البريد الإلكتروني.
  • مشاريع بايثون للويب مثل تطبيق إدارة المهام To-do List أو صفحة ويب بسيطة تعرض أعمالك.

قبل تنفيذ أي مشروع بايثون من هذه المشاريع حاول فهم المشكلة المطلوبة بشكل صحيح وتحديد المدخلات والمخرجات المطلوبة، وفكر في خوارزمية الحل الصحيحة التي تمكنك من معالجة المدخلات للحصول على النتائج الصحيحة، ثم ابحث عن وجود مكتبات مساعدة لتنفيذ المطلوب فلغة بايثون غنية بالمكتبات الجاهزة التي توفر عليك الوقت وتختصر كتابة الكثير من الأكواد.

وفي حال رغبت بتنفيذ مشاريع بلغة بايثون أكثر تقدمًا واحترافية تساعدك على فهم لغة باثيون Python بعمق والتعرف على متطلبات سوق العمل أنصحك بمطالعة دورة تطوير التطبيقات باستخدام لغة Python التي توفرها أكاديمية حسوب فهي دورة متكاملة تمنحك الفرصة لبدء تعلم بايثون من الصفر وتطبيق العديد من مشاريع بايثون العملية المتكاملة التي تعزز معرض أعمالك وتساعدك في العثور على فرصة عمل مناسبة، كما توفر لك متابعة دورية مع مدربين أكفاء يجيبونك في حال وجود أي تساؤل أو استفسار بخصوص ما تطبقه وتتعلمه.

الخلاصة

اقترحنا في هذه المقالة لك العديد من الأفكار المتنوعة حول مشاريع بايثون يمكنك تنفيذها وتطويرها، ستساعدك هذه المشاريع على التمكن من أساسيات لغة بايثون وفهمها بشكل أفضل، وممارسة كتابة الأكواد وتصحيح الأخطاء. وتذكر دومًا أن الممارسة والتطبيق العملي هي المفتاح لتحسن مستواك في البرمجة وبمجرد الانتهاء من هذه المشاريع البسيطة يمكنك تجربة أفكار مشاريع أكثر تقدمًا.

هل لديك أفكار مشاريع بايثون أخرى تود أن تقترحها أو تناقشها معنا وتجد أنها تناسب المبرمجين المبتدئين، نرحب بأي فكرة مشروع بايثون تكتبها في قسم التعليقات أسفل المقال.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

while True:
    num1 = int(input('Enter your first number '))
    num2 = int(input('Enter your second number '))
    mark = input('Type of accounting transaction ')

    if mark == "+":
        print(num1 + num2)
    elif mark == "-":
        print(num1 - num2)
    elif mark == "*":
        print(num1 * num2)
    elif mark == "/":
        print(num1 / num2)
    else:
        print('write + - * /')
    

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...