Python
5 subscribers
14 photos
10 videos
94 links
ف
Download Telegram
Forwarded from Python3
🔤 آموزش کامل متدهای کار با رشته‌ها در پایتون 🔤

سلام دوستان! امروز قصد دارم درباره‌ی متدهای مختلف کار با رشته‌ها در زبان برنامه‌نویسی پایتون صحبت کنم. رشته‌ها یکی از پرکاربردترین نوع داده‌ها در پایتون هستند و آشنایی با متدهای آن‌ها می‌تواند کدنویسی را بسیار ساده‌تر کند. بیایید شروع کنیم! 🚀

1. lower()
این متد تمام حروف رشته را به حروف کوچک تبدیل می‌کند.

text = "Hello, WORLD!"
print(text.lower()) # خروجی: hello, world!

2. upper()
این متد تمام حروف رشته را به حروف بزرگ تبدیل می‌کند.

text = "Hello, world!"
print(text.upper()) # خروجی: HELLO, WORLD!

3. capitalize()
این متد حرف اول رشته را به حروف بزرگ و بقیه را به حروف کوچک تبدیل می‌کند.

text = "hello, world!"
print(text.capitalize()) # خروجی: Hello, world!

4. title()
این متد حرف اول هر کلمه در رشته را به حروف بزرگ تبدیل می‌کند.

text = "hello, world!"
print(text.title()) # خروجی: Hello, World!

5. strip()
این متد فاصله‌های خالی در ابتدای و انتهای رشته را حذف می‌کند.

text = "  hello, world!  "
print(text.strip()) # خروجی: hello, world!

6. startswith()
این متد بررسی می‌کند که آیا رشته با زیررشته‌ی خاصی شروع می‌شود یا نه.

text = "hello, world!"
print(text.startswith("hello")) # خروجی: True

7. endswith()
این متد بررسی می‌کند که آیا رشته با زیررشته‌ی خاصی پایان می‌یابد یا نه.

text = "hello, world!"
print(text.endswith("world!")) # خروجی: True

8. replace()
این متد یک زیررشته را با زیررشته‌ای دیگر در رشته جایگزین می‌کند.

text = "hello, world!"
print(text.replace("world", "Python")) # خروجی: hello, Python!

9. split()
این متد رشته را بر اساس یک جداکننده خاص جدا کرده و به لیست تبدیل می‌کند.

text = "one, two, three"
print(text.split(", ")) # خروجی: ['one', 'two', 'three']

10. join()
این متد عناصر یک لیست را با استفاده از یک جداکننده خاص به یکدیگر متصل می‌کند.

items = ['one', 'two', 'three']
print(", ".join(items)) # خروجی: one, two, three

11. find()
این متد اولین موقعیت یک زیررشته را در رشته پیدا می‌کند. اگر زیررشته وجود نداشته باشد، -1 برمی‌گرداند.

text = "hello, world!"
print(text.find("world")) # خروجی: 7

12. index()
این متد اولین موقعیت یک زیررشته را در رشته پیدا می‌کند. اگر زیررشته وجود نداشته باشد، خطا برمی‌گرداند.

text = "hello, world!"
print(text.index("world")) # خروجی: 7

13. count()
این متد تعداد تکرار یک زیررشته در رشته را شمارش می‌کند.

text = "hello, world! hello again!"
print(text.count("hello")) # خروجی: 2

14. isnumeric()
این متد بررسی می‌کند که آیا همه کاراکترهای رشته اعداد هستند یا نه.

text = "12345"
print(text.isnumeric()) # خروجی: True

15. zfill()
این متد طول رشته را به طول مشخصی می‌رساند و با اضافه کردن صفر از سمت چپ، رشته را پر می‌کند.

text = "42"
print(text.zfill(5)) # خروجی: 00042

16. swapcase()
این متد حروف بزرگ را به کوچک و حروف کوچک را به بزرگ تبدیل می‌کند.

text = "Hello, World!"
print(text.swapcase()) # خروجی: hELLO, wORLD!

17. format()
این متد رشته‌ها را با استفاده از جایگزینی قالب‌بندی می‌کند.

name = "Alice"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
# خروجی: My name is Alice and I am 30 years old.

18. rjust()
این متد رشته را به طول مشخصی می‌رساند و از سمت چپ با کاراکتر خاصی پر می‌کند.

text = "42"
print(text.rjust(5, '0')) # خروجی: 00042

19. ljust()
این متد رشته را به طول مشخصی می‌رساند و از سمت راست با کاراکتر خاصی پر می‌کند.

text = "42"
print(text.ljust(5, '0')) # خروجی: 42000

این هم از متدهای کار با رشته‌ها در پایتون! امیدوارم این آموزش براتون مفید باشه و ازش استفاده کنید. هر سوالی داشتید، حتما بپرسید. 😊

🔻برای بیشتر یاد گرفتن اینجا کلیک کن

#Python #Programming #Coding #Strings #Learning #PythonTips
Forwarded from Python3
ساخت کلاس و متدها در پایتون

ابتدا یک کلاس ساده به نام Car تعریف می‌کنیم و چند متد برای آن ایجاد می‌کنیم.

class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year

def start_engine(self):
print(f"The engine of the {self.brand} {self.model} is now running.")

def stop_engine(self):
print(f"The engine of the {self.brand} {self.model} has been turned off.")

def honk(self):
print("Beep beep!")

def display_info(self):
print(f"Car Info: {self.brand} {self.model}, Year: {self.year}")

توضیحشinitit__ یک متد ویژه است که به عنوان سازنده (constructor) کلاس عمل می‌کند و هنگام ایجاد یک شیء از کلاس فراخوانی می‌شود. این متد برای مقداردهی اولیه به متغیرهای نمونه (instance variables) استفاده می‌شود.
- start_engine یک متد معمولی است که پیام شروع به کار موتور را چاپ می‌کند.
- stop_engine یک متد معمولی است که پیام خاموش شدن موتور را چاپ می‌کند.
- honk یک متد معمولی است که صدای بوق را چاپ می‌کند.
- display_info یک متد معمولی است که اطلاعات خودرو را چاپ می‌کند.

استفاده از کلاس و متدها

حال می‌توانیم از کلاس Car استفاده کنیم و متدهای آن را فراخوانی کنیم.

if __name__ == "__main__":
my_car = Car("Toyota", "Corolla", 2020)
my_car.start_engine() # خروجی: The engine of the Toyota Corolla is now running.
my_car.honk() # خروجی: Beep beep!
my_car.display_info() # خروجی: Car Info: Toyota Corolla, Year: 2020
my_car.stop_engine() # خروجی: The engine of the Toyota Corolla has been turned off.

توضیحش

- با استفاده از Car("Toyota", "Corolla", 2020) یک شیء جدید از کلاس Car با نام my_car ایجاد می‌کنیم.
- سپس متدهای مختلف را با استفاده از my_car فراخوانی می‌کنیم.

نکات مهم

1. متدهای یک کلاس همیشه باید حداقل یک پارامتر داشته باشند که به طور معمول self نامیده می‌شود. این پارامتر به شیء فعلی اشاره دارد.
2. شما می‌توانید متدهای کلاس را برای انجام هر عملیاتی که می‌خواهید تعریف کنید. این متدها می‌توانند پارامترهای اضافی داشته باشند و هر عملیاتی را که نیاز دارید انجام دهند.

امیدوارم این آموزش به شما کمک کرده باشد که بفهمید چطور می‌توانید متدهای خود را در پایتون تعریف کنید و از آن‌ها استفاده کنید. هر سوالی داشتید، حتماً بپرسید! 😊

🔻برای بیشتر یاد گرفتن اینجا کلیک کن

#Python #Programming #OOP #Methods #Learning #PythonTips
Forwarded from Python3
📉 بزرگ‌ترین نقص‌های پایتون نسبت به زبان‌های دیگر

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

📝 مقدمه
پایتون به عنوان یک زبان برنامه‌نویسی با سطح بالا، از قابلیت‌های متعددی برخوردار است که توسعه‌دهندگان را قادر می‌سازد به سرعت و با کارایی بالا برنامه بنویسند. اما برخی ویژگی‌ها و نقص‌های ذاتی آن ممکن است در پروژه‌های خاص یا در مقایسه با دیگر زبان‌های برنامه‌نویسی، محدودیت‌هایی ایجاد کنند.

⚠️ بزرگ‌ترین نقص‌های پایتون
1. عملکرد پایین‌تر نسبت به زبان‌های کامپایل‌شده
پایتون به دلیل اینکه یک زبان تفسیرشده (interpreted) است، عموماً نسبت به زبان‌های کامپایل‌شده مانند C++ و Java از عملکرد کمتری برخوردار است. این به معنای سرعت پایین‌تر اجرای برنامه‌ها و مصرف بیشتر منابع سیستم است.

# کد پایتون (مقایسه عملکرد)
def slow_function():
result = 0
for i in range(10000000):
result += i
return result

print(slow_function())

2. عدم پشتیبانی از چند هسته‌ای به طور کامل
پایتون به دلیل Global Interpreter Lock (GIL)، نمی‌تواند به طور کامل از قابلیت‌های چند هسته‌ای پردازنده‌ها استفاده کند. این مسئله باعث می‌شود که اجرای همزمان چندین نخ (thread) در پایتون به اندازه‌ای که در زبان‌های دیگر مانند Java یا C++ ممکن است، کارایی نداشته باشد.

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

4. ابعاد بزرگ کتابخانه‌ها و زمان بارگذاری
پایتون به طور کلی دارای کتابخانه‌های زیادی است که می‌تواند زمان بارگذاری و مصرف حافظه برنامه‌ها را افزایش دهد. این مسئله ممکن است برای پروژه‌های بزرگ و پیچیده که نیاز به زمان بارگذاری سریع دارند، مشکل‌ساز باشد.

5. کمبود نوع‌های داده قوی
پایتون به طور پیش‌فرض از نوع‌های داده قوی (strongly-typed) مانند زبان‌های C++ و Java پشتیبانی نمی‌کند. این به معنای آن است که خطاهای نوع داده ممکن است در زمان اجرای برنامه و نه در زمان کامپایل شناسایی شوند.

# مثال از عدم نوع‌گذاری قوی
x = "5"
y = 10
print(x + y) # منجر به خطا در زمان اجرا

6. پشتیبانی محدود از برنامه‌نویسی موبایل و سیستم‌های توکار
پایتون به طور کلی در زمینه برنامه‌نویسی موبایل و سیستم‌های توکار نسبت به زبان‌هایی مانند Java یا C++ محدودیت‌هایی دارد. این به معنای آن است که برای توسعه اپلیکیشن‌های موبایل و سیستم‌های توکار، ممکن است نیاز به استفاده از زبان‌های دیگر باشد.

7. سازگاری کمتر با برخی سیستم‌عامل‌ها
پایتون به دلیل استفاده از محیط‌های اجرایی خاص، ممکن است در برخی سیستم‌عامل‌ها مانند سیستم‌های توکار و سخت‌افزارهای خاص، مشکلاتی در سازگاری داشته باشد. این ممکن است نیاز به پیکربندی و تنظیمات اضافی داشته باشد.

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

🔻[برای یاد گرفتن بیشتر اینجا کلیک کن]🔻
👍1
Forwarded from Python3
پارت ۶: دیکشنری‌ها و مجموعه‌ها در پایتون 📚🐍

در این پارت، به بررسی دو ساختار داده‌ای مهم و پرکاربرد دیگر در پایتون می‌پردازیم: دیکشنری‌ها (Dictionaries) و مجموعه‌ها (Sets). این ساختارها ابزارهایی قوی برای مدیریت داده‌ها به شکلی موثر و بهینه هستند.

۱. دیکشنری‌ها (Dictionaries)

دیکشنری‌ها ساختارهای داده‌ای هستند که داده‌ها را به صورت جفت‌های کلید-مقدار (key-value pairs) ذخیره می‌کنند. این ویژگی باعث می‌شود تا دیکشنری‌ها برای ذخیره و بازیابی داده‌ها با استفاده از کلید‌ها بسیار مفید باشند.

تعریف دیکشنری

دیکشنری‌ها با استفاده از آکولاد {} تعریف می‌شوند:

my_dict = {"name": "Ali", "age": 25, "city": "Tehran"}
print(my_dict) # خروجی: {'name': 'Ali', 'age': 25, 'city': 'Tehran'}

افزودن و حذف عناصر

می‌توانیم عناصر جدید به دیکشنری اضافه کنیم یا عناصر موجود را حذف کنیم:

my_dict["email"] = "[email protected]"  # افزودن عنصر جدید
print(my_dict) # خروجی: {'name': 'Ali', 'age': 25, 'city': 'Tehran', 'email': '[email protected]'}

del my_dict["age"] # حذف عنصر
print(my_dict) # خروجی: {'name': 'Ali', 'city': 'Tehran', 'email': '[email protected]'}

دسترسی به مقادیر دیکشنری

می‌توانیم به مقادیر دیکشنری با استفاده از کلیدها دسترسی پیدا کنیم:

name = my_dict["name"]
print(name) # خروجی: Ali

متدهای پرکاربرد دیکشنری

دیکشنری‌ها دارای متدهای متعددی هستند که کار با آنها را آسان‌تر می‌کنند:

# استفاده از متد get برای دریافت مقدار با کلید، در صورت عدم وجود کلید مقدار پیش‌فرض بازمی‌گرداند
age = my_dict.get("age", "Unknown")
print(age) # خروجی: Unknown

# دریافت لیست کلیدها و مقادیر
keys = my_dict.keys()
values = my_dict.values()
print(keys) # خروجی: dict_keys(['name', 'city', 'email'])
print(values) # خروجی: dict_values(['Ali', 'Tehran', '[email protected]'])

۲. مجموعه‌ها (Sets)

مجموعه‌ها ساختارهای داده‌ای هستند که تنها شامل عناصر یکتا (غیر تکراری) می‌شوند. این ویژگی باعث می‌شود تا مجموعه‌ها برای انجام عملیات‌های مجموعه‌ای مانند اشتراک، اجتماع و تفاضل بسیار مفید باشند.

تعریف مجموعه

مجموعه‌ها با استفاده از آکولاد {} یا تابع set() تعریف می‌شوند:

my_set = {1, 2, 3, 4, 5}
print(my_set) # خروجی: {1, 2, 3, 4, 5}

my_set = set([1, 2, 3, 4, 5])
print(my_set) # خروجی: {1, 2, 3, 4, 5}

فزودن و حذف عناصر

می‌توانیم عناصر جدید به مجموعه اضافه کنیم یا عناصر موجود را حذف کنیم:

my_set.add(6)   # افزودن عنصر جدید
print(my_set) # خروجی: {1, 2, 3, 4, 5, 6}

my_set.remove(3) # حذف عنصر
print(my_set) # خروجی: {1, 2, 4, 5, 6}

# عملیات‌های مجموعه‌ای

مجموعه‌ها دارای متدهای مختلفی برای انجام عملیات‌های مجموعه‌ای هستند:

set1 = {1, 2, 3}
set2 = {3, 4, 5}

# اجتماع
union_set = set1.union(set2)
print(union_set) # خروجی: {1, 2, 3, 4, 5}

# اشتراک
intersection_set = set1.intersection(set2)
print(intersection_set) # خروجی: {3}

# تفاضل
difference_set = set1.difference(set2)
print(difference_set) # خروجی: {1, 2}

تمرین‌ها

1. یک دیکشنری بسازید که شامل اطلاعات کتاب‌های شما باشد (عنوان، نویسنده، سال انتشار) و سپس یک کتاب جدید به آن اضافه کنید.
2. یک مجموعه شامل شماره‌های مختلف ایجاد کنید و سپس مجموعه‌ای دیگر با شماره‌های متفاوت ایجاد کنید. اشتراک و تفاضل این دو مجموعه را محاسبه کنید.
3. یک دیکشنری شامل نام و سن دوستان خود بسازید و سپس سعی کنید نام دوستی که در دیکشنری وجود ندارد را جستجو کنید.

[آموزش های مفید پایتون اینجاست]

#پایتون #آموزش_پایتون #برنامه_نویسی #دیکشنری #مجموعه #کدنویسی
Forwarded from Python3
پارت ۳: استفاده از پایگاه داده

۱. نصب و راه‌اندازی SQLite

برای ذخیره اطلاعات کاربران و داده‌های ربات، می‌توان از پایگاه داده SQLite استفاده کرد. ابتدا کتابخانه sqlite3 را که به صورت پیش‌فرض در پایتون موجود است، وارد می‌کنیم:

import sqlite3

۲. اتصال ربات به پایگاه داده

ابتدا باید یک پایگاه داده ایجاد کنیم و سپس به آن متصل شویم. برای این کار، یک فایل پایگاه داده به نام bot_database.db ایجاد می‌کنیم:

conn = sqlite3.connect('bot_database.db')
cursor = conn.cursor()

۳. ایجاد جداول مورد نیاز

جدول‌هایی که نیاز داریم را ایجاد می‌کنیم. برای مثال، جدولی برای ذخیره اطلاعات کاربران:

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
username TEXT,
first_name TEXT,
last_name TEXT
)
''')
conn.commit()

۴. ذخیره اطلاعات کاربران

هنگامی که یک کاربر جدید با ربات تعامل می‌کند، اطلاعات او را در پایگاه داده ذخیره می‌کنیم. این کار را می‌توانیم در هندلر دستور /start انجام دهیم:

def start(update: Update, context: CallbackContext) -> None:
user = update.message.from_user
cursor.execute('''
INSERT OR IGNORE INTO users (user_id, username, first_name, last_name)
VALUES (?, ?, ?, ?)
''', (user.id, user.username, user.first_name, user.last_name))
conn.commit()
update.message.reply_text('سلام! به ربات من خوش آمدید.')

۵. بازیابی اطلاعات از پایگاه داده

برای بازیابی اطلاعات کاربران از پایگاه داده، می‌توانیم یک تابع تعریف کنیم. برای مثال، تابعی که لیست کاربران را برمی‌گرداند:

def get_users():
cursor.execute('SELECT * FROM users')
return cursor.fetchall()

۶. به‌روزرسانی و حذف اطلاعات

برای به‌روزرسانی و حذف اطلاعات نیز می‌توانیم توابع مشابهی تعریف کنیم. برای مثال، به‌روزرسانی نام کاربری یک کاربر:

def update_username(user_id, new_username):
cursor.execute('''
UPDATE users
SET username = ?
WHERE user_id = ?
''', (new_username, user_id))
conn.commit()

راه‌اندازی و اجرای ربات

در نهایت، کد کامل ربات با اتصال به پایگاه داده به شکل زیر خواهد بود:

import sqlite3
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext

TOKEN = 'YOUR_BOT_TOKEN'

conn = sqlite3.connect('bot_database.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
username TEXT,
first_name TEXT,
last_name TEXT
)
''')
conn.commit()

def start(update: Update, context: CallbackContext) -> None:
user = update.message.from_user
cursor.execute('''
INSERT OR IGNORE INTO users (user_id, username, first_name, last_name)
VALUES (?, ?, ?, ?)
''', (user.id, user.username, user.first_name, user.last_name))
conn.commit()
update.message.reply_text('سلام! به ربات من خوش آمدید.')

def help_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text('چطور می‌توانم به شما کمک کنم؟')

def echo(update: Update, context: CallbackContext) -> None:
update.message.reply_text(update.message.text)

def main():
updater = Updater(TOKEN)

dispatcher = updater.dispatcher

dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("help", help_command))
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

updater.start_polling()
updater.idle()

if __name__ == '__main__':
main()

این کد رباتی ایجاد می‌کند که به دستورات /start و /help پاسخ می‌دهد و اطلاعات کاربران را در یک پایگاه داده SQLite ذخیره می‌کند. 🎉

امیدوارم از این آموزش لذت برده باشید! برای دیدن آموزش‌های بیشتر، کانال ما را دنبال کنید.
[کانال تلگرام]

#پایتون #آموزش_پایتون #ربات_تلگرام #برنامه_نویسی #python #telegram_bot
Forwarded from Python3
🚀 آموزش تعامل و ارتباط بین توابع در پایتون

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

تعریف توابع مستقل
ابتدا توابع ساده و مستقل را تعریف می‌کنیم. این توابع هر کدام یک وظیفه خاص را انجام می‌دهند. به عنوان مثال:

def add(a, b):
return a + b

def subtract(a, b):
return a - b

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

def calculate(a, b):
sum_result = add(a, b)
subtract_result = subtract(a, b)
return sum_result, subtract_result

result = calculate(10, 5)
print(result) # Output: (15, 5)

ارسال توابع به عنوان آرگومان
در پایتون، توابع می‌توانند به عنوان آرگومان به دیگر توابع ارسال شوند. این ویژگی به ما امکان می‌دهد که رفتار توابع را تغییر دهیم. به عنوان مثال:

def apply_operation(a, b, operation):
return operation(a, b)

result_add = apply_operation(10, 5, add)
result_subtract = apply_operation(10, 5, subtract)
print(result_add) # Output: 15
print(result_subtract) # Output: 5

توابع بازگشتی
توابع بازگشتی توابعی هستند که خود را فراخوانی می‌کنند. این نوع توابع برای حل مسائل پیچیده و تکراری بسیار مفید هستند. به عنوان مثال:

def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)

print(factorial(5)) # Output: 120

توابع داخلی (Nested Functions)
توابع داخلی یا توابع تو در تو، توابعی هستند که داخل توابع دیگر تعریف می‌شوند. این توابع تنها در داخل تابع خارجی قابل دسترسی هستند. به عنوان مثال:

def outer_function(text):
def inner_function():
print(text)
inner_function()

outer_function("Hello from nested function!") # Output: Hello from nested function!

🚩(بزن اینجا تا بیشتر یاد بگیری)🚩

#پایتون #آموزش #برنامه‌نویسی #توابع #تعامل_توابع #کدنویسی
👍1
Forwarded from Linux TV 🐧
تخفیف ویژه
🚀ربات ادر ‌‌گروه به گروه تلگرام 🎉
زبان برنامه نویسی: پایتون 🐍

ویژگی های منحصر به فرد
- اتصال مستقیم به ربات [@SpamBot] 🔥
- کدهای پرسرعت و بهینه با استفاده از تکنولوژی async 🧹
- کانفیگ آسان و راحت 🎛️
- رابط کاربری آسان و پیشرفته
- پشتیبانی آنلاین

🎁 هدیه ویژه: با خرید این سورس، کانفیگ رایگان برای شما انجام می‌شود  🙌

🌟 مزایای این ربات در مقایسه با خرید ممبر:
- استفاده ی نامحدود
- صرفه‌جویی در زمان و هزینه
- افزایش اعضای مفید گروه با کمترین هزینه
عکس های از محیط ربات
تست رایگان: شما همین الان می توانید به آیدی زیر پیام دهید و از دو روز تست رایگان این سورس بهره مند شوید 🎉

🟢 برای اطلاع از قیمت و خرید:
[ @linux7563_def ]
Forwarded from Python3
پارت ۱: معرفی آرایه‌ها 📚📊

سلام دوستان! 🌟 به سری دوم آموزش‌های "ساختمان داده‌ها" خوش آمدید! در این سری، به بررسی دقیق‌تر آرایه‌ها و لیست‌های پیوندی خواهیم پرداخت. پارت اول این سری به آرایه‌ها اختصاص دارد. آماده‌اید؟ شروع کنیم! 🚀

آرایه چیست؟ 🤔

آرایه (Array) یک ساختار داده‌ای است که مجموعه‌ای از عناصر هم‌نوع (مانند اعداد صحیح، اعشار یا کاراکترها) را در یک فضای حافظه پیوسته ذخیره می‌کند. هر عنصر در آرایه با استفاده از یک اندیس (index) قابل دسترسی است.

مثال:
فرض کنید آرایه‌ای به نام arr داریم که ۵ عدد صحیح را ذخیره می‌کند:

arr = [10, 20, 30, 40, 50]

در اینجا، arr[0] مقدار 10 و arr[4] مقدار 50 را برمی‌گرداند.

انواع آرایه‌ها 🧩

1. آرایه‌های یک‌بعدی:
- ساده‌ترین نوع آرایه، که عناصر را به صورت خطی ذخیره می‌کند.
- مثال: arr = [1, 2, 3, 4, 5]

2. آرایه‌های دوبعدی:
- آرایه‌هایی که عناصر را در قالب سطرها و ستون‌ها ذخیره می‌کنند.
- برای نمایش ماتریس‌ها و جداول استفاده می‌شوند.
- مثال:

     matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

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

مزایا و معایب آرایه‌ها ⚖️

1. مزایا 🌟
- دسترسی سریع: با استفاده از اندیس می‌توان به سرعت به هر عنصر دسترسی پیدا کرد. پیچیدگی زمانی دسترسی به عناصر آرایه O(1) است.
- ساده و کاربردی: پیاده‌سازی و استفاده از آرایه‌ها در بسیاری از زبان‌های برنامه‌نویسی ساده است.
- استفاده بهینه از حافظه: حافظه به صورت پیوسته تخصیص داده می‌شود که باعث بهبود کارایی می‌شود.

2. معایب ⚠️
- اندازه ثابت: پس از تعریف آرایه، نمی‌توان اندازه آن را تغییر داد. این موضوع ممکن است باعث هدررفت حافظه یا کمبود فضا شود.
- هزینه بالای درج و حذف: برای درج یا حذف یک عنصر، ممکن است نیاز به جابجایی بسیاری از عناصر باشد که پیچیدگی زمانی O(n) دارد.

کاربردهای آرایه‌ها در برنامه‌نویسی 💻

آرایه‌ها به دلیل سادگی و کارایی بالا، در بسیاری از الگوریتم‌ها و برنامه‌های مختلف کاربرد دارند:

- پردازش لیست‌ها: مانند لیست نمرات دانشجویان یا قیمت محصولات.
- مدیریت ماتریس‌ها: در الگوریتم‌های ریاضی و گرافیک کامپیوتری.
- پیاده‌سازی ساختارهای داده‌ای پیشرفته: مانند پشته‌ها و صف‌ها.

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

در پارت بعدی، به بررسی عملیات پایه‌ای مانند درج، حذف، جستجو و به‌روزرسانی عناصر در آرایه‌ها می‌پردازیم.

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#آرایه‌ها #ساختمان_داده‌ها #برنامه‌نویسی #پایتون #آموزش
Forwarded from Python3
پارت ۲: عملیات پایه روی آرایه‌ها 🔄🛠️

سلام دوستان! 🌟 در پارت دوم از سری آموزش‌های "آرایه‌ها و لیست‌های پیوندی"، به بررسی عملیات پایه‌ای که می‌توان روی آرایه‌ها انجام داد، می‌پردازیم. این عملیات شامل درج، حذف، جستجو و به‌روزرسانی عناصر در آرایه‌ها است. همچنین با پیچیدگی زمانی هر عملیات نیز آشنا خواهیم شد. آماده‌اید؟ شروع کنیم! 🚀

۱. درج (Insertion) در آرایه ✏️

درج یک عنصر جدید در آرایه می‌تواند در سه حالت مختلف انجام شود:
1. درج در ابتدای آرایه: همه عناصر باید یک خانه به جلو منتقل شوند.
2. درج در میانه آرایه: عناصر پس از محل درج باید یک خانه به جلو منتقل شوند.
3. درج در انتهای آرایه: تنها زمانی امکان‌پذیر است که فضایی در انتهای آرایه موجود باشد.

پیچیدگی زمانی: درج در ابتدای آرایه یا میانه آن O(n) است، در حالی که درج در انتها O(1) است.

مثال کد:
def insert(arr, index, value):
if index >= len(arr):
arr.append(value)
else:
arr.insert(index, value)

arr = [10, 20, 30, 40]
insert(arr, 2, 25) # آرایه بعد از درج: [10, 20, 25, 30, 40]
print(arr)

۲. حذف (Deletion) از آرایه

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

پیچیدگی زمانی: حذف از ابتدای آرایه یا میانه آن O(n) است، در حالی که حذف از انتها O(1) است.

مثال کد:
def delete(arr, index):
if index < len(arr):
arr.pop(index)

arr = [10, 20, 30, 40]
delete(arr, 1) # آرایه بعد از حذف: [10, 30, 40]
print(arr)

۳. جستجو (Search) در آرایه 🔍

جستجو به معنای یافتن یک عنصر خاص در آرایه است. دو روش رایج برای جستجو عبارتند از:
1. جستجوی خطی (Linear Search): از ابتدا تا انتها آرایه را برای یافتن عنصر مورد نظر جستجو می‌کنیم.
2. جستجوی دودویی (Binary Search): برای آرایه‌های مرتب، جستجو به روش تقسیم و تسخیر انجام می‌شود.

پیچیدگی زمانی:
- جستجوی خطی O(n) است.
- جستجوی دودویی O(log n) است.

مثال کد (جستجوی خطی):
def linear_search(arr, value):
for i in range(len(arr)):
if arr[i] == value:
return i
return -1

arr = [10, 20, 30, 40]
index = linear_search(arr, 30) # خروجی: 2
print("Index of 30:", index)

۴. به‌روزرسانی (Update) عنصر در آرایه 🔄

به‌روزرسانی به معنای تغییر مقدار یک عنصر خاص در آرایه است. این عملیات بسیار سریع است زیرا فقط به اندیس عنصر مورد نظر نیاز داریم.

پیچیدگی زمانی: به‌روزرسانی O(1) است.

مثال کد:
def update(arr, index, value):
if index < len(arr):
arr[index] = value

arr = [10, 20, 30, 40]
update(arr, 2, 35) # آرایه بعد از به‌روزرسانی: [10, 20, 35, 40]
print(arr)

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#آموزش #برنامه‌نویسی #ساختمان_داده‌ها
Forwarded from Python3
ادامه پارت ۲: جستجوی دودویی (Binary Search) در آرایه 🔍📈

جستجوی دودویی یکی از کارآمدترین روش‌ها برای یافتن یک عنصر در یک آرایه مرتب‌شده است. این روش از رویکرد "تقسیم و تسخیر" (Divide and Conquer) استفاده می‌کند و پیچیدگی زمانی آن به صورت لگاریتمی است.

چگونه جستجوی دودویی کار می‌کند؟ 🤔

1. ابتدا، عنصر میانی (وسط) آرایه را پیدا کنید.
2. اگر عنصر مورد نظر کمتر از عنصر میانی است، جستجو را در نیمه چپ آرایه ادامه دهید.
3. اگر عنصر مورد نظر بیشتر از عنصر میانی است، جستجو را در نیمه راست آرایه ادامه دهید.
4. اگر عنصر میانی برابر با عنصر مورد نظر است، جستجو به پایان می‌رسد و اندیس آن بازگردانده می‌شود.
5. این فرآیند را تا زمانی که عنصر مورد نظر پیدا شود یا آرایه به بخش‌های کوچکتر تقسیم شود ادامه دهید.

پیچیدگی زمانی 🔄

پیچیدگی زمانی جستجوی دودویی O(log n) است، که بسیار سریع‌تر از جستجوی خطی با پیچیدگی O(n) است، به شرطی که آرایه مرتب باشد.

مثال کد:
در اینجا یک پیاده‌سازی از جستجوی دودویی در پایتون آمده است:

def binary_search(arr, value):
low = 0
high = len(arr) - 1

while low <= high:
mid = (low + high) // 2

if arr[mid] == value:
return mid
elif arr[mid] < value:
low = mid + 1
else:
high = mid - 1

return -1 # در صورتی که عنصر پیدا نشود

arr = [10, 20, 30, 40, 50, 60]
index = binary_search(arr, 40) # خروجی: 3
print("Index of 40:", index)

در این مثال، ابتدا آرایه مرتب شده arr داریم. سپس از تابع binary_search برای یافتن عنصر 40 استفاده می‌کنیم. این تابع مقدار 3 را که اندیس عنصر 40 است، بازمی‌گرداند.

نکات مهم در مورد جستجوی دودویی ⚠️

- آرایه مرتب: جستجوی دودویی تنها در آرایه‌های مرتب‌شده کار می‌کند. اگر آرایه شما مرتب نیست، ابتدا باید آن را مرتب کنید (مثلاً با استفاده از الگوریتم‌های مرتب‌سازی).
- پیچیدگی زمانی: این روش به خصوص برای آرایه‌های بزرگ بسیار کارآمد است و می‌تواند زمان جستجو را به شدت کاهش دهد.

جمع‌بندی 🎯

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

با این توضیحات، پارت ۲ تکمیل شد. در پارت بعدی به بررسی لیست‌های پیوندی تک‌پیوندی خواهیم پرداخت.

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#آرایه‌ها #جستجوی_دودویی #ساختمان_داده‌ها #برنامه‌نویسی #پایتون #آموزش
Forwarded from Python3
پارت ۳: لیست‌های پیوندی تک‌پیوندی 🔗📘

سلام دوستان! 🌟 در پارت سوم از سری آموزش‌های "آرایه‌ها و لیست‌های پیوندی"، به بررسی یکی از ساختارهای داده‌ای مهم به نام لیست‌های پیوندی تک‌پیوندی (Singly Linked Lists) می‌پردازیم. لیست‌های پیوندی یک ساختار داده‌ای قدرتمند و منعطف هستند که در بسیاری از کاربردهای برنامه‌نویسی استفاده می‌شوند. بیایید شروع کنیم! 🚀

لیست پیوندی تک‌پیوندی چیست؟ 🤔

یک لیست پیوندی تک‌پیوندی مجموعه‌ای از نودها (Node) است که هر نود شامل دو بخش است:
1. داده (Data): مقداری که می‌خواهیم در لیست ذخیره کنیم.
2. اشاره‌گر (Pointer): اشاره‌گری که به نود بعدی در لیست اشاره می‌کند.

نودها به صورت زنجیره‌ای به هم متصل هستند و اولین نود با نام سر لیست (Head) شناخته می‌شود. آخرین نود نیز به جای اشاره به نود دیگر، به مقدار None اشاره می‌کند که نشان‌دهنده پایان لیست است.

تفاوت لیست پیوندی با آرایه‌ها ⚖️

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

پیاده‌سازی لیست پیوندی تک‌پیوندی در پایتون 🛠️

در اینجا یک پیاده‌سازی ساده از لیست پیوندی تک‌پیوندی در پایتون آمده است.

class Node:
def __init__(self, data):
self.data = data # ذخیره داده
self.next = None # اشاره‌گر به نود بعدی

class LinkedList:
def __init__(self):
self.head = None # سر لیست (شروع لیست)

def insert_at_end(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node

def display(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("None")

# مثال استفاده
ll = LinkedList()
ll.insert_at_end(10)
ll.insert_at_end(20)
ll.insert_at_end(30)
ll.display() # خروجی: 10 -> 20 -> 30 -> None

در این پیاده‌سازی:
- کلاس Node یک نود ساده را تعریف می‌کند که شامل داده و اشاره‌گر به نود بعدی است.
- کلاس LinkedList ساختار لیست پیوندی را تعریف می‌کند و شامل متدهایی برای اضافه کردن نود در انتهای لیست (insert_at_end) و نمایش لیست (display) است.

مزایا و معایب لیست‌های پیوندی تک‌پیوندی ⚠️

1. مزایا 🌟
- افزایش و کاهش اندازه پویا: لیست پیوندی می‌تواند به راحتی گسترش یا کوچک شود.
- درج و حذف سریع‌تر: عملیات درج و حذف بدون نیاز به جابجایی سایر عناصر انجام می‌شود.
- استفاده بهینه از حافظه: برای ذخیره داده‌ها به همان اندازه حافظه استفاده می‌شود که مورد نیاز است.

2. معایب ⚠️
- دسترسی خطی: برای دسترسی به یک عنصر خاص باید از ابتدای لیست شروع کنید، که می‌تواند زمان‌بر باشد.
- استفاده بیشتر از حافظه: هر نود به یک اشاره‌گر اضافی نیاز دارد که حافظه بیشتری مصرف می‌کند.

نتیجه‌گیری 🎯

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

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#لیست_پیوندی #برنامه‌نویسی #ساختمان_داده‌ها #پایتون #آموزش
Forwarded from Python3
پارت ۴: عملیات پایه روی لیست‌های پیوندی تک‌پیوندی 🔄🔗

سلام دوستان! 🌟 در پارت چهارم از سری آموزش‌های "آرایه‌ها و لیست‌های پیوندی"، به بررسی عملیات پایه‌ای که می‌توان روی لیست‌های پیوندی تک‌پیوندی انجام داد، می‌پردازیم. این عملیات شامل درج، حذف، جستجو و به‌روزرسانی عناصر در لیست‌های پیوندی است. همچنین پیچیدگی زمانی هر عملیات را بررسی خواهیم کرد. بیایید شروع کنیم! 🚀

۱. درج (Insertion) در لیست پیوندی ✏️

درج یک نود جدید در لیست پیوندی به چند حالت انجام می‌شود:
1. درج در ابتدای لیست: نود جدید به عنوان سر لیست قرار می‌گیرد و اشاره‌گر آن به نود قبلی سر لیست اشاره می‌کند.
2. درج در انتهای لیست: نود جدید به آخرین نود لیست اضافه می‌شود و اشاره‌گر نود قبلی به نود جدید اشاره می‌کند.
3. درج در وسط لیست: نود جدید در محل مشخصی از لیست قرار می‌گیرد و اشاره‌گر نود قبلی به نود جدید و اشاره‌گر نود جدید به نود بعدی اشاره می‌کند.

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

مثال کد:
class LinkedList:
def __init__(self):
self.head = None

def insert_at_beginning(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node

def insert_at_end(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node

def insert_after(self, prev_node, data):
if prev_node is None:
print("Previous node must be in the list.")
return
new_node = Node(data)
new_node.next = prev_node.next
prev_node.next = new_node

ll = LinkedList()
ll.insert_at_beginning(10)
ll.insert_at_end(20)
ll.insert_after(ll.head, 15) # درج 15 بعد از نود 10
ll.display() # خروجی: 10 -> 15 -> 20 -> None

۲. حذف (Deletion) از لیست پیوندی

حذف یک نود نیز به چند حالت انجام می‌شود:
1. حذف از ابتدای لیست: نود سر لیست حذف می‌شود و اشاره‌گر سر به نود بعدی منتقل می‌شود.
2. حذف از انتهای لیست: نود آخر لیست حذف می‌شود و اشاره‌گر نود قبلی به None تغییر می‌کند.
3. حذف از وسط لیست: نودی که باید حذف شود، از لیست برداشته می‌شود و اشاره‌گر نود قبلی به نود بعدی آن متصل می‌شود.

پیچیدگی زمانی:
- حذف از ابتدای لیست O(1) است.
- حذف از انتهای لیست O(n) است.
- حذف از وسط لیست O(n) است.

مثال کد:
class LinkedList:
def delete_node(self, key):
current = self.head

if current and current.data == key:
self.head = current.next
current = None
return

prev = None
while current and current.data != key:
prev = current
current = current.next

if current is None:
return

prev.next = current.next
current = None

ll = LinkedList()
ll.insert_at_end(10)
ll.insert_at_end(20)
ll.insert_at_end(30)
ll.delete_node(20) # حذف نود با مقدار 20
ll.display() # خروجی: 10 -> 30 -> None

۳. جستجو (Search) در لیست پیوندی 🔍

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

پیچیدگی زمانی: جستجو در لیست پیوندی O(n) است.

مثال کد:
class LinkedList:
def search(self, key):
current = self.head
while current:
if current.data == key:
return True
current = current.next
return False

ll = LinkedList()
ll.insert_at_end(10)
ll.insert_at_end(20)
ll.insert_at_end(30)
found = ll.search(20) # خروجی: True
print("Found 20:", found)

۴. به‌روزرسانی (Update) نود در لیست پیوندی 🔄

به‌روزرسانی به معنای تغییر مقدار یک نود خاص در لیست پیوندی است. برای این کار باید نود مورد نظر را پیدا کرده و داده آن را تغییر دهیم.

پیچیدگی زمانی: به‌روزرسانی O(n) است.
Forwarded from Python3
مثال کد:
class LinkedList:
def update(self, old_data, new_data):
current = self.head
while current:
if current.data == old_data:
current.data = new_data
return True
current = current.next
return False

ll = LinkedList()
ll.insert_at_end(10)
ll.insert_at_end(20)
ll.insert_at_end(30)
updated = ll.update(20, 25) # تغییر مقدار نود 20 به 25
ll.display() # خروجی: 10 -> 25 -> 30 -> None

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

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#لیست_پیوندی #برنامه‌نویسی #ساختمان_داده‌ها #پایتون #آموزش
پ
Forwarded from Python3
پارت ۵: لیست‌های پیوندی دوپیوندی و حلقوی 🔗🔄

سلام دوستان! 🌟 در پارت پنجم از سری آموزش‌های "آرایه‌ها و لیست‌های پیوندی"، به بررسی دو نوع دیگر از لیست‌های پیوندی، یعنی لیست‌های پیوندی دوپیوندی (Doubly Linked Lists) و لیست‌های پیوندی حلقوی (Circular Linked Lists) می‌پردازیم. این ساختارها در مواقع خاصی می‌توانند بسیار مفید باشند. بیایید شروع کنیم! 🚀

۱. لیست پیوندی دوپیوندی (Doubly Linked List) چیست؟ ↔️

در لیست پیوندی دوپیوندی، هر نود شامل سه بخش است:
1. داده (Data): مقداری که می‌خواهیم ذخیره کنیم.
2. اشاره‌گر به نود قبلی (Prev Pointer): اشاره‌گری که به نود قبلی اشاره می‌کند.
3. اشاره‌گر به نود بعدی (Next Pointer): اشاره‌گری که به نود بعدی اشاره می‌کند.

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

مزایا:
- پیمایش در هر دو جهت (پیش‌روی و پس‌روی).
- حذف و درج نودها ساده‌تر است زیرا اشاره‌گر نود قبلی در دسترس است.

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

پیاده‌سازی ساده لیست پیوندی دوپیوندی در پایتون:

class Node:
def __init__(self, data):
self.data = data
self.prev = None # اشاره‌گر به نود قبلی
self.next = None # اشاره‌گر به نود بعدی

class DoublyLinkedList:
def __init__(self):
self.head = None

def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
new_node.prev = current

def display_forward(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("None")

def display_backward(self):
current = self.head
while current.next:
current = current.next
while current:
print(current.data, end=" -> ")
current = current.prev
print("None")

# مثال استفاده
dll = DoublyLinkedList()
dll.append(10)
dll.append(20)
dll.append(30)
dll.display_forward() # خروجی: 10 -> 20 -> 30 -> None
dll.display_backward() # خروجی: 30 -> 20 -> 10 -> None

۲. لیست پیوندی حلقوی (Circular Linked List) چیست؟ 🔁

در لیست پیوندی حلقوی، آخرین نود لیست به جای اشاره به None، به نود اول (سر لیست) اشاره می‌کند، بنابراین لیست یک حلقه تشکیل می‌دهد. این ساختار می‌تواند برای مواقعی که نیاز به چرخش در داده‌ها داریم، مفید باشد.

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

معایب:
- نیاز به مدیریت دقیق حلقه‌ها برای جلوگیری از حلقه‌های بی‌پایان.
- پیچیدگی بیشتر در برخی از عملیات‌ها مثل حذف نودها.

پیاده‌سازی ساده لیست پیوندی حلقوی در پایتون:

class Node:
def __init__(self, data):
self.data = data
self.next = None

class CircularLinkedList:
def __init__(self):
self.head = None

def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
new_node.next = self.head
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = new_node
new_node.next = self.head

def display(self):
if not self.head:
return
current = self.head
while True:
print(current.data, end=" -> ")
current = current.next
if current == self.head:
break
print(f"Back to {self.head.data}")

# مثال استفاده
cll = CircularLinkedList()
cll.append(10)
cll.append(20)
cll.append(30)
cll.display() # خروجی: 10 -> 20 -> 30 -> Back to 10

۳. کاربردهای خاص لیست‌های پیوندی دوپیوندی و حلقوی 📊
Forwarded from Python3
- لیست‌های دوپیوندی معمولاً در سیستم‌هایی که نیاز به پیمایش دوطرفه دارند (مانند مرورگرهای وب با قابلیت بازگشت و پیشروی بین صفحات) استفاده می‌شوند.
- لیست‌های حلقوی در برنامه‌هایی مانند سیستم‌های صف‌گردشی یا بازی‌های رایانه‌ای برای مدیریت نوبت‌ها کاربرد دارند.


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

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#لیست_پیوندی #برنامه‌نویسی #ساختمان_داده‌ها #پایتون #آموزش
Forwarded from Python3
پارت ۶: پروژه عملی ساده 🛠️🎯

سلام دوستان! 🌟 در پارت ششم از سری آموزش‌های "آرایه‌ها و لیست‌های پیوندی"، به پیاده‌سازی یک پروژه عملی ساده خواهیم پرداخت. این پروژه به ما کمک می‌کند تا مفاهیم یادگرفته شده از لیست‌های پیوندی را به کار ببریم و به تسلط بیشتری در این ساختار داده‌ای برسیم. بیایید شروع کنیم! 🚀

پروژه: ساخت یک دفترچه تلفن ساده با استفاده از لیست پیوندی 📞📚

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

مرحله ۱: تعریف کلاس‌های لازم 🏗️

ابتدا کلاس‌های مورد نیاز را تعریف می‌کنیم. شامل کلاس نود (Node) و کلاس لیست پیوندی (LinkedList).

class ContactNode:
def __init__(self, name, phone_number):
self.name = name
self.phone_number = phone_number
self.next = None

class PhoneBook:
def __init__(self):
self.head = None

def add_contact(self, name, phone_number):
new_contact = ContactNode(name, phone_number)
if self.head is None:
self.head = new_contact
else:
current = self.head
while current.next:
current = current.next
current.next = new_contact

def delete_contact(self, name):
current = self.head
prev = None
while current:
if current.name == name:
if prev:
prev.next = current.next
else:
self.head = current.next
return True
prev = current
current = current.next
return False

def search_contact(self, name):
current = self.head
while current:
if current.name == name:
return current.phone_number
current = current.next
return None

def display_contacts(self):
current = self.head
while current:
print(f"Name: {current.name}, Phone Number: {current.phone_number}")
current = current.next

مرحله ۲: استفاده از دفترچه تلفن 📝

اکنون با استفاده از کلاس PhoneBook، چندین تماس به دفترچه تلفن اضافه کرده، آن‌ها را جستجو و حذف خواهیم کرد و تمام تماس‌ها را نمایش خواهیم داد.

# ایجاد دفترچه تلفن و افزودن تماس‌ها
phone_book = PhoneBook()
phone_book.add_contact("Alice", "123-456-7890")
phone_book.add_contact("Bob", "987-654-3210")
phone_book.add_contact("Charlie", "555-123-4567")

# نمایش تمام تماس‌ها
print("Contacts:")
phone_book.display_contacts()

# جستجوی یک تماس
print("\nSearching for Bob's number:")
number = phone_book.search_contact("Bob")
print(f"Bob's Number: {number}")

# حذف یک تماس
print("\nDeleting Charlie's contact:")
deleted = phone_book.delete_contact("Charlie")
if deleted:
print("Charlie has been deleted.")
else:
print("Charlie was not found.")

# نمایش تماس‌ها پس از حذف
print("\nContacts after deletion:")
phone_book.display_contacts()


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

(⚠️ابنجا کیلیک کن تا بیشتر یاد بگیری⚠️)

#پروژه #دفترچه_تلفن #لیست_پیوندی #برنامه‌نویسی #ساختمان_داده‌ها #پایتون #آموزش
Forwarded from Python3
سری پنجم: گراف‌ها (Graphs) 🕸️
پارت ۶: تمرین و پروژه عملی 🚀

سلام به همه! 🌟 در این پارت، به پیاده‌سازی یک پروژه عملی و حل تمرین‌ها برای تثبیت مفاهیم گراف‌ها خواهیم پرداخت. این تمرینات به شما کمک می‌کند تا مفاهیم یادگرفته شده را به صورت عملی پیاده‌سازی کنید و درک عمیق‌تری از گراف‌ها پیدا کنید.

پروژه عملی: مسیریابی در نقشه 🗺️

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

مراحل پروژه:

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

2. پیاده‌سازی نمایندگی گراف:
- استفاده از لیست مجاورت برای نمایندگی گراف.
- تعریف کلاس برای گراف و اضافه کردن گره‌ها و یال‌ها.


   class Graph:
def __init__(self):
self.graph = {}

def add_vertex(self, vertex):
if vertex not in self.graph:
self.graph[vertex] = {}

def add_edge(self, u, v, weight):
if u not in self.graph:
self.add_vertex(u)
if v not in self.graph:
self.add_vertex(v)
self.graph[u][v] = weight
self.graph[v][u] = weight # برای گراف بدون جهت

3. پیاده‌سازی الگوریتم‌های مسیریابی:
- استفاده از الگوریتم دیکسترا برای یافتن کوتاه‌ترین مسیر بین دو نقطه.
- پیاده‌سازی الگوریتم دیکسترا:


   import heapq

def dijkstra(graph, start):
distances = {vertex: float('infinity') for vertex in graph.graph}
distances[start] = 0
priority_queue = [(0, start)]

while priority_queue:
current_distance, u = heapq.heappop(priority_queue)

if current_distance > distances[u]:
continue

for neighbor, weight in graph.graph[u].items():
distance = current_distance + weight

if distance < distances[neighbor]:
distances[neighbor] = distance
heapq.heappush(priority_queue, (distance, neighbor))

return distances

4. اجرای پروژه:
- تعریف گراف با مکان‌ها و مسیرها.
- یافتن کوتاه‌ترین مسیر بین دو نقطه با استفاده از الگوریتم دیکسترا.


   # تعریف گراف
g = Graph()
g.add_edge('A', 'B', 1)
g.add_edge('A', 'C', 4)
g.add_edge('B', 'C', 2)
g.add_edge('B', 'D', 5)
g.add_edge('C', 'D', 1)

# یافتن کوتاه‌ترین مسیر از 'A' به سایر نقاط
distances = dijkstra(g, 'A')
print(distances)

5. نتیجه‌گیری:
- بررسی نتایج و تحلیل عملکرد الگوریتم.
- افزودن قابلیت‌های اضافی مانند نمایش مسیر کوتاه‌تر.


تمرین‌های تکمیلی ✏️

1. مسئله کوتاه‌ترین مسیر:
- پیاده‌سازی الگوریتم فلوید-وارشال برای یافتن همه‌به‌همه مسیرها در گراف.

2. مدیریت شبکه اجتماعی:
- طراحی سیستمی برای مدیریت شبکه اجتماعی با قابلیت‌های جستجو و نمایش روابط بین کاربران با استفاده از گراف.

3. گراف‌های جهت‌دار:
- پیاده‌سازی و تحلیل الگوریتم‌های جستجو و مسیریابی برای گراف‌های جهت‌دار.


با تکمیل این پروژه و تمرین‌ها، درک شما از گراف‌ها و الگوریتم‌های آن‌ها بهبود خواهد یافت. برای هر سوال یا نیاز به راهنمایی بیشتر، خوشحال می‌شویم که کمک کنیم. موفق باشید! 🌟

(برای بیشتر یاد گفتن اینجا کلیک کن)

#گراف #مسیریابی #الگوریتم_دیکسترا #پروژه_عملی #ساختمان_داده #برنامه_نویسی #آموزش_پایتون
Forwarded from Python3
ارسال پارامترهای یک کلاس به کلاس دیگر در پایتون 🐍

در پایتون، وقتی می‌خواهید از پارامترهای یک کلاس در کلاس دیگری استفاده کنید، می‌توانید این کار را با استفاده از متدها و سازنده‌ها (Constructors) انجام دهید. در اینجا یک مثال ساده آورده شده است.

مثال: ارسال پارامترهای یک کلاس به کلاس دیگر

class ClassA:
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2

class ClassB:
def __init__(self, class_a_instance):
self.param1 = class_a_instance.param1
self.param2 = class_a_instance.param2

def display_params(self):
print(f"Param1: {self.param1}, Param2: {self.param2}")

# ایجاد یک شیء از کلاس A
a = ClassA(10, 20)

# ارسال شیء کلاس A به کلاس B
b = ClassB(a)

# نمایش مقادیر پارامترها در کلاس B
b.display_params()

توضیحات:

1. ClassA:
- این کلاس دو پارامتر param1 و param2 را دریافت کرده و آن‌ها را به عنوان ویژگی‌های (Attributes) شیء ذخیره می‌کند.

2. ClassB:
- این کلاس به عنوان ورودی یک شیء از نوع ClassA دریافت می‌کند و مقادیر param1 و param2 آن شیء را در خودش ذخیره می‌کند.
- متد display_params مقادیر این پارامترها را چاپ می‌کند.

3. نحوه استفاده:
- ابتدا یک شیء از کلاس A با مقادیر خاصی ایجاد می‌شود.
- سپس این شیء به کلاس B ارسال شده و مقادیر آن استخراج و در کلاس B مورد استفاده قرار می‌گیرد.

خروجی:

Param1: 10, Param2: 20

به همین سادگی می‌توانید پارامترهای یک کلاس را به کلاس دیگری ارسال کرده و از آن‌ها استفاده کنید! 😎

⚠️کلیک کن تا بیشتر یاد بگیری⚠️


#Python #برنامه‌نویسی #آموزش_پایتون #کلاس_ها #OOP
Forwarded from Python3
🚀 آموزش فریمورک Pyramid - پارت 1: مقدمه و نصب

📚 مقدمه
Pyramid یک فریمورک وب مدرن و قدرتمند برای پایتون است که به شما امکان می‌دهد تا برنامه‌های وب ساده و پیچیده را به راحتی ایجاد کنید. یکی از ویژگی‌های برجسته Pyramid این است که بسیار انعطاف‌پذیر است و به شما اجازه می‌دهد که فقط از آن ویژگی‌هایی که نیاز دارید استفاده کنید، بدون اینکه پیچیدگی‌های اضافی را متحمل شوید.

🎯 اهداف پارت 1:
- معرفی فریمورک Pyramid
- نصب و پیکربندی اولیه
- ایجاد اولین برنامه وب ساده

1️⃣ نصب و پیکربندی
برای شروع کار با Pyramid، ابتدا باید آن را نصب کنیم. این کار را می‌توان با استفاده از pip انجام داد.

pip install "pyramid==2.0"

> 💡 نکته: بهتر است از یک محیط مجازی (virtual environment) استفاده کنید تا وابستگی‌های پروژه‌تان جدا از دیگر پروژه‌ها باشد.

برای ایجاد یک محیط مجازی:

python -m venv myenv
source myenv/bin/activate # برای کاربران لینوکس یا مک
myenv\Scripts\activate # برای کاربران ویندوز

سپس Pyramid را نصب کنید.

2️⃣ ایجاد اولین پروژه Pyramid
بعد از نصب Pyramid، حالا می‌خواهیم یک پروژه جدید ایجاد کنیم. با استفاده از دستورات زیر می‌توانید یک پروژه جدید به نام myproject بسازید:

pcreate -s starter myproject

🎉 این دستور یک پروژه جدید با یک ساختار پیش‌فرض ایجاد می‌کند که شامل فایل‌های پیکربندی، یک برنامه نمونه و دیگر فایل‌های ضروری است.


📢 برای دیدن ادامه آموزش‌ها به کانال ما بپیوندید: [python3]

#پایتون #آموزش_پایتون #برنامه‌نویسی #Pyramid #وب #توسعه_وب
Forwarded from Python3
پارت ۱: معادله دیفرانسیل و کاربردهای آن

معادله دیفرانسیل چیست؟

معادله دیفرانسیل، معادله‌ای است که مشتقات یک تابع و متغیرهای آن را شامل می‌شود. این معادلات به ما کمک می‌کنند تا رفتار سیستم‌های دینامیکی و تغییرات آنها را مدل‌سازی کنیم.

انواع معادلات دیفرانسیل

1. معادلات دیفرانسیل معمولی (ODE): این معادلات مشتقات نسبت به یک متغیر مستقل را شامل می‌شوند. به عنوان مثال:

dy/dx = y

این معادله یک معادله دیفرانسیل مرتبه اول است.

2. معادلات دیفرانسیل جزئی (PDE): این معادلات مشتقات جزئی نسبت به چندین متغیر مستقل را شامل می‌شوند. به عنوان مثال:

∂²u/∂t² = c² ∂²u/∂x²

که معادله موج است.

کاربردهای معادلات دیفرانسیل

معادلات دیفرانسیل در بسیاری از حوزه‌ها کاربرد دارند، از جمله:

1. فیزیک: برای مدل‌سازی حرکت اجسام، دینامیک سیالات و انتقال حرارت. به عنوان مثال، معادله حرکت نیوتن:

m d²x/dt² = F

2. مهندسی: در تحلیل و طراحی سیستم‌های کنترل، مدارهای الکتریکی و مکانیک. برای مثال، معادله RLC:

L d²i(t)/dt² + R di(t)/dt + (1/C) i(t) = 0

3. زیست‌شناسی: برای مدل‌سازی جمعیت‌ها و انتشار بیماری‌ها. به عنوان مثال، مدل لوتکا-ولترا برای پیش‌بینی جمعیت شکار و شکارچی.

4. اقتصاد: در تحلیل فرآیندهای اقتصادی مانند رشد اقتصادی و تغییرات قیمت‌ها.

مثال ساده

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

dy/dt = -ky

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

برای اطلاعات بیشتر و آموزش‌های کاربردی، به کانال ما "Python3" مراجعه کنید: [Python3]

#معادله_دیفرانسیل #آموزش_پایتون #ریاضیات