4 : آموزش پایتون فانکشن ها 2
پیشگفتار
توی قسمت قبلی با ماژول و نحوه استفاده اونها در پروژه آشنا شدیم. یکمی هم در مورد فانکشن ها یاد گرفتیم ، نحوه تعریفشون و صدا زدنشون و مقدار بازگشتی شون. حالا توی این قسمت میخوایم بیشتر بریم تو عمق فانکشن ها و با جزییات بیشتری قابلیت هایی که دارند رو بررسیشون بکنیم.
صدا زدن توابع دیگر
یکی از پرکاربردترین موارد استفاده از توابع در پایتون زمانی است که میخواهیم از درون یک تابع تابع دیگری را صدا بزنیم.
import turtle
def draw_triangle(t,size):
for i in range(3):
t.forward(size)
t.left(120)
def draw_polygone(t,n,size):
for i in range(n):
draw_triangle(t,50)
t.forward(size)
t.left(360/n)
def main():
win=turtle.Screen()
laki=turtle.Turtle()
draw_polygone(laki,9,100)
win.exitonclick()
if __name__="__main__":
main()
ترتیب اجرای دستورات
یک موضوع مهم در مورد توابع که باید همیشه در نظر داشته باشیم ترتیب اجرای دستورات در پایتون است.
def pow(b, p):
y = b ** p
return y
def square(x):
a = pow(x, 2)
return a
n = 5
result = square(n)
print(result)
تابع اصلی یا Main Function
قبل از اینکه برنامه پایتون اجرا بشه چنتا متغیر مهم و چک میکنه که ببینه وجود دارند و اگر وجود داشتن اول اونها رو اجرا اجرا میکنه یکی از مهمترینشوت متغیر __name__ هستش.
با این متغیر ما میتونیم بفهیم که برنامه ما خودش خودش رو اجرا کرده یا از طریق دیگه ای اجرا شده با یه دستور if :
def squareit(n):
return n * n
def cubeit(n):
return n*n*n
def main():
anum = int(input("Please enter a number"))
print(squareit(anum))
print(cubeit(anum))
if __name__ == "__main__":
main()
در کد بالا چک کردیم که آیا برنامه از طریق خودش اجرا شده یا حیر و وقتی مطمئن شدیم که از طریق خودش اجرا میشه تابع main() را صدا زدیم. در غیر این صورت احتمالا تابع ما ایمپورت شده و ما نمیخوایم که وقتی تابعمون ایمپورت میشه اتوماتیک تابع main صدا زده بشه.
توسعه برنامه
تا اینجا شما باید بتونین با نگاه کردن به هر تابعی بفهمین که کارش چیه و ترتیب اجرای دستوراتش چجوریه و کجا و چطوری صدا زده شده.
حالا وقتی بریم سراغ توابع پیچیده تر و طولانی تر خیلی درگیر ارورهای مختلفی میشیم که درست کردنشون میتونه خیلی زمانبرو سردردآور باشه. من اینجا میخوام یه روشی از برنامه نویسی بهتون بگم که این مشکلات به حداقل میرسونه.
برنامه نویسی پله ای : یعنی اینکه بجای اینکه کل تابعمونو یکباره بنویسیم و خروجی نهایی درست ازش بگیریم ، بیایم بصورت پله ای در هر پله یک قسمت به تابع اضافه کنیم و یک قدم به خروجی نهایی دلخواهمون نزدیک بشیم . با یک مثال این مدل برنامه نویسی رو کامل باهم دیگه تجربش میکنیم :
اگر یادتون بیاید توی ریاضی اول دبیرستان وقتی میخواستیم فاصله دو نقطه رو حساب کنیم از فرمول زیر استفاده میکردیم
حالا میخوایم تابعی بنویسیم که اینکارو برامون انجام بده ولی به روش برنامه نویسی پله ای:
خب برای اولی قدم میدونم که ورودی و تابع به شکل زیر هستش :
def distance(x1, y1, x2, y2):
return 0.0
خب درسته که این تابع درست نیست و فاصله دو نقطه رو بهمون نمیده ولی از نظر پایتون مشکلی نداره و بدون خطا اجرا میشه. پس پله اول رو رفتیم بالا خب برای قدم بعدی میدونیم که باید x2-x1 و y2-y1 حساب کنیم که میشه :
def distance(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
return 0.0
الان هم برنامه بدون خطا اجرا میشه ، حالا dx,dy به توان 2 میرسونیم و باهم جمع میکنیم و داخل یه متغیر جدید به اسم dsqured میریزیم:
def distance(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
dsquared = dx**2 + dy**2
return 0.0
خب برای اخرین مرحله dsqured ضرب در 0.5 میکنیم که ریششو دربیاریم و چنتا تست هم مینویسیم که مطمئن بشیم تابعمون درست کار میکنه :
import test
def distance(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
dsquared = dx**2 + dy**2
result = dsquared**0.5
return result
test.testEqual(distance(1,2, 1,2), 0)
test.testEqual(distance(1,2, 4,6), 5)
test.testEqual(distance(0,0, 1,1), 1.41)
ترکیب
دیدیم که میتونیم تابعی رو از یه تابع دیگه صدا بزنیم و ازش استفاده کنیم ، به این کار میگن توابع ترکیبی که در واقع به همدیگه وابسته هستند.
به عنوان یه مثال ترکیبی میخوایم یه تابع بنویسیم که محیط دایره رو حساب کنه ولی شعاع دایره رو نداریم. برای شعاع دایره دونقطه داریم که میتونیم از تابع قبلیمون استفاده کنیم پس به این صورت میتونیم شعاع دایره مونو بدست بیاریم
radius = distance(xc, yc, xp, yp)
تو قدم بعدی تابعی مینویسیم که محیط دایره رو حساب کنه :
def distance(x2,x1,y2,y1):
difx=x2-x1
dify=y2-y1
disquard=difx**2+dify**2
return disquard**0.5
def circle(r):
return 3.1415*r**2
def circleArea(x2,x1,y2,y1):
radius=distance(x2,x1,y2,y1)
print(circle(radius))
circleArea(10,54,10,10)
نمودار میله ای لاکپشت
به عنوان یه تمرین برای این که قسمت توابع رو تموم کنیم با استفاده از لاک پشت میخوایم تابعی بنویسیم که یه نمودار برای یک لیست که به عنوان ورودی دریافت میکنه بنویسیم.
xs = [48, 117, 200, 240, 160, 260, 220]
برناممون به شکل زیر میشه :
import turtle
def drawBAr(t,height):
t.begin_fill()
t.left(90)
t.forward(height)
t.write(str(height))
t.right(90)
t.forward(40)
t.right(90)
t.forward(height)
t.left(90)
t.end_fill()
def drawbars(list,t):
for i in list:
drawBAr(t,i)
data=[10,50,40,80,90,110,25,44,36,190,10,25]
win=turtle.Screen()
laki=turtle.Turtle()
drawbars(data,laki)
win.exitonclick()
خاتمه
خب بچه ها به آخر این قسمت رسیدیم امیدوارم که این آموزش هم بدردتون خورده باشه ، برای تهیه این آموزش کلی وقت صرف شده پس لطفا با شیر کردن و لایک و کامنتاتون حمایت کنید و مواظب خودتون باشین تا بعد خداحافظ .
قسمت 1 آموزش پایتون به زبان ساده
دیدگاهتان را بنویسید