دوره ویژه مقدماتی پایتون – Telegram
دوره ویژه مقدماتی پایتون
436 subscribers
248 photos
4 videos
250 links
Download Telegram
✍️تولید کننده ها (generators)

تولید کننده ها (generators) یک نوعی از iterable ها هستند مانند لیست ها و tupleها.
برخلاف لیست ها، نمی توانیم آن را اندیس دهی کنیم. اما می توانیم روی اعضای آن به صورت تکرار شونده با استفاده از loop اعمالی را انجام دهیم. generator ها می توانند توسط توایع و یا عبارت yield ساخته شوند.

def countdown():
i= 5
while I > 0 :
yield i
I -=1

For I in countdown():
Print(i)

خروجی :
>>>
5
4
3
2
1

⚠️عبارت yield برای تعریف یک generator استفاده می شود و می تواند جایگزین خروجی تابعی شود و برای فراخوانی کننده اش بدون اینکه نیاز باشد متغیر های محلی اش را از بین ببرد، خروجی تولید کند.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 136 : چه عبارتی در توابع استفاده می شود تا تبدیل به generator ها شوند؟

1️⃣: yield
️||||||||||||||||||||||||||||||||||||||||||||||||97%(36)
2️⃣: generate
️0%(0)
3️⃣: return
️|3%(1)

👥: 37شرکت در نظر سنجی
✍️Generators (2)

با استناد به حقیقتی که در لحظه یک آیتم yiled می شود، generator ها هیچ محدودیت حافظه ای برای تولید لیستشان نخواهند داشت. در واقع می توانند تا بی نهایت عمل کنند بدون اینکه نگران حافظه باشند.

def infinite_sevens():
while True:
yield 7

for I in infinite_sevens():
print(i)

خروجی :
>>>
7
7
7
7


⚠️به طور خلاصه می توان گفت که generator ها به شما این اجازه را می دهند که یک تابعی بسازید که مانند یک iterator عمل کند مثلا می تواند در حلقه ی for استفاده شود.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 137 : جاهای خالی زیر را طوری پر کنید که یک تولید کننده اعداد اول بسازید که همه ی اعداد اول را در loop توسط yield ایجاد می کند.
... get_primes():
num = 2
while True:
if is_prime(num):
... num
num +=1

1️⃣: int - for
️|3%(1)
2️⃣: get - yield
️|3%(1)
3️⃣: def - yield
️|||||||||||||||||||||||||||||||||||||||||||||||95%(35)

👥: 37شرکت در نظر سنجی
✍️Generator (3)

تولید کننده های (generators) محدود می توانند با انتقال شان به عنوان ورودی تابع لیست، به لیست تبدیل شوند.

def number(x):
for I in range(x):
if I % 2 == 0:
yield i

print(list(numbers(11)))

خروجی :
>>>
[0, 2, 4, 6, 8, 10]
>>>

📌استفاده از generator ها باعث افزایش کارایی می شود و باعث استفاده ی کمتر از حافظه می شود. به علاوه، لازم نیست که صبر کنیم کخ همه ی آیتم های مورد نیازمان تولید شوند تا بتوانیم انجام اعمال بر روی آن ها را شروع کنیم.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 138 : خروجی کد زیر چیست؟
def make_word():
word = ""
for ch in "spam":
word += ch
yield word

print(list(make_word()))

1️⃣: ['s', 'sp', 'spa', 'spam']
️||||||||||||||||||||||||||||||||||||||||||||||92%(33)
2️⃣: ['spam', 'spam', 'spam', 'spam', 'spam']
️|||6%(2)
3️⃣: "spam"
️|3%(1)

👥: 36شرکت در نظر سنجی
Forwarded from Python challenge️
🏆مسابقه نوروزی چالش پایتون

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

▪️فقط اعضای کلاس چالش پایتون در سامانه کوئرا میتوانند در این مسابقه نوروزی شرکت کنند. اگر عضو نشدید از طریق راهنمای زیر عضو شوید:

https://news.1rj.ru/str/pythonchallenge/528

🔹مسابقه راس ساعت 13 امروز شروع خواهد شد و ساعت 23 به اتمام خواهد رسید. در شرایط مساوی زمان در تعیین رتبه تاثیرگذار می باشد.

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
✍️ Decorators

زمانی که می خواهیم تابعی را با استفاده از یک تابع دیگر تغییر دهیم از decorator ها استفاده می کنیم.
این روش زمانی خوب است که می خواهید عملکرد یک تابع را افزایش دهید، اما نمی خواهید تابع را تغییر دهید.

def decor(func):
def wrap():
print(“============”)
func()
print(“============”)
return wrap

def print_text():
print(“hello world!”)

decorated = décor(print_text)
decorated()

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⚠️در بالا تابعی تعریف کردیم که نام آن را decor قرار دادیم که یک ورودی func دارد. در داخل decor، ما یک تابع تو در تو تعریف کردیم به نام wrap. تابع wrap یک رشته چاپ می کند و سپس تابع func() را فراخوانی می کند و یک رشته ی دیگر را چاپ می کند. تابع decor، تابع wrap را به عنوان خروجی باز می گرداند.
می توانیم بگوییم که متغیر decorated یک ورژن دکور شده از print_text است. یعنی print_text به علاوه ی یک چیز دیگر.
در حقیقت اگر یک دکور کننده مفید بنویسیم، ممکن است که بخواهیم که print_text را با یک ورژن دکور شده جابه جا کنیم و همیشه هر چیزی که می نویسیم به علاوه ی آن دکور چاپ شود. این کار با اختصاص دوباره ی متغیری که شامل تابع ما است انجام می شود.

Print_text = decor(print_text)
Print_text()

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 139 : decorator ها کدام هستند؟

1️⃣: توابعی که خودشان را باز می گردانند.
️0%(0)
2️⃣: توابعی که درون اسم آنها علامت @ وجود دارد
️0%(0)
3️⃣: توابعی که توابع دیگر را تغییر می دهند.
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(31)

👥: 31شرکت در نظر سنجی
✍️Decorator (2)

در مثال قبلی، ما تابعمان را با جایگزینی متغیری که شامل تابع دیگری بود دکور کردیم.

def print_text():
print(“hello world!”)

print_text = decor(print_text)

این الگو می تواند برای هر تابعی در هر زمان، برای تغییر تابع دیگر مورد استفاده قرار بگیرد.
پایتون این قابلیت را ایجاد کرده است که با اضافه کردن نام تابع دکور با @ قبل از توابع دیگر آن ها را تغییر دهیم.
یعنی زمانی که ما یک تابع تعریف می کنیم می توانیم آن را با نشان @ دکور کنیم.
@decor
def print_text():
print(“Hello world!”)

📌یک تابع می تواند چندین تابع دکور کننده داشته باشد.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 140 : کدام مورد زیر شبیه به کد ذکر شده عمل می کند؟
my_func = my_dec(my_func)

1️⃣: @my_dec
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(31)
2️⃣: my_func = @my_dec
️0%(0)
3️⃣: my_dec(my_func)
️0%(0)

👥: 31شرکت در نظر سنجی
✍️توابع بازگشتی (recursion)

توابع بازگشتی یکی از مهمترین مباحث در برنامه نویسی کاربردی هستند.
پایه ی کار توابع بازگشتی، "ارجاع به خود" است (یعنی توابعی که خودشان را فراخوانی می کنند). این توابع زمانی استفاده می شوند که یک برنامه پیچیده بتواند به به چندین زیر تابع شبیه به هم شکسته شود.
یکی از توابع معروف که با استفاده از توابع بازگشتی پیاده سازی شده اند تابع factorial است. که ضرب همه ی اعداد پایین یک عدد را محاسبه می کند. برای مثال :
5! (5 Factorial) : 5 * 4 * 3 * 2 * 1 = 120

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⚠️این روش با ضرب هر عدد در فاکتوریل عدد کوچکتر خود محاسبه می شود یعنی :

n * (n-1)!

که در نهایت به !1 می رسیم که برابر با مقدار 1 است و به عنوان حالت پایه شناخته می شود که می تواند بدون محاسبه ی هیچ فاکتوریلی جواب آن را به دست آورد.
در پایین کد پیاده سازی شده ی فاکتوریل نشان داده شده است:

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

print(factorial(5))

خروجی :
>>>
120
>>>

حالت پایه به عنوان حالت خروج توابع بازگشتی شناخته می شود.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 141 : حالت پایه ی تابع بازگشتی کدام است؟

1️⃣: حالتی که عدد 1 را بر می گرداند
️0%(0)
2️⃣: حالتی که تابع بازگشتی بعدی را فراخوانی نمی کند
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(30)
3️⃣: حالتی که هیچ گاه رخ نمی دهد
️0%(0)

👥: 30شرکت در نظر سنجی
✍️توابع بازگشتی – (قسمت دوم)

توابع بازگشتی می توانند مانند حلقه ی while بی نهایت، بی نهایت باشند. این حالت زمانی پیش می آید که شما فراموش می کنید حالت پایه را پیاده سازی کنید. در زیر یک ورژن اشتباه از فاکتوریل نشان داده شده است. این تابع دارای حالت پایه نیست و بنابراین تا زمانی که مفسر پاسخ می دهد و حافظه وجود دارد و برنامه crash نکرده است اجرا می شود.

def factorial(x):
return x * factorial(x-1)

print(factorial(5))

>>>
RuntimeError : maximum recursion depth exceeded
>>>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 142 : خروجی کد زیر چیست؟
def sum_to(x):
return x+sum_to(x-1)
print(sum_to(5))

1️⃣: 5
️0%(0)
2️⃣: 15
️0%(0)
3️⃣: RuntimeError
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(30)

👥: 30شرکت در نظر سنجی
✍️توابع بازگشتی – (قسمت سوم)

توابع بازگشتی می توانند غیر مستقیم اعمال شوند. یک تابع می تواند تابع دوم را صدا کند، تابع دوم تابع اول را، تابع اول تابع دوم را ... . این کار می تواند با هر تعداد تابع انجام شود.

def is_even(x):
if x == 0 :
return True
else:
return is_odd(x-1)

def is_odd(x):
return not is_even(x)

print(is_odd(17))
print(is_even(23))

خروجی :
>>>
True
False
>>>

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️تست 143 : خروجی کد زیر چیست؟
def fib(x):
if x == 0 or x ==1 :
return 1
else:
return fib(x-1) + fib(x-2)
print(fib(4))

1️⃣: 5
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(32)
2️⃣: 6
️0%(0)
3️⃣: 8
️0%(0)
4️⃣: error
️0%(0)

👥: 32شرکت در نظر سنجی
✍️Set

این نوع از set ها یک نوع ساختار داده است مثل لیست ها یا دیکشنری ها. با استفاده از { } و یا تابع set ساخته می شوند. بعضی از عملکرد هایش شبیه لیست ها است، مثل استفاده از in برای اینکه بررسی کنیم که یک آیتم در آن وجود دارد یا نه.

Num_set = {1, 2, 3, 4, 5}
Word_set = set([“spam”, “eggs”, “sausage”])

Print(3 in num_set)
Print(“spam” not in word_set)

خروجی :
>>>
True
False
>>>

📌برای ساخت یک set خالی، باید از set() استفاده کنید. همان طور که از {} برای ساخت دیکشنری خالی استفاده می کردیم.

بعد مطالعه متن فوق به سوال زیر لطفا پاسخ بدهید:

🗂 مرکز آموزش پایتون

🆔 : @pythonchallenge
⁉️ تست 144 : خروجی کد زیر چیست؟
letters = {"a", "b", "c", "d"}
if "e" not in letters:
print(1)
else:
print(2)

1️⃣: 1
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(35)
2️⃣: 2
️0%(0)
3️⃣: 1 2
️0%(0)

👥: 35شرکت در نظر سنجی