مدرسه زبان برنامه‌نویسی PYTHON

وبلاگی جهت معرفی - آموزش و تحلیل زبان برنامه نویسی ‍پایتون

مدرسه زبان برنامه‌نویسی PYTHON

وبلاگی جهت معرفی - آموزش و تحلیل زبان برنامه نویسی ‍پایتون

۳ مطلب در فروردين ۱۴۰۴ ثبت شده است

    برنامه ذخیره اطلاعات دانش آموزان با استفاده از MongoDB در پایتون    

     برنامه ای به زبان برنامه نویسی پایتون ساختیم جهت ذخیره اطلاعات یک دانش آموز در دیتابیس مونگو دیبی. این اطلاعات شامل نام، نام خانوادگی، کد ملی، ایمیل، شماره تلفن و ... هستند.

from pymongo import MongoClient
from pymongo.errors import ConnectionFailure, DuplicateKeyError
import re

class StudentDatabase:
    def init(self, db_name='school_db', collection_name='students'):
        """
        Initialize the MongoDB connection and student collection
        """
        try:
            # اتصال به MongoDB (به صورت پیش‌فرض به localhost متصل می‌شود)
            self.client = MongoClient('mongodb://localhost:27017/')
            
            # تست اتصال
            self.client.admin.command('ping')
            print("اتصال به MongoDB با موفقیت برقرار شد.")
            
            self.db = self.client[db_name]
            self.collection = self.db[collection_name]
            
            # ایجاد ایندکس برای کد ملی به عنوان کلید یکتا
            self.collection.create_index("national_id", unique=True)
            
        except ConnectionFailure:
            print("خطا در اتصال به MongoDB. لطفا مطمئن شوید سرور MongoDB در حال اجراست.")
            raise

    def validate_email(self, email):
        """
        اعتبارسنجی فرمت ایمیل
        """
        pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
        return re.match(pattern, email) is not None

    def validate_phone(self, phone):
        """
        اعتبارسنجی شماره تلفن (فرمت بین‌المللی یا ایرانی)
        """
        pattern = r'^(\+98|0)?9\d{9}$'
        return re.match(pattern, phone) is not None

    def validate_national_id(self, national_id):
        """
        اعتبارسنجی کد ملی ایران (10 رقمی)
        """
        if not national_id.isdigit() or len(national_id) != 10:
            return False
        
        # الگوریتم بررسی کد ملی
        check = int(national_id[9])
        s = sum(int(national_id[i]) * (10 - i) for i in range(9)) % 11
        return (s < 2 and check == s) or (s >= 2 and check + s == 11)

    def add_student(self, first_name, last_name, email, phone, national_id):
        """
        افزودن دانش آموز جدید به پایگاه داده
        """
        # اعتبارسنجی ورودی‌ها
        if not all([first_name, last_name, email, phone, national_id]):
            print("خطا: تمام فیلدها باید پر شوند.")
            return False

        if not self.validate_email(email):
            print("خطا: فرمت ایمیل نامعتبر است.")
            return False

        if not self.validate_phone(phone):
            print("خطا: فرمت شماره تلفن نامعتبر است.")
            return False

        if not self.validate_national_id(national_id):
            print("خطا: کد ملی نامعتبر است.")
            return False

        # ایجاد سند دانش آموز
        student = {
            "first_name": first_name,
            "last_name": last_name,
            "email": email,
            "phone": phone,
            "national_id": national_id
        }

        try:
            # درج سند در مجموعه
            result = self.collection.insert_one(student)
            print(f"دانش آموز با موفقیت اضافه شد. شناسه: {result.inserted_id}")
            return True
        except DuplicateKeyError:
            print("خطا: دانش آموزی با این کد ملی از قبل وجود دارد.")
            return False
        except Exception as e:
            print(f"خطا در افزودن دانش آموز: {e}")
            return False

    def close_connection(self):
        """
        بستن اتصال به MongoDB
        """
        self.client.close()
        print("اتصال به MongoDB بسته شد.")


def get_student_info():
    """
    دریافت اطلاعات دانش آموز از کاربر
    """
    print("\nلطفا اطلاعات دانش آموز را وارد کنید:")
    first_name = input("نام: ").strip()
    last_name = input("نام خانوادگی: ").strip()
    email = input("ایمیل: ").strip()
    phone = input("شماره تلفن (مثال: 09123456789): ").strip()
    national_id = input("کد ملی (10 رقمی): ").strip()
    
    return first_name, last_name, email, phone, national_id


def main():
    # ایجاد نمونه از کلاس پایگاه داده
    try:
        db = StudentDatabase()
    except ConnectionFailure:
        return

while True:
        print("\nمنوی اصلی:")
        print("1. افزودن دانش آموز جدید")
        print("2. خروج")
        
        choice = input("لطفا گزینه مورد نظر را انتخاب کنید: ").strip()
        
        if choice == '1':
            # دریافت اطلاعات دانش آموز
            student_data = get_student_info()
            
            # افزودن دانش آموز به پایگاه داده
            db.add_student(*student_data)
        
        elif choice == '2':
            # خروج از برنامه
            db.close_connection()
            print("برنامه خاتمه یافت.")
            break
        
        else:
            print("گزینه نامعتبر. لطفا عدد 1 یا 2 را وارد کنید.")


if name == "__main__":
    main()

 

مونگو دیبی - رادیو صدای ققنوس

🔴🔴 راهنمای استفاده از برنامه:

1. مطمئن شوید MongoDB روی سیستم شما نصب و اجرا شده است (به صورت پیش‌فرض روی پورت 27017).

2. کتابخانه‌های مورد نیاز را نصب کنید:
   
   pip install pymongo
   `

3. برنامه را اجرا کنید و منوی اصلی نمایش داده می‌شود.

4. برای افزودن دانش آموز جدید، گزینه 1 را انتخاب کنید و اطلاعات خواسته شده را وارد نمایید.

5. برنامه به طور خودکار اعتبارسنجی‌های زیر را انجام می‌دهد:
   - تمام فیلدها باید پر شوند
   - فرمت ایمیل باید معتبر باشد
   - شماره تلفن باید معتبر باشد (فرمت ایرانی)
   - کد ملی باید 10 رقمی و معتبر باشد

6. اطلاعات با موفقیت در MongoDB ذخیره می‌شوند.

🔵🔵 ساختار پایگاه داده:
🔵 نام پایگاه داده: `school_db`
🔵 نام مجموعه: `students`
🔵 فیلدها: `first_name`, `last_name`, `email`, `phone`, `national_id`
🔵 کد ملی (`national_id`) به عنوان کلید یکتا در نظر گرفته شده است.

۱ نظر موافقین ۰ مخالفین ۰ ۱۵ فروردين ۰۴ ، ۱۷:۴۱
سعید دامغانیان

برج هانوی یک پازل ریاضی کلاسیک است که شامل جابجایی مجموعه ای از دیسک ها از یک میله به میله دیگر، با رعایت قوانین خاص است. در این برنامه پایتون، نحوه حل برج هانوی را با استفاده از بازگشت، یک تکنیک برنامه‌نویسی اساسی که به ما امکان می‌دهد این مشکل پیچیده را به زیرمسائل ساده‌تر و قابل مدیریت تقسیم کنیم، بررسی خواهیم کرد. این برنامه توالی حرکات مورد نیاز برای انتقال کارآمد دیسک ها بین میله ها را نشان می دهد و نمونه ای واضح از حل مشکل بازگشتی در عمل را ارائه می دهد. این مثال آموزشی نه تنها درک بازگشت را افزایش می دهد، بلکه بینشی را در مورد تفکر الگوریتمی برای حل پازل ارائه می دهد.

قوانین برج هانوی چیست؟
برج هانوی یک پازل ریاضی است که در آن سه میله و n دیسک داریم. هدف از پازل این است که کل پشته را به میله دیگری منتقل کنید، با رعایت قوانین ساده زیر: 

فقط یک دیسک را می توان در یک زمان جابجا کرد. 
هر حرکت شامل برداشتن دیسک بالایی از یکی از پشته ها و قرار دادن آن در بالای پشته دیگر است، یعنی یک دیسک تنها در صورتی می تواند جابجا شود که بالاترین دیسک روی یک پشته باشد. 
هیچ دیسکی را نمی توان روی دیسک کوچکتر قرار داد.
توجه: انتقال دیسک های n-1 بالایی از میله منبع به میله کمکی دوباره می تواند به عنوان یک مسئله جدید در نظر گرفته شود و به همان روش قابل حل است.

برج های هانوی - رادیو صدای ققنوس

 

برج هانوی با استفاده از بازگشت
این تابع به صورت بازگشتی مشکل جابجایی n دیسک را به مشکلات کوچکتر متحرک n-1 دیسک تقسیم می کند. نقش میله ها (منبع، مقصد، کمکی) را در هر تماس بازگشتی جایگزین می کند تا انتقال گام به گام دیسک ها را طبق قوانین پازل برج هانوی تسهیل کند. قوانین این است که شما فقط می توانید یک دیسک را در یک زمان جابجا کنید و ممکن است دیسک بزرگتر روی دیسک کوچکتر قرار نگیرد.

# Recursive Python function to solve the tower of hanoi

def TowerOfHanoi(n , source, destination, auxiliary):
    if n==1:
        print ("Move disk 1 from source",source,"to destination",destination)
        return
    TowerOfHanoi(n-1, source, auxiliary, destination)
    print ("Move disk",n,"from source",source,"to destination",destination)
    TowerOfHanoi(n-1, auxiliary, destination, source)
        
# Driver code
n = 4
TowerOfHanoi(n,'A','B','C') 
# A, C, B are the name of rods

خروجی قطعه کد بالا بصورت زیر است:

Move disk 1 from source A to destination C
Move disk 2 from source A to destination B
Move disk 1 from source C to destination B
Move disk 3 from source A to destination C
Move disk 1 from source B to destination A
Move disk 2 from source B to destination C
Move disk 1 from source A to destination C
Move disk 4 from source A to destination B
Move disk 1 from source C to destination B
Move disk 2 from source C to destination A
Move disk 1 from source B to destination A
Move disk 3 from source C to destination B
Move disk 1 from source A to destination C
Move disk 2 from source A to destination B
Move disk 1 from source C to destination B

Time Complexity: O(2n)
Auxiliary Space: O(n)

۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۰۴ ، ۱۱:۵۳
سعید دامغانیان

درود بر شما دوستان عزیز و همراهان همیشگی وبلاگ مدرسه پایتون

سال نو رو به همه شما عزیزان تبریک میگم. به امید اینکه در سال جدید آموخته هاتون صد چندان بشه و روز به روز پیشرفت کنین. در سال جدید هم با وبلاگ خودتون همراه باشید. همیشه در حال یادگیری

- ارادتمند شما عزیزان - سعید دامغانیان

 

تبریک سال نو - سعید دامغانیان

۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۰۴ ، ۱۱:۴۷
سعید دامغانیان