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

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

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

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

۳۰ مطلب با کلمه‌ی کلیدی «زبان برنامه نویسی پایتون» ثبت شده است

در اینجا کد یک ماشین حساب ساده برای سطح مقدماتی برای شما قرار گرفته که صرفاً عملگرها و عملوندها را از ورودی دریافت کرده و نتیجه را در خروجی نمایش میدهد. یادآوری میشود که پروژه ماشین حساب گرافیکی و پیشرفته قبلاً در دسته بندی پروژه ها وارد شده است. موفق باشید / سعید دامغانیان

# This function adds two numbers 
# By: Saeed Damghanian
def add(x, y):
    return x + y

# This function subtracts two numbers
def subtract(x, y):
    return x - y

# This function multiplies two numbers
def multiply(x, y):
    return x * y

# This function divides two numbers
def divide(x, y):
    return x / y


print("Select operation.")
print("1.Add")
print("2.Subtract")
print("3.Multiply")
print("4.Divide")

while True:
    # take input from the user
    choice = input("Enter choice(1/2/3/4): ")

    # check if choice is one of the four options
    if choice in ('1', '2', '3', '4'):
        try:
            num1 = float(input("Enter first number: "))
            num2 = float(input("Enter second number: "))
        except ValueError:
            print("Invalid input. Please enter a number.")
            continue

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

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

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

        elif choice == '4':
            print(num1, "/", num2, "=", divide(num1, num2))
        
        # check if user wants another calculation
        # break the while loop if answer is no
        next_calculation = input("Let's do next calculation? (yes/no): ")
        if next_calculation == "no":
          break
    else:
        print("Invalid Input")

یک نمونه خروجی اجرا شده:

Select operation.
1.Add
2.Subtract
3.Multiply
4.Divide
Enter choice(1/2/3/4): 3
Enter first number: 15
Enter second number: 14
15.0 * 14.0 = 210.0
Let's do next calculation? (yes/no): no

 

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

جنراتورها : تعریف و کاربرد


اغلب افرادی که با Generator-های پایتون آشنایی ندارند یا به تازگی آشنا شده‌اند، در مورد اهمیت این مفهوم دچار تردید می شوند. Generator-ها به طور خاص در زمینه یادگیری ماشین برای نوشتن تابع‌های سفارشی نقش بسیار مهمی ایفا می‌کنند. در این مقاله با روش کاهش مصرف حافظه و افزایش سرعت اجرای کد پایتون با Generator آشنا خواهیم شد. جهت مطالعه مقاله کامل به ادامه مطلب رجوع کنید.

 

آموزش جنراتورها در پایتون

 

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

🔵جنگو به‌طور مستقیم برای ساخت اپلیکیشن‌های موبایل طراحی نشده است، اما می‌تواند به‌عنوان یک بک‌اند برای اپلیکیشن‌های موبایل بسیار مناسب باشد. در واقع، جنگو معمولاً به‌عنوان فریم‌ورکی برای ایجاد APIهای RESTful یا GraphQL استفاده می‌شود که اپلیکیشن‌های موبایل می‌توانند به‌راحتی با آن‌ها ارتباط برقرار کنند.

🔵🔵🔵 دلایل مناسب بودن جنگو برای اپلیکیشن‌های موبایل:

🔴 1. ایجاد API: با استفاده از Django REST Framework، می‌توانید به‌راحتی APIهای قدرتمند و امن برای اپلیکیشن‌های موبایل بسازید.

🔴 2. مدیریت داده‌ها: جنگو دارای ORM (Object-Relational Mapping) است که به شما کمک می‌کند تا به‌سادگی با پایگاه‌های داده کار کنید و داده‌ها را برای اپلیکیشن‌های موبایل مدیریت کنید.

🔴 3. امنیت: جنگو به‌طور پیش‌فرض دارای ویژگی‌های امنیتی است که می‌تواند به محافظت از داده‌های اپلیکیشن موبایل کمک کند.

🔴 4. مقیاس‌پذیری: جنگو می‌تواند به‌راحتی با افزایش تعداد کاربران و حجم داده‌ها مقیاس‌پذیر باشد.

🔴 5. همکاری با فریم‌ورک‌های موبایل: می‌توانید از جنگو به‌عنوان بک‌اند در کنار فریم‌ورک‌های موبایل مانند React Native، Flutter یا Xamarin استفاده کنید.

فریم ورک جنگو و برنامه نویسی اپلیکیشن های موبایل

🔵🔵🔵 نتیجه‌گیری

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

۲ نظر موافقین ۰ مخالفین ۰ ۰۱ آذر ۰۳ ، ۱۱:۳۶
سعید دامغانیان

🔴🔴🔴جنگو به عنوان یک فریم‌ورک قدرتمند برای توسعه وب، توسط بسیاری از وب‌سایت‌های معروف و بزرگ استفاده شده است. در زیر به برخی از این وب‌سایت‌ها اشاره می‌کنیم:

فریم ورک جنگو پایتون

🔴 1. اینستاگرام: یکی از بزرگ‌ترین شبکه‌های اجتماعی که با استفاده از جنگو ساخته شده است و به خوبی می‌تواند حجم بالای داده‌ها و تعاملات کاربران را مدیریت کند.
🔴 2. اسپاتیفای: این پلتفرم موسیقی آنلاین از جنگو برای مدیریت بک‌اند و ارائه خدمات به کاربران استفاده می‌کند.
🔴 3. یوتیوب: این وب‌سایت در ابتدا با PHP ساخته شده بود، اما به دلیل نیاز به مقیاس‌پذیری و سرعت، به جنگو منتقل شد.
🔴 4. دیسکاس (Disqus): یک سیستم نظردهی و بحث که به وب‌سایت‌ها امکان می‌دهد نظرات و تعاملات کاربران را مدیریت کنند.
🔴 5. واشنگتن پست: یکی از بزرگ‌ترین روزنامه‌های آنلاین که از جنگو برای مدیریت محتوای خود استفاده می‌کند.
🔴 6. موزیلا: وب‌سایت پشتیبانی موزیلا و دیگر خدمات مرتبط با مرورگر فایرفاکس با استفاده از جنگو طراحی شده است.
🔴 7. BitBucket: یک پلتفرم مدیریت مخازن Git که به شدت به جنگو وابسته است.
🔴 8. DropBox: این سرویس ذخیره‌سازی ابری نیز از جنگو برای بخش‌های مختلف خود استفاده می‌کند.
🔴 9. Eventbrite: یک پلتفرم مدیریت رویداد و بلیط‌فروشی که با استفاده از جنگو ساخته شده است.

این وب‌سایت‌ها نمونه‌هایی از قدرت و قابلیت‌های جنگو در مدیریت پروژه‌های بزرگ و مقیاس‌پذیر هستند

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

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

🔴🔴🔴 کد برنامه python

import tkinter as tk
from tkinter import messagebox
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_email():
    sender_email = entry_sender.get()
    receiver_email = entry_receiver.get()
    password = entry_password.get()
    subject = entry_subject.get()
    body = entry_body.get("1.0", tk.END)

    # ساختن ایمیل
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    try:
        # اتصال به سرور SMTP و ارسال ایمیل
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(sender_email, password)
        server.send_message(msg)
        server.quit()
        messagebox.showinfo("Success", "Email sent successfully!")
    except Exception as e:
        messagebox.showerror("Error", f"Failed to send email: {e}")

# ایجاد پنجره اصلی
root = tk.Tk()
root.title("Email Sender")

# ایجاد ورودی ها
tk.Label(root, text="Sender Email:").pack()
entry_sender = tk.Entry(root, width=40)
entry_sender.pack()

tk.Label(root, text="Receiver Email:").pack()
entry_receiver = tk.Entry(root, width=40)
entry_receiver.pack()

tk.Label(root, text="Password:").pack()
entry_password = tk.Entry(root, show='*', width=40)
entry_password.pack()

tk.Label(root, text="Subject:").pack()
entry_subject = tk.Entry(root, width=40)
entry_subject.pack()

tk.Label(root, text="Body:").pack()
entry_body = tk.Text(root, width=40, height=10)
entry_body.pack()

# دکمه ارسال
send_button = tk.Button(root, text="Send Email", command=send_email)
send_button.pack()

# اجرای حلقه اصلی
root.mainloop()

ارسال ایمیل با زبان برنامه نویسی پایتون


🔴🔴🔴 توضیحات کد
1. کتابخانه‌ها: 
   - tkinter برای ساخت رابط کاربری.
   - smtplib و email برای ارسال ایمیل.

2. **تابع send_email**: 
   - ایمیل فرستنده، گیرنده، رمز عبور، موضوع و متن ایمیل را از ورودی‌ها دریافت می‌کند.
   - یک ایمیل با استفاده از MIMEMultipart ساخته و ارسال می‌کند.

3. رابط کاربری: 
   - ورودی‌های لازم برای ایمیل (فرستنده، گیرنده، رمز عبور، موضوع و متن) ایجاد شده‌اند.
   - یک دکمه برای ارسال ایمیل وجود دارد.

🔴🔴🔴 نکته امنیتی
برای ارسال ایمیل از حساب Google، ممکن است نیاز باشد تا گزینه "Allow less secure apps" را در تنظیمات حساب Google فعال کنید. همچنین، استفاده از رمزهای عبور اپلیکیشن (App Passwords) نیز توصیه می‌شود.

🔴🔴🔴 نحوه اجرا
- کد را در یک فایل با پسوند .py ذخیره کنید.
- با اجرای فایل، پنجره گرافیکی برای ارسال ایمیل نمایش داده می‌شود. 

این برنامه یک نمونه ساده است و می‌تواند بر حسب نیاز شما گسترش یابد یا سفارشی شود./ سعید دامغانیان - رادیو صدای ققنوس

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

آیا پایتون برای شروع برنامه نویسی از صفر زبان مناسبی است؟

Why Python Is Good Programming Language for Machine Learning

بله، پایتون یکی از بهترین زبان‌ها برای شروع برنامه‌نویسی از صفر است. در زیر به چند دلیل اصلی اشاره می‌کنم:

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

🔵🔵🔵 ۳. کاربردهای گسترده
- تنوع کاربردها: پایتون در زمینه‌هایی مثل توسعه وب، علم داده، یادگیری ماشین، اتوماسیون، و توسعه بازی کاربرد دارد. این تنوع به شما این امکان را می‌دهد که بعد از یادگیری پایه، به زمینه‌های مختلفی بروید.

🔵🔵🔵 ۴. پشتیبانی از کتابخانه‌ها
- کتابخانه‌های قدرتمند: پایتون دارای کتابخانه‌های بسیاری است که کار با داده‌ها، انجام محاسبات علمی، و توسعه وب را آسان‌تر می‌کند.

🔵🔵🔵 ۵. یادگیری مفاهیم برنامه‌نویسی
- یادگیری اصول اولیه: با یادگیری پایتون می‌توانید اصول برنامه‌نویسی مثل متغیرها، حلقه‌ها، توابع و شی‌گرایی را به راحتی یاد بگیرید.

🔵🔵🔵 نتیجه‌گیری
به طور کلی، پایتون یک گزینه عالی برای افرادی است که می‌خواهند از صفر برنامه‌نویسی را آغاز کنند. سادگی، قدرت، و تنوع کاربردهای آن باعث می‌شود که یادگیری آن تجربه‌ای لذت‌بخش باشد./ سعید دامغانیان - رادیو صدای ققنوس

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

NumPy و Pandas هر دو کتابخانه‌های مهمی در پایتون هستند که برای کار با داده‌ها و تحلیل علمی استفاده می‌شوند. با این حال، هرکدام هدف و ویژگی‌های خاص خود را دارند. در ادامه به تفاوت‌های اصلی بین NumPy و Pandas می‌پردازم:

🔴🔴🔴 ۱. هدف اصلی

- NumPy:
  - تمرکز بر روی محاسبات عددی و کار با آرایه‌های چندبعدی.
  - ارائه توابع ریاضی و عملیات‌های خطی به صورت بهینه.

- Pandas:
  - طراحی شده برای تجزیه و تحلیل داده‌ها و مدیریت داده‌های ساختارمند.
  - فراهم آوردن ابزارهایی برای کار با داده‌های جدولی (DataFrames) و سری‌ها (Series).

🔴🔴🔴 ۲. نوع داده

- NumPy:
  - نوع داده اصلی ndarray است که برای آرایه‌های چندبعدی استفاده می‌شود.
  - مناسب برای داده‌های عددی و علمی.

- Pandas:
  - نوع داده اصلی DataFrame برای داده‌های جدولی و Series برای داده‌های یک‌بعدی است.
  - مناسب برای داده‌های مختلط، شامل متن، تاریخ و عدد.

🔴🔴🔴 ۳. امکانات

- NumPy:
  - توابع ریاضی، آمار و جبر خطی.
  - پشتیبانی از عملیات‌های عددی سریع و کارآمد.

- Pandas:
  - امکانات پیشرفته برای پاک‌سازی داده‌ها، گروه‌بندی، ادغام و فیلتر کردن داده‌ها.
  - قابلیت کار با داده‌های گم‌شده و تغییر شکل داده‌ها.

🔴🔴🔴 ۴. سهولت استفاده

- NumPy:
  - مناسب برای کارهای عددی و محاسباتی، اما ممکن است برای مدیریت داده‌های پیچیده چالش‌بر‌انگیز باشد.

- Pandas:
  - بسیار کاربرپسند و مناسب برای تجزیه و تحلیل داده‌ها، با امکاناتی برای راحتی در کار با داده‌ها.

🔴🔴🔴 ۵. عملکرد

- NumPy:
  - بهینه‌سازی شده برای سرعت در محاسبات عددی با آرایه‌ها.

- Pandas:
  - ممکن است در برخی موارد کندتر باشد، زیرا امکانات بیشتری را ارائه می‌دهد و تمرکز بیشتری بر روی داده‌های پیچیده دارد.

🔴🔴🔴 نتیجه‌گیری

NumPy و Pandas در کنار هم ابزارهای قدرتمندی را برای کار با داده‌ها فراهم می‌کنند. برای محاسبات عددی و علمی، NumPy انتخاب بهتری است، در حالی که برای تجزیه و تحلیل داده‌ها و مدیریت داده‌های ساختارمند، Pandas مناسب‌تر است. به طور کلی، در پروژه‌های داده‌کاوی و علم داده، معمولاً هر دو کتابخانه به صورت همزمان استفاده می‌شوند.

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

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

🔵🔵🔵 کد برنامه

 

import requests

def get_ip():
    try:
        response = requests.get('https://api.ipify.org?format=json')
        response.raise_for_status()  # بررسی وضعیت پاسخ
        data = response.json()
        return data['ip']
    except requests.RequestException as e:
        return f"Error: {e}"

if __name__ == "__main__":
    user_ip = get_ip()
    print(f"User Ip is: {user_ip}")

🔵🔵🔵 توضیحات کد

1. وارد کردن کتابخانه: از کتابخانه requests برای ارسال درخواست HTTP استفاده می‌کنیم.
2. **تابع get_ip**:
   - با استفاده از requests.get به API ipify درخواست ارسال می‌کند.
   - پاسخ را به فرمت JSON تبدیل کرده و آی‌پی را استخراج می‌کند.
   - در صورت بروز خطا، پیام خطا را برمی‌گرداند.
3. اجرای برنامه: در بخش اصلی برنامه، تابع get_ip فراخوانی شده و آی‌پی کاربر چاپ می‌شود.

🔵🔵🔵 نحوه اجرا

1. اطمینان حاصل کنید که کتابخانه requests نصب شده باشد. اگر نصب نیست، می‌توانید با دستور زیر آن را نصب کنید:

  
   pip install requests
   

2. سپس کد را در یک فایل با پسوند .py ذخیره کرده و اجرا کنید:

  
   python your_script.py
   

با اجرای برنامه، آی‌پی عمومی کاربر نمایش داده می‌شود.

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

🔵 برای نوشتن برنامه‌ای به زبان پایتون که تعداد اعداد اول بین دو عدد دلخواه را نشان دهد، می‌توانیم از تابعی برای بررسی اول بودن هر عدد استفاده کنیم. در زیر یک مثال ساده از این برنامه آورده شده است:

def is_prime(n):
    """بررسی اول بودن یک عدد"""
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def count_primes_between(start, end):
    """شماره‌گذاری اعداد اول بین دو عدد"""
    count = 0
    for num in range(start, end + 1):
        if is_prime(num):
            count += 1
    return count

if __name__ == "__main__":
    start = int(input("Enter first number: "))
    end = int(input("Enter second number: "))
    
    if start > end:
        print("First number must be less than second one.")
    else:
        prime_count = count_primes_between(start, end)
        print(f"Number of prime number between {start} و {end}: {prime_count}")

🔵🔵🔵 توضیحات کد

1. **تابع is_prime(n)**:
   - این تابع بررسی می‌کند که آیا عدد n اول است یا خیر.
   - اگر n کمتر از یا برابر با ۱ باشد، False برمی‌گرداند.
   - در غیر این صورت، با استفاده از یک حلقه، بررسی می‌کند که آیا n بر هیچ عددی از ۲ تا جذر آن تقسیم‌پذیر نیست.

2. **تابع count_primes_between(start, end)**:
   - این تابع تعداد اعداد اول بین دو عدد start و end را شمارش می‌کند.
   - از یک حلقه برای بررسی هر عدد در این محدوده استفاده می‌کند و اگر عدد اول باشد، شمارش را افزایش می‌دهد.

3. بخش اصلی برنامه:
   - از کاربر دو عدد را دریافت کرده و بررسی می‌کند که آیا محدوده معتبر است یا خیر.
   - تعداد اعداد اول را محاسبه کرده و نتیجه را نمایش می‌دهد.

🔵🔵🔵 نحوه اجرا

1. کد را در یک فایل با پسوند .py ذخیره کنید.
2. سپس برنامه را با استفاده از دستور زیر اجرا کنید:

  
   python your_script.py
   

3. دو عدد را وارد کنید تا تعداد اعداد اول بین آن‌ها نمایش داده شود.

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

برای برنامه‌نویسی با پایتون، نیازمندی‌های سیستم به صورت کلی به نوع پروژه و کاربردهای خاص شما بستگی دارد. با این حال، در زیر مشخصات سیستم پیشنهادی برای برنامه‌نویسی با پایتون آورده شده است:

🔴 مشخصات حداقلی

- پردازنده (CPU): 
  - حداقل: پردازنده دو هسته‌ای (Dual-core)
  - پیشنهادی: پردازنده چهار هسته‌ای (Quad-core) یا بالاتر

- حافظه (RAM): 
  - حداقل: 4 گیگابایت
  - پیشنهادی: 8 گیگابایت یا بیشتر

- فضای ذخیره‌سازی: 
  - حداقل: 20 گیگابایت فضای خالی
  - پیشنهادی: SSD با ظرفیت 256 گیگابایت یا بیشتر برای سرعت بهتر

- سیستم عامل:
  - ویندوز 10 یا 11
  - macOS (نسخه‌های جدید)
  - توزیع‌های لینوکس (Ubuntu، Fedora و ...)

🔴 مشخصات پیشنهادی برای پروژه‌های بزرگتر یا هوش مصنوعی

- پردازنده (CPU): 
  - حداقل: پردازنده چهار هسته‌ای
  - پیشنهادی: پردازنده‌های چند هسته‌ای (مثل Intel i5/i7 یا AMD Ryzen 5/7)

- حافظه (RAM): 
  - حداقل: 8 گیگابایت
  - پیشنهادی: 16 گیگابایت یا بیشتر (به ویژه برای پروژه‌های بزرگ داده یا یادگیری ماشین)

- فضای ذخیره‌سازی: 
  - SSD با ظرفیت 512 گیگابایت یا بیشتر برای ذخیره‌سازی سریع داده‌ها و پروژه‌ها.

- کارت گرافیک (GPU): 
  - برای پروژه‌های یادگیری عمیق، یک کارت گرافیک با قابلیت CUDA (مثل NVIDIA GeForce) می‌تواند بسیار مفید باشد.

🔴 نرم‌افزارها و ابزارهای لازم

- نصب پایتون: نسخه 3.x (آخرین نسخه پایدار)
- مدیر بسته: pip (به طور پیش‌فرض با پایتون نصب می‌شود)
- ویرایشگر کد یا IDE:
  - ویرایشگرهای سبک: Visual Studio Code، Sublime Text
  - IDEهای کامل: PyCharm، Jupyter Notebook (برای داده‌کاوی و یادگیری ماشین)

🔴🔴🔴 نتیجه‌گیری

با توجه به نوع پروژه و نیازهای خاص خود، می‌توانید مشخصات سیستم را تنظیم کنید. برای پروژه‌های ساده، مشخصات حداقلی کافی است، اما برای پروژه‌های پیچیده‌تر، داشتن سخت‌افزار قوی‌تر می‌تواند به بهبود عملکرد و کارایی کمک کند.

 

Desktop Computer - Editmicro

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