Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
الگوریتم Time-Interval Sorting در پایتون 🚀

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

مثال 📝

def time_interval_sorting(intervals):
# مرتب‌سازی بر اساس زمان شروع
sorted_intervals = sorted(intervals, key=lambda x: x[0])
return sorted_intervals

# مثال
intervals = [(5, 10), (1, 3), (4, 8), (2, 6)]
sorted_intervals = time_interval_sorting(intervals)
print("بازه‌های زمانی مرتب‌شده:", sorted_intervals)

بیایید این کد رو خط به خط بررسی کنیم:

1. تعریف تابع: در ابتدا، ما یک تابع به نام time_interval_sorting تعریف می‌کنیم که یک لیست از بازه‌های زمانی را به عنوان ورودی می‌گیرد. هر بازه زمانی به صورت یک جفت عدد (زمان شروع و زمان پایان) تعریف می‌شود. 🛠️


    def time_interval_sorting(intervals):

2. مرتب‌سازی: داخل تابع، ما از تابع sorted برای مرتب‌سازی لیست بازه‌های زمانی استفاده می‌کنیم. کلید مرتب‌سازی بر اساس زمان شروع هر بازه تنظیم شده است. برای این کار، از یک تابع لامبدا استفاده می‌کنیم که عنصر اول (زمان شروع) هر بازه را برمی‌گرداند. 🔄


    sorted_intervals = sorted(intervals, key=lambda x: x[0])

3. برگشت نتیجه: در نهایت، لیست مرتب‌شده را برمی‌گردانیم. 🏁


    return sorted_intervals

4. مثال کاربردی: حالا یک مثال از بازه‌های زمانی داریم و از تابع استفاده می‌کنیم تا آنها را مرتب کنیم. 📝


    intervals = [(5, 10), (1, 3), (4, 8), (2, 6)]
sorted_intervals = time_interval_sorting(intervals)
print("بازه‌های زمانی مرتب‌شده:", sorted_intervals)

اجرای کد 💻

با اجرای این کد، خروجی به صورت زیر خواهد بود:

بازه‌های زمانی مرتب‌شده: [(1, 3), (2, 6), (4, 8), (5, 10)]

بیایید نگاه دقیق‌تری به عملکرد این الگوریتم بندازیم:

- Lambda Function: تابع lambda x: x[0] یک تابع ناشناس (بدون نام) است که به عنوان کلید مرتب‌سازی استفاده می‌شود. این تابع عنصر اول هر بازه (زمان شروع) را برمی‌گرداند تا بر اساس آن مرتب‌سازی انجام شود. 🗝️

- Sorted Function: تابع sorted یک تابع داخلی پایتون است که یک لیست را گرفته و آن را مرتب می‌کند. می‌توانید از پارامتر key برای تعیین کلید مرتب‌سازی استفاده کنید. 🔧

- Complexity: زمان اجرای این الگوریتم O(n log n) است که بهینه‌ترین حالت برای مرتب‌سازی عمومی است. ⏱️

کاربردهای عملی 🌟

این الگوریتم در بسیاری از موارد کاربرد دارد:

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

[اموزش های بیشتر کانال ما]

#Python #Programming #CodingTips #LearnPython
👍21
ساخت یک مفسر ساده در پایتون 🚀

مرحله ۱: تعریف زبان برنامه‌نویسی 📜

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

1. دستور PRINT برای چاپ متن.
2. دستور SET برای تعریف متغیرها.
3. دستور ADD برای جمع کردن مقادیر.

مرحله ۲: نوشتن Lexer 🔍

Lexer یا تجزیه‌کننده لغوی، متن برنامه را به توکن‌ها (قطعات کوچکتر) تقسیم می‌کند.

import re

def lexer(code):
tokens = []
for line in code.splitlines():
line = line.strip()
if line:
if line.startswith("PRINT"):
tokens.append(("PRINT", line[6:]))
elif line.startswith("SET"):
match = re.match(r"SET (\w+) (.+)", line)
if match:
tokens.append(("SET", match.group(1), match.group(2)))
elif line.startswith("ADD"):
match = re.match(r"ADD (\w+) (\w+)", line)
if match:
tokens.append(("ADD", match.group(1), match.group(2)))
return tokens

مرحله ۳: نوشتن Parser 🔍

Parser یا تجزیه‌کننده نحوی، توکن‌ها را به دستورات قابل اجرا تبدیل می‌کند.

def parser(tokens):
commands = []
for token in tokens:
if token[0] == "PRINT":
commands.append(("PRINT", token[1]))
elif token[0] == "SET":
commands.append(("SET", token[1], token[2]))
elif token[0] == "ADD":
commands.append(("ADD", token[1], token[2]))
return commands

مرحله ۴: اجرای دستورات 🏃‍♂️

Interpreter یا مفسر، دستورات را اجرا می‌کند.

def interpreter(commands):
variables = {}
for command in commands:
if command[0] == "PRINT":
print(command[1])
elif command[0] == "SET":
variables[command[1]] = eval(command[2], {}, variables)
elif command[0] == "ADD":
if command[1] in variables and command[2] in variables:
variables[command[1]] += variables[command[2]]
return variables

مرحله ۵: استفاده از مفسر 📟

حالا کد کامل برای مفسر خودمون رو داریم. می‌تونیم یک برنامه MiniLang رو اجرا کنیم.

code = """
SET x 5
SET y 10
ADD x y
PRINT x
"""

tokens = lexer(code)
commands = parser(tokens)
interpreter(commands)

این کد مقدار ۱۵ را چاپ خواهد کرد چون ابتدا مقدار ۵ به متغیر x و مقدار ۱۰ به متغیر y اختصاص داده شده و سپس این دو مقدار با هم جمع شده و نتیجه چاپ می‌شود.

[آموزش ساخت مفسر]

#Python #Programming #CodingTips #LearnPython #Interpreter #MiniLang
👍2
دانستی مخفی درباره پایتون 🐍

صبح بخیر دوستان! 🌞 آیا می‌دانستید که در پایتون، می‌توانید از توابعی استفاده کنید که درون خودشان صدا زده می‌شوند، به این حالت توابع بازگشتی می‌گویند (Recursion)!؟ شاید این ویژگی برای بسیاری ناشناخته باشد، اما با استفاده از این روش، می‌توانید مسائل پیچیده را به سادگی حل کنید.

یک مثال ساده از توابع بازگشتی، محاسبه فاکتوریل یک عدد است:

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

print(factorial(5)) # خروجی: 120
در این مثال، تابع factorial خودش را برای مقدارهای کوچکتر از n صدا می‌زند تا به مقدار نهایی برسد. این نکته کوچک می‌تواند برای بسیاری از مسائل ریاضی و الگوریتمی، کد شما را بسیار کوتاه‌تر و کارآمدتر کند. 🌟

روز خوبی داشته باشید! ☀️

[اینم لینک کانال ما ]

#Python #Recursion #CodingTips #ProgrammingSecrets #صبح_بخیر #پایتون #نکته_پایتون
👍1
نکته مهم در پایتون: استفاده از Decorators

در پایتون، Decorators یا دکوراتورها یکی از ابزارهای قدرتمند و پرکاربرد هستند که به شما این امکان را می‌دهند تا عملکرد یک تابع یا متد را بدون تغییر در کد اصلی آن، تغییر دهید یا گسترش دهید. 🌟

دکوراتور چیست؟
دکوراتور یک تابع است که یک تابع دیگر را به عنوان ورودی می‌گیرد و یک تابع جدید را برمی‌گرداند که معمولاً عملکردی اضافی به تابع اصلی اضافه می‌کند. 🎩

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

import time

def timing_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Elapsed time: {end_time - start_time:.4f} seconds")
return result
return wrapper

@timing_decorator
def my_function():
for _ in range(1000000):
pass

my_function()

در این مثال:
1. دکوراتور timing_decorator تعریف شده است که زمان اجرای تابع را اندازه‌گیری می‌کند.
2. با استفاده از @timing_decorator، تابع my_function با دکوراتور زمان‌بندی تزئین شده است.
3. هر بار که my_function اجرا می‌شود، زمان اجرای آن اندازه‌گیری و چاپ می‌شود. 🕒💡

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

به یاد داشته باشید: دکوراتورها می‌توانند خوانایی و مدیریت کد را بهبود بخشند، به شرطی که به درستی و با دقت استفاده شوند. 🎯📈

🔻بیا اینجا تا بیشتر یاد بگیری

#Python #CodingTips #Decorators #Programming #PythonTips #PythonTricks #LearnPython
👍3