🧸 آرایه در پایتون
📦 آرایه یکبعدی چیست؟
آرایه یکبعدی مثل یک صف یا لیست خرید میمونه. فرض کن داری لیست کارهایی که باید انجام بدی رو مینویسی: [“خرید”, “بازی”, “خواب”] . هر کدوم از اینا یک جایگاه داره (شاخص) که از ۰ شروع میشه.
✅ کاربردها: ذخیره نمرات، امتیازهای بازی، اسم شخصیتها، دماهای هفته.
💡 چرا از آرایه یکبعدی استفاده کنیم؟ خیلی راحت میتونیم همه چیز رو یک جا نگه داریم و سریع بهشون دسترسی پیدا کنیم. توی بازی میشه امتیازهای مرحلهها رو توی یک لیست ذخیره کرد!
🗂️ آرایه دوبعدی چیست؟ (مثل جدول شطرنج)
آرایه دو بعدی مثل جدول یا صفحه شطرنج میمونه: سطر و ستون داره. فرض کن نقشه یک بازی رو میخوای بسازی، به هر خونه با یک شماره سطر و ستون میرسی. مثال: مدرسه = [["کلاس۱","کلاس۲"],["راهرو","آزمایشگاه"]]
🎮 کاربردها: بازی دوز (۳×۳)، مار و پله، صفحهی بازی، ذخیره نقشه.
🔧 چرا از آرایه دو بعدی استفاده کنیم؟ چون خیلی از بازیها صفحه دارند و باید مختصات (x,y) رو داشته باشیم. مثلاً توی بازی دوز میدونی هر خونه کجاست.
⚖️ فرق آرایه یکبعدی و دو بعدی
• شکل: خطی مثل صف
• اندیس: فقط یک عدد [i]
• کاربرد: لیست نمرات، امتیازها
• شکل: جدولی سطر و ستون
• اندیس: دو عدد [i][j]
• کاربرد: صفحه بازی، نقشه
🎮 ۱۰ پروژه بازی برای نوجوانان (با توضیح خط به خط)
حدس بزن: ۵۰ 👈 برو بالا
حدس بزن: ۷۵ 👈 برو پایین
🎉 درست! عدد ۶۳ بود. حدسها: [۵۰,۷۵,۶۳]
عدد_راز = random.randint(1,100)
حدس_ها = []
while True:
try:
حدس = int(input(“عدد را حدس بزن: “))
if حدس in حدس_ها:
print(“قبلاً این عدد رو گفتی!”)
continue
حدس_ها.append(حدس)
if حدس == عدد_راز:
print(f”آفرین! عدد {عدد_راز} بود. تعداد حدس: {len(حدس_ها)}”)
break
elif حدس < عدد_راز:
print(“برو بالا ⬆️”)
else:
print(“برو پایین ⬇️”)
except:
print(“لطفاً یک عدد وارد کن”)
•
import random → ابزار تولید عدد تصادفی رو صدا میزنه.•
عدد_راز = random.randint(1,100) → یک عدد بین ۱ تا ۱۰۰ انتخاب میکنه و توی متغیر میذاره.•
حدس_ها = [] → یه آرایه یکبعدی خالی برای نگهداری حدسهای قبلی درست میکنه.•
while True: → یه حلقه بینهایت که تا درست شدن ادامه میده.•
if حدس in حدس_ها: → چک میکنه آیا این عدد قبلاً توی آرایه هست (جستجوی خطی).•
حدس_ها.append(حدس) → عدد جدید رو به آخر آرایه اضافه میکنه.• بقیه شرطها راهنمایی میدن که عدد بزرگتر یا کوچیکتر بگه.
🎁 پله! رفت به ۱۸
🏆 برنده شدی!
خانهها = [۰]*۳۰
خانهها[۳] = ۱۲
خانهها[۱۶] = -۷
مکان = ۰
while مکان < 29:
input(“Enter بزن تا تاس بیندازی…”)
تاس = random.randint(1,6)
print(f”تاس: {تاس}”)
مکان += تاس
if مکان >= ۲۹:
print(“🏆 برنده شدی!”)
break
اثر = خانهها[مکان]
if اثر > ۰:
print(f”پله! میری به {مکان+اثر+۱}”)
مکان += اثر
elif اثر < 0:
print(f”مار! میری به {مکان+اثر+۱}”)
مکان += اثر
print(f”مهره در خانه {مکان+۱}”)
خانهها = [۰]*۳۰ یک آرایه یکبعدی با ۳۰ تا صفر میسازه. با خانهها[۳] = ۱۲ یعنی هر کی برسه به خونه ۳ (اندیس ۳) پله +۱۲ تا میره بالا. حلقه while تا وقتی که مهره به انتها نرسه، تاس میندازه. اثر خانه فعلی رو از آرایه میخونه و مهره رو جابجا میکنه.
—+—+—
O | X |
—+—+—
O | |
🏆 بازیکن X برنده شد!
def نمايش():
for سطر in board:
print(“|”.join(سطر))
print(“—“)
def برنده(نشان):
for i in range(3):
if all(board[i][j] == نشان for j in range(3)): return True
if all(board[j][i] == نشان for j in range(3)): return True
if board[0][0]==board[1][1]==board[2][2]==نشان: return True
if board[0][2]==board[1][1]==board[2][0]==نشان: return True
return False
بازیکن = “X”
for _ in range(9):
نمايش()
سطر = int(input(f”بازیکن {بازیکن} – سطر (۰,۱,۲): “))
ستون = int(input(“ستون (۰,۱,۲): “))
if board[سطر][ستون] == ” “:
board[سطر][ستون] = بازیکن
if برنده(بازیکن):
نمايش()
print(f”🎉 برنده {بازیکن} شد”)
break
بازیکن = “O” if بازیکن == “X” else “X”
else:
print(“این خونه پر شده”)
else:
print(“مساوی”)
board = [[" " for _ in range(3)] for _ in range(3)] یک جدول ۳×۳ میسازه. هر خونه با board[سطر][ستون] در دسترسه. تابع برنده با چک کردن سطرها، ستونها و قطرها از آرایه دوبعدی میفهمه چه کسی برنده شده.
امتیاز ۵۶۰ → رتبه ۳
چپ = ۰
راست = len(arr)-1
while چپ <= راست:
وسط = (چپ + راست)//۲
if arr[وسط] == هدف:
return وسط
elif arr[وسط] < هدف:
چپ = وسط + ۱
else:
راست = وسط – ۱
return -1
امتیازها = [۱۲۰, ۳۴۰, ۵۶۰, ۷۸۰, ۹۰۰]
چاپ(“لیست مرتب:”, امتیازها)
امتیاز_کاربر = int(input(“امتیاز خود را وارد کن: “))
نتیجه = جستجوی_دودویی(امتیازها, امتیاز_کاربر)
if نتیجه != -۱:
print(f”امتیاز {امتیاز_کاربر} در جایگاه {نتیجه+۱} است”)
else:
print(“پیدا نشد”)
B = [[2,0],[1,2]]
نتیجه = [[۰,۰],[۰,۰]]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
نتیجه[i][j] += A[i][k] * B[k][j]
print(“حاصل ضرب:”)
for سطر in نتیجه:
print(سطر)
حرف “ل”: آفرین! _ ا ل _ _
شما برنده شدید!
حروف_نمایش = [“_”] * len(کلمه)
جان = ۶
while جان > ۰ and “_” in حروف_نمایش:
print(” “.join(حروف_نمایش))
حرف = input(“یک حرف بزن: “)
پیدا_شد = False
for i,ch in enumerate(کلمه):
if ch == حرف:
حروف_نمایش[i] = حرف
پیدا_شد = True
if not پیدا_شد:
جان -= ۱
print(f”غلط! جانهای باقی: {جان}”)
if “_” not in حروف_نمایش:
print(f”🎉 بردی! کلمه {کلمه} بود”)
حروف_نمایش = ["_"] * len(کلمه) یه آرایه به تعداد حروف کلمه درست میکنه که جای خالی نشون بده. حلقه for با enumerate هم اندیس و هم حرف رو میده. اگر حرف کاربر توی کلمه باشه، همون جای آرایه عوض میشه.
اسب_x, اسب_y = 2,2
board[اسب_x][اسب_y] = “♞”
def نمایش():
for سطر in board: print(” “.join(سطر))
نمایش()
حرکات = [(۲,۱),(۲,-۱),(-۲,۱),(-۲,-۱),(۱,۲),(۱,-۲),(-۱,۲),(-۱,-۲)]
جدید_x = int(input(“x جدید (۰-۴): “))
جدید_y = int(input(“y جدید (۰-۴): “))
if (جدید_x-اسب_x, جدید_y-اسب_y) in حرکات and 0<=جدید_x<5 and 0<=جدید_y<5:
board[اسب_x][اسب_y] = “.”
board[جدید_x][جدید_y] = “♞”
print(“حرکت کرد ✅”)
else:
print(“حرکت غیرمجاز ❌”)
نمایش()
board[اسب_x][اسب_y] به جایگاه اسب دسترسی داریم. حرکات مجاز اسب به صورت لیستی از تاپلها ذخیره شده. اگه تفاوت مختصات جدید با قدیم توی لیست حرکات باشه، حرکت مجازه.
جستجوی ‘بهمن’ ✅ پیدا شد
قهرمانان.sort()
print(“لیست مرتب:”, قهرمانان)
def جستجوی_دودویی_اسم(آرایه, هدف):
چپ, راست = ۰, len(آرایه)-۱
while چپ <= راست:
وسط = (چپ+راست)//۲
if آرایه[وسط] == هدف: return وسط
elif آرایه[وسط] < هدف: چپ = وسط+1
else: راست = وسط-۱
return -1
اسم = input(“اسم قهرمان را بگو: “)
اندیس = جستجوی_دودویی_اسم(قهرمانان, اسم)
if اندیس != -۱:
print(f”{اسم} توی جایگاه {اندیس+۱} هست”)
else:
print(“توی لیست نیست”)
sort() آرایه یکبعدی رو مرتب میکنیم. جستجوی دودویی فقط روی آرایه مرتب کار میکنه و خیلی سریع اسم رو پیدا میکنه.
۱ – بمب: ۲۰۰ سکه
مجموع: ۳۰۰ سکه
سبد_خرید = []
while True:
for i, آیتم in enumerate(منو):
print(f”{i} – {آیتم[۰]} : {آیتم[۱]} سکه”)
انتخاب = input(“کد کالا یا Enter برای خروج: “)
if انتخاب == “”:
break
کد = int(انتخاب)
if 0 <= کد < len(منو):
سبد_خرید.append(منو[کد][۱])
print(f”{منو[کد][۰]} به سبد اضافه شد”)
else:
print(“کد اشتباه”)
print(f”💰 مجموع: {sum(سبد_خرید)} سکه”)
منو[کد][۰] و قیمت با منو[کد][۱]. سبد خرید یک آرایه یک بعدی از قیمتهاست.
امتیاز شما ۶۰۰ ➡️ رتبه ۳
امتیازها.sort(reverse=True)
print(“امتیازهای برتر:”, امتیازها)
امتیاز_من = int(input(“امتیاز خود را وارد کن: “))
رتبه = ۱
for ام in امتیازها:
if امتیاز_من >= ام:
break
رتبه += ۱
print(f”🏅 رتبه شما: {رتبه}”)
⚠️ خطاهای رایج (اشتباهات معمولی که ممکنه ببینی)
❌ ۱. خطای تو رفتگی (IndentationError): یادت باشه بعد از if، for یا while باید حتماً ۴ تا فاصله یا Tab بزنی. همه خطوط داخل بلوک باید یکسان شروع بشن.
❌ ۲. فراموش کردن پرانتز یا براکت: مثلاً print("سلام پرانتز بسته نشده! یا آرایه رو بدون براکت بسته میذاری my_list = [1,2,3. همیشه جفت پرانتز و براکت رو چک کن.
❌ ۳. کاما یادت بره توی لیست: n = [10 20 30] کاما نداره → ارور میده. درستش: [۱۰,۲۰,۳۰]
❌ ۴. IndexError (اندیس خارج از محدوده): مثلاً لیست ۵ تایی داری و مینویسی my_list[5] آخرین اندیس ۴ هست. همیشه طول لیست رو با len() چک کن.
✅ راه حل کلی: کدها رو آروم آروم بنویس، از ادیتور خوب استفاده کن، خطاها رو بخون، پیام خطا بهت میگه کجای کار ایراد داره.
