🐍 آموزش عملی پایتون | پروژه میانگین اعداد
📌 پروژه اصلی : محاسبه میانگین لیست اعداد (Python)
✅ خروجی پروژه
📊 نمونه ورودی: اعداد [۱۸, ۲۲, ۳۰, ۱۴, ۲۶]
➤ میانگین محاسبه شده: ۲۲٫۰
💡 توضیح: جمع اعداد = ۱۱۰ | تعداد = ۵ → ۱۱۰/۵ = ۲۲٫۰
➤ میانگین محاسبه شده: ۲۲٫۰
💡 توضیح: جمع اعداد = ۱۱۰ | تعداد = ۵ → ۱۱۰/۵ = ۲۲٫۰
💻 کد پایتون (چپچین، پسزمینه تیره)
def calculate_average(numbers):
"""
تابع میانگین یک لیست از اعداد
"""
if not numbers: # چک کردن لیست خالی
return 0.0
total = sum(numbers) # محاسبه مجموع
count = len(numbers) # تعداد اعضا
average = total / count # تقسیم برای میانگین
return average
# مثال اجرا
my_list = [18, 22, 30, 14, 26]
result = calculate_average(my_list)
print(f"میانگین اعداد {my_list} برابر است با: {result}")
📖 توضیح گام به گام کد (چرا اینگونه نوشتیم؟)
🔹 def calculate_average(numbers): — تعریف تابع با پارامتر numbers (لیست ورودی).
🔹 “”” … “”” — داکاسترینگ برای مستندسازی و خواناتر شدن کد.
🔹 if not numbers: return 0.0 — مدیریت لیست خالی برای جلوگیری از خطای تقسیم بر صفر.
🔹 total = sum(numbers) — تابع内置 sum، جمع کل اعداد را سریع محاسبه میکند.
🔹 count = len(numbers) — تعداد عناصر لیست را میدهد.
🔹 average = total / count — فرمول اصلی میانگین (مجموع / تعداد).
🔹 return average — برگرداندن مقدار میانگین به بخش فراخوان.
🔹 my_list و فراخوانی تابع — تست با اعداد نمونه و چاپ خروجی با f-string.
⚠️ خطاهای رایج در این پروژه و دلیل آنها
❌ IndentationError (تو رفتگی اشتباه): در پایتون بدنه توابع و شرطها باید با فاصله یکسان (چهار اسپیس) شروع شوند. اگر بعد از def یا if تو رفتگی نباشد، خطا میگیرید.
مثال غلط: def avg(): return 5 ← IndentationError
مثال غلط: def avg(): return 5 ← IndentationError
❌ TypeError: اگر به تابع چیزی غیر از لیست عددی (مثل رشته یا None) پاس دهیم، عملگر sum روی نوع داده نامناسب خطا میدهد.
❌ ZeroDivisionError: حذف شرط if not numbers و ارسال لیست خالی → تقسیم بر صفر. مدیریت شد.
❌ NameError: اشتباه در نام تابع حین فراخوانی یا متغیر تعریف نشده.
🧪 تست: آیا آمادهای؟ (پاسخ و کد هر سوال)
اگر بتوانی این سه کد ساده را بدون کمک (در ۱۰ دقیقه) بنویسی، پایتون پایه را بلدی. در زیر حل صحیح هر تمرین با کد چپچین و زمینه تیره آورده شده:
📌 ۱. تابعی که میانگین لیست اعداد را برگرداند
def average_list(nums):
if len(nums) == 0:
return 0
return sum(nums) / len(nums)
# تست
print(average_list([10, 20, 30, 40])) # خروجی: ۲۵٫۰
📌 ۲. برنامه ایجاد فایل متنی و نوشتن سه خط در آن
with open("test_file.txt", "w", encoding="utf-8") as file:
file.write("خط اول: پایتون برای هوش مصنوعی عالی است.\n")
file.write("خط دوم: تمرین روزانه کلید موفقیت است.\n")
file.write("خط سوم: آماده ورود به AI هستم!\n")
print("فایل test_file.txt با موفقیت ساخته شد.")
📌 ۳. چاپ اعداد زوج ۱ تا ۲۰ با حلقه
for i in range(1, 21):
if i % 2 == 0:
print(i, end=" ")
# خروجی: ۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
✅ اگر این سه کد را فهمیده و بدون خطا بنویسید، پایه پایتون شما برای ورود به مباحث هوش مصنوعی و علم داده قوی است.
🎯 ۱۰ پروژه کاربردی برای آمادگی هوش مصنوعی
- 📊 ۱. محاسبه انحراف معیار یک لیست اعداد (بدون numpy)
- 📈 ۲. تابع برای یافتن ماکزیمم و مینیمم لیست (بدون max/min آماده)
- 🗂️ ۳. خواندن فایل CSV شامل نمرات دانشآموزان و محاسبه میانگین هر ستون
- 🔄 ۴. پیادهسازی الگوریتم جستجوی خطی (Linear Search) روی لیست
- 🔁 ۵. تابع بازگشتی فاکتوریل (درک مفهوم بازگشت)
- 🧮 ۶. غربال اعداد اول تا ۱۰۰ و ذخیره در لیست
- 📐 ۷. محاسبه فاصله اقلیدسی بین دو نقطه (پایه الگوریتمهای KNN)
- 📝 ۸. شمارش تعداد تکرار هر کلمه در یک جمله با دیکشنری
- 📅 ۹. ماشین حساب با عملیات +, -, *, / و مدیریت خطای تقسیم بر صفر
- 🎲 ۱۰. شبیهسازی ۱۰۰۰ بار پرتاب تاس و چاپ فراوانی هر عدد
💡 این پروژهها را به ترتیب پیادهسازی کنید و روی تمیزی کد و مدیریت خطا تمرکز نمایید.
📁 پروژه نمونه: خواندن و نوشتن فایل متنی
✅ خروجی پروژه
🧾 ایجاد فایل “data.txt” و نوشتن ۳ خط محتوا …
✔ فایل با موفقیت ذخیره شد.
📖 محتویات فایل:
——————-
خط اول: یادگیری پایتون مقدمه ورود به AI است.
خط دوم: تمرین مداوم باعث پیشرفت میشود.
خط سوم: به جمع دادهکاوان خوش آمدید!
✔ فایل با موفقیت ذخیره شد.
📖 محتویات فایل:
——————-
خط اول: یادگیری پایتون مقدمه ورود به AI است.
خط دوم: تمرین مداوم باعث پیشرفت میشود.
خط سوم: به جمع دادهکاوان خوش آمدید!
کد پایتون (چپچین، پسزمینه تیره)
# نوشتن داخل فایل (حالت write)
with open("data.txt", "w", encoding="utf-8") as f:
f.write("خط اول: یادگیری پایتون مقدمه ورود به AI است.\n")
f.write("خط دوم: تمرین مداوم باعث پیشرفت میشود.\n")
f.write("خط سوم: به جمع دادهکاوان خوش آمدید!\n")
# خواندن و نمایش محتوا
print("محتویات فایل data.txt:")
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
📖 توضیح کد فایل: با استفاده از دستور with open مسیر امن برای بستن خودکار فایل. حالت ‘w’ فایل را میسازد (در صورت وجود بازنویسی). نوشتن سه خط با متد write. در بخش خواندن با حالت ‘r’ کل محتوا را با read() گرفته و چاپ میکنیم. استفاده از encoding=’utf-8′ برای پشتیبانی از حروف فارسی ضروری است.
⚠️ خطاهای احتمالی فایل:
– FileNotFoundError : هنگام خواندن فایلی که وجود ندارد (در حالت ‘r’). راه حل: بررسی وجود یا try/except.
– PermissionError : عدم دسترسی نوشتن در مسیر خاص.
– UnicodeEncodeError : به دلیل عدم تعیین utf-8 هنگام کار با کاراکترهای غیر انگلیسی.
– FileNotFoundError : هنگام خواندن فایلی که وجود ندارد (در حالت ‘r’). راه حل: بررسی وجود یا try/except.
– PermissionError : عدم دسترسی نوشتن در مسیر خاص.
– UnicodeEncodeError : به دلیل عدم تعیین utf-8 هنگام کار با کاراکترهای غیر انگلیسی.
🔁 پروژه حلقه و شرط: چاپ اعداد زوج ۱ تا ۲۰
▶️ اجرای برنامه: اعداد زوج از ۱ تا ۲۰
۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
# روش اول: حلقه for و شرط if
for num in range(1, 21):
if num % 2 == 0:
print(num, end=" ")
# روش دوم: استفاده از step در range (کارآمدتر)
print("\nروش دوم (step): ", end="")
for even in range(2, 21, 2):
print(even, end=" ")
🔹 range(1,21) → تولید اعداد از ۱ تا ۲۰.
🔹 if num % 2 == 0 → عملگر مدولوس، اگر باقیمانده تقسیم بر ۲ صفر باشد، عدد زوج است.
🔹 print(num, end=” “) → چاپ اعداد در یک خط با فاصله به جای خط جدید.
🔹 range(2,21,2) → راه بهینه: از ۲ شروع کن تا قبل ۲۱، گام ۲ (تنها اعداد زوج).
❗ اشتباهات رایج در حلقه زوج:
– فراموش کردن colon (:) بعد از for و if منجر به SyntaxError.
– تو رفتگی نادرست: اگر print همراستای if نباشد، خارج از شرط اجرا شده و همه اعداد چاپ میشوند.
– استفاده از (=) انتساب به جای (==) مقایسه در شرط if → مقداردهی نادرست و خطای منطقی.
– فراموش کردن colon (:) بعد از for و if منجر به SyntaxError.
– تو رفتگی نادرست: اگر print همراستای if نباشد، خارج از شرط اجرا شده و همه اعداد چاپ میشوند.
– استفاده از (=) انتساب به جای (==) مقایسه در شرط if → مقداردهی نادرست و خطای منطقی.
🧠 تابع انعطافپذیر میانگین (آمادگی برای کدنویسی پیشرفته)
میانگین اعداد [۱۵, ۲۵, ۳۵, ۴۵] → ۳۰٫۰
فراخوانی بدون آرگومان (لیست خالی) → ۰٫۰
فراخوانی بدون آرگومان (لیست خالی) → ۰٫۰
def flexible_average(*args):
"""
میانگین هر تعداد عدد یا یک لیست ورودی
"""
if len(args) == 1 and isinstance(args[0], list):
numbers = args[0]
else:
numbers = args
if not numbers:
return 0.0
return sum(numbers) / len(numbers)
# تست ها
print(flexible_average([15, 25, 35, 45])) # لیست
print(flexible_average(10, 20, 30, 40)) # اعداد جداگانه
print(flexible_average()) # بدون ورودی
🔎 توضیح مفهوم *args و انعطاف پذیری: *args به تابع اجازه میدهد تعداد دلخواه آرگومان غیر کلیدی دریافت کند. در این تابع، اگر اولین و تنها ورودی از نوع لیست باشد، آن لیست را به عنوان اعداد در نظر میگیرد. در غیر اینصورت خود اعداد را بعنوان اعضای میانگین محاسبه میکند. مدیریت لیست خالی و عدم ورودی از ZeroDivisionError جلوگیری میکند.
💡 خطاهای رایج با *args : فراموشی isinstance برای تشخیص لیست باعث میشود که ورودی لیست به عنوان یک عنصر تکی در نظر گرفته شود و میانگین اشتباه محاسبه شود. همچنین عدم چک کردن empty args میتواند منجر به خطای تقسیم بر صفر شود.
