توابع
فراخوانی تابع
در حوزه برنامهنویسی، یک تابع دنبالهای از جملات است که یک محاسبات را انجام میدهد. درواقع ما با تعیین یک نام و یک سری دستورات، میتوانیم یک تابع را تعریف کنیم و آنگاه با صداکردن نام آن تابع، خواهیم توانست آن را فراخوانی کنیم. بسیاری از دستوراتی را که تابحال از آنها استفاده میکردیم، درواقع تابع بودند:
type(32)
<class 'int'>
که در این جا نام تابع type
است.
توابع داخلی
توابع داخلی (Built-in) اینها توابعی هستند که توسط سازندگان پایتون تعبیه شدهاند و برای حل مسائل عمومی مورد استفاده قرار میگیرند.
نمونهای از این توابع عبارتند از:
max('Hello world')
'w'
min('Hello world')
' '
len('Hello world')
11
توابع تبدیل نوع
توابع تبدیل نوع (Type Conversion) اینها نوع دیگری از توابع داخلی هستند که مقدار یک نوع را به نوعی دیگر تبدیل میکنند:
int(3.99999)
3
int(-2.3)
-3
float('3.14159')
3.14159
توابع ریاضی
پایتون دارای یک ماژول ریاضی است که اکثر توابع ریاضی مشهور را ارائه میدهد. اما قبل از اینکه بتوانیم از ماژول استفاده کنیم، باید آن را وارد (import
) کنیم:
import math
این عبارت یک شی ماژول به نام math
ایجاد می کند.
برای دسترسی به یکی از توابع، باید نام ماژول و نام تابع را که با یک نقطه از هم جدا شده اند (که به عنوان نقطه نیز شناخته می شود) مشخص کنیم. به این فرمت، علامت نقطه می گویند.
= signal_power / noise_power
ratio = 10 * math.log10(ratio)
decibels = 0.7
radians = math.sin(radians) height
اعداد تصادفی
به نظر میرسد که ساختن یک برنامه واقعاً غیر قطعی چندان آسان نیست، اما راههایی وجود دارد که حداقل غیرقطعی به نظر برسد. یکی از آنها استفاده از الگوریتمهایی است که اعداد شبه تصادفی (Random) تولید میکنند. درست است که اعداد شبه تصادفی واقعاْ تصادفی نیستند اما بازهم تمایز آنها از اعداد تصادفیُ غیرممکن است.
ماژول random
توابعی را بدست میدهد که اعداد تصادفی تولید میکنند.
یک مثال را باهم ببینیم:
import random
for i in range(10):
= random.random()
x print(x)
0.0920530236235576
0.6250171315179012
0.7706549349232131
0.7402147110407385
0.15988207593735793
0.4024047009691475
0.8179640452074257
0.44502244153994786
0.8980030614870437
0.9357510761663985
این برنامه یک لیستی از اعداد تصادفی بین 0
و 1
تولید میکند که شامل 1
نمیشوند:
مثالهایی دیگر از توابع random
عبارتند از:
5, 10) random.randint(
7
= [1, 2, 3]
t random.choice(t)
3
افزودن یک تابع جدید
ما معمولاْ برای پیشبرد اهداف برنامه موردنظرمان، نیاز به تعریف توابع جدید خواهیم داشت. این توابع در آینده بارها و بارها میتوانند مورد استفاده قرار گیرند.
در مثال زیر، یک تابع به نام print_lyrics
تعریف میکنیم:
def print_lyrics():
print("I'm a lumberjack, and I'm okay.")
print('I sleep all night and I work all day.')
همانطور که در این مثال میبینید، کلمه کلیدی def
برای تعریف تابع بکار برده میشود. با تعریف یک تابع، یک متغیر با همان نام ایجاد میشود. نحو فراخوانی تابع جدید مانند توابع داخلی است:
print_lyrics()
I'm a lumberjack, and I'm okay.
I sleep all night and I work all day.
ما حتی میتوانیم یک تابع تعریف شده را درون تابع دیگر، فراخوانی کنیم.
پارامترها و آرگومانها
برخی از توابع داخلی که دیدهایم به آرگومان نیاز دارند. برای مثال، وقتی تابع math.sin
را فراخوانی میکنیم، باید یک عدد را به آن بدهیم. به این ورودی، آرگومان (Argument)
گفته میشود.
توابع دارای خروجی و توابع بدون خروجی
در اجرای برخی توابع، با اتمام آخرین دستور تابع، مقداری را به عنوان نتیجه در خروجی میبینیم. این توابع را Fruitful مینامند:
import math
5) math.sqrt(
2.23606797749979
اما این اتفاق برای همه توابع رخ نمیدهد. درواقع این توابع کاری را انجام دادهاند که بصورت خروجی قابل نمایش نیست. این توابع را Void مینامند:
def No_reult_func ():
= math.cos(radians) x
پروژه
به کد زیر نگاه کنید که یک ماشین حساب ساده است و ببینید کدام مطالبی که توی این بخش گفته شده استفاده شده.
# وارد کردن پکیج های مورد نیاز
import tkinter as tk
# تابع برای محاسبه نتیجه بر اساس عملگر
def calculate():
try:
= float(entry1.get()) # گرفتن عدد اول
num1 = float(entry2.get()) # گرفتن عدد دوم
num2 = operator.get() # گرفتن عملگر
op
# بررسی نوع عملگر با شرطها
if op == "+":
= num1 + num2
result elif op == "-":
= num1 - num2
result elif op == "*":
= num1 * num2
result elif op == "/":
if num2 == 0:
="خطا: تقسیم بر صفر!")
result_label.config(textreturn
= num1 / num2
result else:
="عملگر نامعتبر است")
result_label.config(textreturn
# نمایش نتیجه
=f"نتیجه: {result}")
result_label.config(text
except ValueError:
# خطا در صورت وارد کردن عدد نامعتبر
="لطفاً فقط عدد وارد کنید")
result_label.config(text
# ساخت پنجره اصلی
= tk.Tk()
window "ماشین حساب ساده")
window.title("300x250")
window.geometry(
# ساخت ویجتها
= tk.Label(window, text="عدد اول:")
label1 = tk.Entry(window)
entry1
= tk.Label(window, text="عدد دوم:")
label2 = tk.Entry(window)
entry2
= tk.Label(window, text="عملگر (+ - * /):")
label_op = tk.Entry(window)
operator
= tk.Button(window, text="محاسبه", command=calculate)
calc_button = tk.Label(window, text="نتیجه: ", fg="blue")
result_label
# قرار دادن ویجتها در پنجره
label1.pack()
entry1.pack()
label2.pack()
entry2.pack()
label_op.pack()
operator.pack()
=10)
calc_button.pack(pady
result_label.pack()
# اجرای برنامه
window.mainloop()