🐍 آموزش کامل آرایه یکبعدی در پایتون
❓ چرا از آرایه یکبعدی در پایتون استفاده میکنیم؟
📌 تصور کن: میخواهی نمرات ۱۰۰ دانشآموز را ذخیره کنی. بدون آرایه باید ۱۰۰ متغیر جداگانه بسازی! 😱
- ✅ صرفهجویی در حافظه و زمان: به جای ۱۰۰ متغیر، یک متغیر آرایه
- ✅ دسترسی آسان با حلقهها: با یک حلقه میتوان به همه اعضا دسترسی داشت
- ✅ مرتبسازی و جستجوی سریع: متدهای آماده مثل
sort()وindex() - ✅ ذخیره دادههای همجنس: نمرات، اسامی، امتیازات بازی، موقعیتها و…
- ✅ پایه و اساس ساختمان دادههای پیشرفته: ماتریسها (آرایه دو بعدی)، صف، پشته و…
- ✅ مدیریت بهتر اطلاعات: جمعآوری، تحلیل و نمایش دادهها
# مقایسه: بدون آرایه vs با آرایه # ❌ بدون آرایه (کد بد) نمره۱ = ۱۸ نمره۲ = ۱۵ نمره۳ = ۱۹ نمره۴ = ۱۴ نمره۵ = ۱۷ # برای ۱۰۰ دانشآموز غیرممکن! # ✅ با آرایه (کد خوب) نمرات = [۱۸, ۱۵, ۱۹, ۱۴, ۱۷] # حالا به راحتی میتوانیم: print(sum(نمرات)) # مجموع print(max(نمرات)) # بیشترین print(len(نمرات)) # تعداد
🎮 ۱۰ بازی جذاب برای نوجوانان با استفاده از آرایه یکبعدی
🎯 بازی ۱: حدس عدد مخفی (تک نفره)
کامپیوتر یک عدد تصادفی در آرایه انتخاب میکند و کاربر باید حدس بزند.
# بازی حدس عدد مخفی
import random
import time
print("🎮 ===== بازی حدس عدد مخفی ===== 🎮")
print("کامپیوتر یک عدد بین ۱ تا ۱۰۰ انتخاب کرده!")
اعداد_مجاز = list(range(1, 101)) # آرایه اعداد ۱ تا ۱۰۰
عدد_مخفی = random.choice(اعداد_مجاز)
تعداد_حدس = ۰
حداکثر_حدس = ۱۰
while تعداد_حدس < حداکثر_حدس:
try:
حدس = int(input(f"\n🔢 حدس شما (حدس {تعداد_حدس+1}/{حداکثر_حدس}): "))
تعداد_حدس += 1
if حدس < عدد_مخفی:
print("📈 برو بالا! عدد بزرگتر است.")
elif حدس > عدد_مخفی:
print("📉 بیا پایین! عدد کوچکتر است.")
else:
print(f"🎉 آفرین! در {تعداد_حدس} حدس زدی! عدد {عدد_مخفی} بود.")
break
except ValueError:
print("❌ لطفاً یک عدد وارد کن!")
if تعداد_حدس == حداکثر_حدس and حدس != عدد_مخفی:
print(f"💀 باختی! عدد مخفی {عدد_مخفی} بود.")
🏆 بازی ۲: مسابقه سرعت تایپ
کلمات از آرایه انتخاب میشوند و کاربر باید سریع تایپ کند.
# مسابقه سرعت تایپ
import random
import time
print("🏆 ===== مسابقه سرعت تایپ ===== 🏆")
کلمات = ["پایتون", "برنامهنویسی", "کامپیوتر", "الگوریتم", "داده", "آرایه", "بازی", "هوش مصنوعی"]
امتیاز = ۰
print(f"\n📝 {len(کلمات)} کلمه برای تایپ داری!")
print("هر کلمه رو درست تایپ کنی ۱۰ امتیاز میگیری!\n")
for i, کلمه in enumerate(کلمات, ۱):
print(f"کلمه {i}: {کلمه}")
شروع = time.time()
پاسخ = input("تایپ کن: ")
پایان = time.time()
if پاسخ == کلمه:
زمان = پایان - شروع
if زمان < 2:
امتیاز += 15
print(f"✅ عالی! {زمان:.1f} ثانیه - 15 امتیاز")
elif زمان < 4:
امتیاز += 10
print(f"✅ خوب! {زمان:.1f} ثانیه - 10 امتیاز")
else:
امتیاز += 5
print(f"✅ قبول! {زمان:.1f} ثانیه - 5 امتیاز")
else:
print(f"❌ اشتباه! کلمه درست: {کلمه}")
print("-" * 30)
print(f"\n🎯 امتیاز نهایی شما: {امتیاز} از {len(کلمات)*15}")
🎲 بازی ۳: شبیهساز تاس (چند تاس)
تعداد تاس و تعداد پرتاب را انتخاب کن و نتایج را در آرایه ببین.
# شبیهساز تاس
import random
print("🎲 ===== شبیهساز تاس ===== 🎲")
تعداد_تاس = int(input("چند تاس میخوای بریزی؟ "))
تعداد_پرتاب = int(input("چند بار پرتاب کنم؟ "))
for پرتاب in range(1, تعداد_پرتاب + ۱):
نتایج = [random.randint(1, 6) for _ in range(تعداد_تاس)]
print(f"پرتاب {پرتاب}: {نتایج} = مجموع {sum(نتایج)}")
# نمایش به صورت ستاره
print(" ", end="")
for نتیجه in نتایج:
print("⭐" * نتیجه, end=" ")
print()
🧩 بازی ۴: حافظه تصویری (پیدا کردن جفتها)
آرایهای از کارتها بساز و کاربر باید جفتها را پیدا کند.
# بازی حافظه (نسخه ساده)
import random
print("🧩 ===== بازی حافظه ===== 🧩")
کارتها = ['🐱', '🐶', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼']
کارتها = کارتها * ۲ # هر کارت دو بار
random.shuffle(کارتها)
print("آرایه کارتها:")
print("اندیس:", list(range(len(کارتها))))
print("کارتها مخفی هستند! (با اندیس انتخاب کن)")
کارت_باز = ['❓'] * len(کارتها)
امتیاز = ۰
while امتیاز < len(کارتها) // 2:
print("\nوضعیت فعلی:", ' '.join(کارت_باز))
try:
انتخاب1 = int(input("اندیس کارت اول: "))
انتخاب2 = int(input("اندیس کارت دوم: "))
if کارتها[انتخاب1] == کارتها[انتخاب2] and انتخاب1 != انتخاب2:
کارت_باز[انتخاب1] = کارتها[انتخاب1]
کارت_باز[انتخاب2] = کارتها[انتخاب2]
امتیاز += 1
print(f"✅ جفت پیدا شد! امتیاز: {امتیاز}")
else:
print("❌ جفت نیست! دقت کن")
print(f"کارت اول: {کارتها[انتخاب1]}, کارت دوم: {کارتها[انتخاب2]}")
except (ValueError, IndexError):
print("❌ اندیس نامعتبر! بین 0 تا", len(کارتها)-1, "انتخاب کن")
print(f"\n🎉 بردی! کارتها: {' '.join(کارت_باز)}")
🎯 بازی ۵: پرتاب دارت (محاسبه امتیاز)
پرتابهای دارت را در آرایه ذخیره کن و امتیاز کل را حساب کن.
# بازی پرتاب دارت
import random
print("🎯 ===== بازی پرتاب دارت ===== 🎯")
پرتابها = []
امتیازات = []
for i in range(5):
print(f"\nپرتاب {i+1}:")
input("Enter بزن تا پرتاب کنی...")
x = random.randint(-10, 10)
y = random.randint(-10, 10)
فاصله = (x**2 + y**2)**0.5
if فاصله <= 3:
امتیاز = 10
پیام = "🎯 بولزآی! 10 امتیاز"
elif فاصله <= 6:
امتیاز = 7
پیام = "👍 خوب! 7 امتیاز"
elif فاصله <= 9:
امتیاز = 4
پیام = "👌 متوسط! 4 امتیاز"
else:
امتیاز = 1
پیام = "😢 نزدیک بود! 1 امتیاز"
پرتابها.append((x, y))
امتیازات.append(امتیاز)
print(f"موقعیت: ({x},{y}) - فاصله: {فاصله:.1f}")
print(پیام)
print("\n📊 گزارش نهایی:")
print(f"موقعیتها: {پرتابها}")
print(f"امتیازات: {امتیازات}")
print(f"🎯 امتیاز کل: {sum(امتیازات)} از 50")
🃏 بازی ۶: ورق بازی (مقایسه کارتها)
دو بازیکن ورق میکشند و هر کی کارت بزرگتر داشته باشد میبرد.
# بازی ورق (مقایسه کارتها)
import random
print("🃏 ===== بازی ورق ===== 🃏")
عصا = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
ارزش = {'A':14, 'K':13, 'Q':12, 'J':11, '10':10, '9':9, '8':8, '7':7, '6':6, '5':5, '4':4, '3':3, '2':2}
random.shuffle(عصا)
کارتها = عصا[:۱۰] # ۱۰ کارت اول
امتیاز_بازیکن۱ = ۰
امتیاز_بازیکن۲ = ۰
for i in range(0, len(کارتها), ۲):
if i+1 >= len(کارتها):
break
کارت۱ = کارتها[i]
کارت۲ = کارتها[i+1]
print(f"\nدور {i//2 + 1}: بازیکن۱: {کارت۱} | بازیکن۲: {کارت۲}")
if ارزش[کارت۱] > ارزش[کارت۲]:
امتیاز_بازیکن۱ += ۱
print("✅ بازیکن ۱ برد!")
elif ارزش[کارت۱] < ارزش[کارت2]:
امتیاز_بازیکن2 += 1
print("✅ بازیکن 2 برد!")
else:
print("🤝 مساوی شد!")
print(f"\n🏆 نتیجه نهایی: بازیکن1 {امتیاز_بازیکن1} - {امتیاز_بازیکن2} بازیکن2")
if امتیاز_بازیکن1 > امتیاز_بازیکن۲:
print("🎉 بازیکن ۱ قهرمان شد!")
elif امتیاز_بازیکن۱ < امتیاز_بازیکن2:
print("🎉 بازیکن 2 قهرمان شد!")
else:
print("🤝 بازی مساوی شد!")
📜 بازی ۷: رمزگشایی پیام مخفی
یک آرایه رمزگذاری شده و کلید رمزگشایی در آرایه دیگر.
# رمزگشایی پیام مخفی
import random
print("📜 ===== رمزگشایی پیام مخفی ===== 📜")
الفبا = list('abcdefghijklmnopqrstuvwxyz')
random.shuffle(الفبا)
کلید = dict(zip(الفبا, list('abcdefghijklmnopqrstuvwxyz')))
پیام_اصلی = "pythonisfun"
پیام_رمز = ''.join([کلید.get(ح, ح) for ح in پیام_اصلی])
print(f"پیام رمز شده: {پیام_رمز}")
print("آرایه رمزگشایی:")
فرهنگ = list(کلید.items())
for i in range(len(فرهنگ)):
print(f"{فرهنگ[i][0]} → {فرهنگ[i][1]}")
حدس = input("\nپیام اصلی رو حدس بزن: ")
if حدس == پیام_اصلی:
print("🎉 آفرین! رمز رو شکستی!")
else:
print(f"💀 اشتباه! پیام اصلی: {پیام_اصلی}")
🌟 بازی ۸: جدول امتیازات (ذخیره و نمایش)
یک آرایه برای ذخیره امتیازات بازیکنان و مرتبسازی.
# جدول امتیازات
import random
print("🌟 ===== جدول امتیازات ===== 🌟")
امتیازات = []
while True:
print("\n1. ثبت امتیاز جدید")
print("2. نمایش جدول")
print("3. حذف آخرین امتیاز")
print("4. خروج")
انتخاب = input("انتخاب کن: ")
if انتخاب == '۱':
نام = input("نام بازیکن: ")
امتیاز = random.randint(0, 100)
امتیازات.append([نام, امتیاز])
print(f"✅ امتیاز {امتیاز} برای {نام} ثبت شد!")
elif انتخاب == '۲':
if not امتیازات:
print("📭 هنوز امتیازی ثبت نشده!")
else:
مرتب_شده = sorted(امتیازات, key=lambda x: x[1], reverse=True)
print("\n🏆 جدول امتیازات (بهترینها اول):")
for i, (نام, امتیاز) in enumerate(مرتب_شده, ۱):
مدال = {۱:"🥇", ۲:"🥈", ۳:"🥉"}.get(i, "📌")
print(f"{مدال} {i}. {نام}: {امتیاز} امتیاز")
elif انتخاب == '۳':
if امتیازات:
حذف_شده = امتیازات.pop()
print(f"🗑️ امتیاز {حذف_شده[۱]} مربوط به {حذف_شده[۰]} حذف شد!")
else:
print("چیزی برای حذف نیست!")
elif انتخاب == '۴':
print("خداحافظ!")
break
else:
print("❌ انتخاب نامعتبر!")
🚀 بازی ۹: حرکت کاراکتر در نقشه (موقعیتیابی)
یک آرایه نقشه خطی بساز و کاراکتر را حرکت بده.
# حرکت کاراکتر در نقشه خطی
import os
print("🚀 ===== حرکت کاراکتر در نقشه ===== 🚀")
نقشه = ['🏠', '🌲', '🌲', '🌲', '💎', '🌲', '🏁']
موقعیت = ۰ # ایندکس فعلی
while True:
os.system('cls' if os.name == 'nt' else 'clear')
# نمایش نقشه
for i, خانه in enumerate(نقشه):
if i == موقعیت:
print(f"[🧑 {خانه}]", end=" ")
else:
print(f"[{خانه}]", end=" ")
print(f"\n📍 موقعیت: {موقعیت+۱}/{len(نقشه)}")
if نقشه[موقعیت] == '💎':
print("🎉 گنج پیدا کردی! +۵۰ امتیاز")
elif نقشه[موقعیت] == '🏁':
print("🏆 به خط پایان رسیدی! بردی!")
break
حرکت = input("⬅️ (a) چپ | ➡️ (d) راست | (q) خروج: ").lower()
if حرکت == 'a' and موقعیت > ۰:
موقعیت -= ۱
elif حرکت == 'd' and موقعیت < len(نقشه)-1:
موقعیت += 1
elif حرکت == 'q':
print("بازی رو بستی!")
break
else:
print("حرکت نامعتبر!")
🎪 بازی ۱۰: شبیهساز قرعهکشی (جوایز)
یک آرایه از جوایز و یک آرایه از اسامی برندگان.
# شبیهساز قرعهکشی
import random
print("🎪 ===== شبیهساز قرعهکشی ===== 🎪")
جوایز = ["📱 گوشی", "💻 لپتاپ", "🎧 هدفون", "⌚ ساعت هوشمند", "🎮 کنسول بازی", "📚 کتاب", "🍔 همبرگر", "🎫 بلیط سینما"]
شرکت_کنندگان = ["علی", "سارا", "رضا", "زهرا", "مهدی", "نرگس", "حسین", "فاطمه", "امیر", "مریم"]
print(f"🎁 جوایز موجود: {len(جوایز)} جایزه")
print(f"👥 شرکتکنندگان: {len(شرکت_کنندگان)} نفر")
تعداد_برنده = int(input("چند برنده انتخاب کنم؟ "))
if تعداد_برنده > len(شرکت_کنندگان):
تعداد_برنده = len(شرکت_کنندگان)
برندگان = []
جایزه_های_برنده = []
for i in range(تعداد_برنده):
برنده = random.choice(شرکت_کنندگان)
جایزه = random.choice(جوایز)
برندگان.append(برنده)
جایزه_های_برنده.append(جایزه)
شرکت_کنندگان.remove(برنده)
جوایز.remove(جایزه)
print("\n🏆 نتایج قرعهکشی:")
for i in range(len(برندگان)):
print(f"{i+1}. {برندگان[i]} → {جایزه_های_برنده[i]} 🎉")
print(f"\n📊 آرایه برندگان: {برندگان}")
print(f"🎁 آرایه جوایز: {جایزه_های_برنده}")
⚠️ خطاهای رایج در پایتون (حواست به اینا باشه!)
🔴 ۱. خطای تو رفتگی (IndentationError)
❌ کد اشتباه:
for i in range(5): print(i) # این خط ارور میده! باید فاصله داشته باشه
✅ کد درست:
for i in range(5):
print(i) # 4 تا فاصله (یا Tab) قبل از print
💡 راه حل: در پایتون، فاصلهگذاری (Indentation) مهم است! بعد از : باید حتماً تو رفتگی داشته باشی.
🔴 ۲. خطای پرانتز (SyntaxError: Missing parentheses)
❌ کد اشتباه:
print "سلام" # در پایتون ۳ پرانتز لازمه if x > 5 # یادت رفت پرانتز بذاری
✅ کد درست:
print("سلام")
if (x > 5): # پرانتز اختیاری ولی خوبه
💡 راه حل: همیشه پرانتزها رو جفت ببند!
() و [] و {}.
🔴 ۳. خطای کاما (SyntaxError: invalid syntax)
❌ کد اشتباه:
نمرات = [۱۸, ۱۵, ۱۹ ۱۴, ۱۷] # بین ۱۹ و ۱۴ کاما نیست
print("نمرات" نمرات) # بین دو پارامتر کاما نیست
✅ کد درست:
نمرات = [۱۸, ۱۵, ۱۹, ۱۴, ۱۷]
print("نمرات", نمرات)
🔴 ۴. خطای براکت (IndexError: list index out of range)
❌ کد اشتباه:
آرایه = [۱۰, ۲۰, ۳۰] print(آرایه[۳]) # فقط ایندکس ۰،۱،۲ وجود دارد!
✅ کد درست:
آرایه = [۱۰, ۲۰, ۳۰]
if len(آرایه) > ۳:
print(آرایه[۳])
else:
print(f"فقط {len(آرایه)} عضو وجود دارد")
💡 نکته: ایندکس آرایه از ۰ شروع میشود! آخرین ایندکس =
len(آرایه)-۱
🔴 ۵. خطای نوع داده (TypeError)
❌ کد اشتباه:
نمرات = [۱۸, ۱۵, "۱۹", ۱۴] # "۱۹" یک رشته است نه عدد مجموع = sum(نمرات) # ارور میده چون رشته با عدد جمع نمیشه
✅ کد درست:
نمرات = [۱۸, ۱۵, ۱۹, ۱۴]
# یا تبدیل رشته به عدد:
نمرات = [۱۸, ۱۵, int("19"), 14]
🔴 ۶. خطای دو نقطه (SyntaxError: invalid syntax)
❌ کد اشتباه:
if x > 5 # یادت رفت : بذاری
print(x)
for i in range(10) # اینجا هم : لازمه
print(i)
✅ کد درست:
if x > 5:
print(x)
for i in range(10):
print(i)
🔴 ۷. خطای متغیر تعریف نشده (NameError)
❌ کد اشتباه:
نمرات = [۱۸, ۱۵, ۱۹] print(نمرات[اندیس]) # اندیس تعریف نشده!
✅ کد درست:
نمرات = [۱۸, ۱۵, ۱۹] اندیس = ۱ print(نمرات[اندیس]) # خروجی: ۱۵
🔴 ۸. خطای کوتیشن (EOL while scanning string literal)
❌ کد اشتباه:
پیام = 'سلام دنیا # کوتیشن بسته نشده نام = "علی # همینطور
✅ کد درست:
پیام = 'سلام دنیا' نام = "علی"
💡 نکته: همیشه کوتیشنها رو جفت ببند!
'...' یا "..."
🔴 ۹. خطای تبدیل نوع (ValueError)
❌ کد اشتباه:
عدد = int(input("یک عدد وارد کن: ")) # اگر کاربر "سلام" وارد کند ارور میده
✅ کد درست:
try:
عدد = int(input("یک عدد وارد کن: "))
except ValueError:
print("❌ لطفاً یک عدد واقعی وارد کن!")
🔴 ۱۰. خطای append روی متغیر غیرلیست (AttributeError)
❌ کد اشتباه:
نمرات = ۵ نمرات.append(10) # عدد متد append ندارد!
✅ کد درست:
نمرات = [] نمرات.append(10) # یا نمرات = [۵] نمرات.append(10)
📋 جدول خلاصه خطاهای رایج
| نام خطا | علت | راه حل |
|---|---|---|
| IndentationError | تو رفتگی اشتباه | بعد از : حتماً ۴ فاصله یا Tab بزن |
| SyntaxError | نقص در دستور (پرانتز، کاما، 🙂 | خطا رو خونده و جای خالی رو پر کن |
| IndexError | ایندکس خارج از محدوده | قبل از دسترسی چک کن len() |
| TypeError | نوع داده اشتباه | از تبدیل نوع مثل int() استفاده کن |
| NameError | متغیر تعریف نشده | حتماً اول متغیر رو تعریف کن |
| ValueError | تبدیل نوع ناموفق | از try/except استفاده کن |
🛠️ ترفندهای عیبیابی (Debugging)
- 📌 خطا رو با دقت بخون! پایتون دقیقاً میگوید کجا خطا داره.
- 📌 از
print()استفاده کن تا مقدار متغیرها رو ببینی. - 📌 از
type()استفاده کن تا ببینی متغیر چه نوع دادهای دارد. - 📌 از
len()استفاده کن تا ببینی آرایه چند عضو دارد. - 📌 کدت رو گام به گام اجرا کن (حتماً کامنت بذار).
- 📌 از try/except برای مدیریت خطاها استفاده کن.
📌 جمعبندی: چرا باید آرایه بلد باشیم؟
- ✅ آرایهها پایه و اساس ساختمان دادهها هستند.
- ✅ همه بازیها و اپلیکیشنهای واقعی از آرایه استفاده میکنند.
- ✅ با آرایه میتونی دادههای زیاد رو مدیریت کنی.
- ✅ آمادهسازی برای مباحث پیشرفتهتر مثل یادگیری ماشین و هوش مصنوعی.
🎮 حالا نوبت توئه! 🎮
یکی از بازیها رو انتخاب کن و کدش رو اجرا کن!
بعد خودت تغییرات بده و بازی خودت رو بساز!
💻 برنامهنویسی ! 🐍
