دوره ویژه مقدماتی پایتون – Telegram
دوره ویژه مقدماتی پایتون
436 subscribers
248 photos
4 videos
250 links
Download Telegram
⁉️ تست 133 : خروجی کد زیر چیست؟
triple = lambda x : x* 3
add = lambda x, y : x + y
print(add(triple(3),4))

1️⃣: 7
️0%(0)
2️⃣: 34
️0%(0)
3️⃣: 13
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(42)
4️⃣: error
️0%(0)

👥: 42شرکت در نظر سنجی
✍️map

توابع map و filter توابع سطح بالایی هستند که خیلی پر کاربرد هستند و بر روی لیست ها (یا اشیا iterable) اعمال می شوند.
تابع map یک تابع و یک iterable را به عنوان ورودی می گیرد، تابع اعمالی را بر روی مقادیر iterable اعمال می کند و یک iterable جدید را به عنوان خروجی می دهد.
ایتریبل ها (iterable) مجموعه ای از اشیا هستند که اعضای خود را یکی یکی ارایه دهند.

def add_five(x) :
return x+5
nums = [11, 22, 33, 44, 55]
result = list(map(add_five, nums))
print(result)

خروجی :
>>>
[16, 27, 38, 49, 60]
>>>

📌ما با استفاده از تابع lambda می توانستیم به راحتی به این خروجی دست پیدا کنیم.
Nums = [11, 22, 33, 44, 55]

Result = list(map(lambda x: x+5, nums))
Print(result)

💡برای اینکه خروجی را به لیست تبدیل کنیم باید از عبارت list استفاده کنیم.

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

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

🆔 : @pythonchallenge
⁉️ تست 134 : جای خالی زیر را طوری پر کنید که هر یک از اعضای لیست را 2 برابر کند با استفاده از تابع lambda.
nums = [11, 22, 33]
a = list(map( ... x : ... , ... ))

1️⃣: func - nums - x**2
️0%(0)
2️⃣: lambda - list - x*2
️0%(0)
3️⃣: lambda - x*2 - nums
️||||||||||||||||||||||||||||||||||||||||||||||||||100%(33)

👥: 33شرکت در نظر سنجی
✍️Filter

تابع filter، مجموعه ی iterable ها را فیلتر میکند و آن هایی که با شرط مورد نیاز ما جور نیستند را حذف می کند.

Nums = [11, 22, 33, 44, 55]
Res = list(filter(lambda x : x%2 == 0, nums))
Print(res)

خروجی :
>>>
[22, 44]
>>>

💡در اینجا هم مانند تابع map احتیاج داریم که برای تبدیل خروجی به لیست از list استفاده کنیم.

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

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

🆔 : @pythonchallenge
⁉️تست 135 : جای خالی را طوری پر کنید که اعداد کمتر از 5 را از لیست خارج کند.
nums = [1,2,5,8,3,0,7]
res = list( ... (lambda x :x ... 5, ...)) print(res)
Anonymous Poll
3%
map - < - filter
22%
filter - > - nums
0%
filter - < - map
75%
filter - < - nums
✍️تولید کننده ها (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