زیربرنامه چیست؟
یک سبک کد نویسی است ، پس تا امروز هر کدی رو که نوشتیم می تونیم بیاییم و با زیر برنامه مرتبشون کنیم. امروز میخواهیم مدل کد نویسیمون رو تغییر بدیم، یعنی تا امروز ما همه کدها رو یکجا نوشتیم، ولی:
چرا از زیربرنامه استفاده کنیم؟
- اگر تعداد کدهای برنامه زیاد باشد
- اگر بخواهیم چندین کار رو با کدنویسی انجام بدیم یه شلوغی و شلختگی در کدهای ما بوجود میاد
- اگر مشکلی در برنامه پیش بیاد، امکان خطایابی سخت می شه، کنترل سخت تر میشه
- اگر بخواهیم یه کدی رو دوبار اجرا کنیم ، باید دوباره نویسی کنیم
راه حل: برای حل چنین مشکلاتی ما از زیربرنامه استفاده می کنیم.
تعریف زیربرنامه:
بخشی از یک برنامه است که بصورت مستقل نوشته می شود، بصورت مستقل اجرا می شود، و هر زیربرنامه با فراخوانی دستورات مربوطه را اجرا می کند ، یعنی زیر برنامه را یکبار می نویسیم و می توانیم چندین بار فراخوانی کنیم.
مزایای زیربرنامه:
- کدها تکه تکه می شود و هر تکه مستقل و مجزا می شود
- خوانایی برنامه بالا میره
- خطایابی آسونتر می شه
- کارتیمی راحتتر میشه؛ یعنی هر کسی بخشی از کد رو می نویسه و به برنامه اصلی اضافه می کنه
فرق زیربرنامه با تابع:
زیر برنامه دو نوع می باشد، ولی در اکثر موارد زیر برنامه را همان تابع می گویند چون اصول کد نویسی هر دو مدل یکسان می باشد ولی تفاوتهایی هم دارند:
روال، رویه یا Procedure
خروجی ندارد
تابع یا Function
می تواند خروجی داشته باشد
ساختار نوشتن زیربرنامه (هر دو نوع: تابع، روال):
def function_name(parameters):
# دستورات
return value
می تونه پارامتر داشته باشه یا نداشته باشه؛ (پارامتر چیست؟ در داخل زیربرنامه، اون متغیرهایی که وجود داره، مقادیری است که از بیرون به داخل زیربرنامه ارسال میشه = ورودی ها)
آرگومان چیست؟ اون متغیرهایی که در فراخوانی اجرا می شوند.
و اگر تابع خروجی داشته باشه توسط دستور return مقدار خروجی رو برگشت می دیم.
نکته: حتما برای استفاده از زیربرنامه باید آنرا فراخوانی کنیم
مثال اول: نمایش اعداد ۱ تا ۱۰
الف) تعریف و فراخوانی تابع
def p1():
for i in range(1, 11, 1):
print(i)
p1()
ب) فراخوانی چندباره تابع
def p1():
for i in range(1, 11, 1):
print(i)
p1()
p1()
p1()
ج) استفاده از pass برای تابع بدون کد
def p1():
for i in range(1, 11, 1):
print(i)
def p2():
pass
p1()
در بلوکهای آن تابع می نویسیم pass یعنی ورودی و خروجی ندارد، بعدا میخوام این تابع رو کد نویسی کنم. حتما تورفتگی رو رعایت کنید.
پروژه ۲: محاسبه فاکتوریل
برنامه ای بنویسید که توسط زیر برنامه عددی را دریافت کرده، فاکتوریل آنرا محاسبه و نمایش دهد.
def p1():
n = int(input("adadi ra vared konid:"))
f = 1
for i in range(1, n+1, 1):
f = f * i
print(f)
p1()
توضیح: این محاسبه مقدار فاکتوریل ۳ است. به این ترتیب مینویسیم:
این محاسبه نشان میدهد که تعداد حالتهایی که ارقام ۱, ۲, ۳ می توانند جابجا شوند (جایگشت داشته باشند) تا یک عدد سه رقمی ایجاد کنند برابر است با ۶.
نکته: اگر در مسئله بالا تکرار مجاز باشد، تعداد حالاتی که میتوان یک عدد سه رقمی با ارقام ۱ و ۲ و ۳ ساخت، طبق اصل ضرب برابر است با:
افزودن ورودی (پارامتر) به زیربرنامه
یعنی در هنگام فراخوانی آرگومانی رو به زیربرنامه ارسال کنیم، که داخل پارامتر قرار گیردو در داخل زیربرنامه استفاده شود.
پارامتر چیست:
مقداری است که هنگام فراخوانی زیربرنامه به زیربرنامه ارسال می شود. مقداری است که به زیر برنامه می دهیم.
داده چیست:
متغیری است که در هنگام فراخوانی زیربرنامه به زیربرنامه ارسال می شود.
انواع ارسال داده ها به زیربرنامه:
- اجباری: یعنی باید ارسال شوند وگرنه خطا میدهد و اجرا نمی شود.
- اختیاری: یعنی یه مقدار پیش فرض در نظر می گیریم. درهنگام تعریف زیر برنامه یه مقدار اولیه به پارامتر بدهیم اگر اون پارامتر ارسال نشود اون مقدار پیش فرض جایگزین می شود.
- تاپل
- دیکشنری
۱- حالت اجباری پارامتر
در این حالت باید هنگام فراخوانی تابع، مقدار پارامتر را ارسال کنیم وگرنه خطا دریافت میکنیم.
مثال اشتباه (خطا):
def p1(n):
print(n)
p1() # خطا! آرگومان n ارسال نشده
در این حالت به ما خطا می دهد و می گوید شما آرگومان n رو ارسال نکردید چون اینجا حالت اجباری است.
مثال صحیح:
def p1(n):
print(n)
p1(5)
۵
مثال اشتباه دیگر:
def p1(n):
print(n)
p1(5, 7) # خطا! دو آرگومان ارسال شده درحالیکه تابع یک پارامتر دارد
خطا، چون من دو آرگومان p1(5,7) ارسال کردم در حالیکه زیربرنامه من فقط یک پارامتر دارد def p1(n):
نکته مهم: تعداد پارامتر و آرگومان باید یکی باشد.
مثال با رشته:
def p1(n):
print(n)
p1("password")
password
مثال با دو پارامتر اجباری:
def p1(n, m):
print(n, m)
p1(5, 7)
۵ ۷
۲- حالت اختیاری پارامتر
در این حالت میتوانیم برای پارامتر مقدار پیشفرض تعریف کنیم. اگر هنگام فراخوانی مقداری ارسال نشود، از مقدار پیشفرض استفاده میشود.
مثال ۱: ارسال مقدار جدید (اولویت با مقدار ارسالی)
def p1(n, m=10):
print(n, m)
p1(5, 7)
۵ ۷
مقدار پیشفرض ۱۰ است، اما چون در فراخوانی مقدار ۷ ارسال شده، اولویت با مقدار ارسالی است.
مثال ۲: استفاده از مقدار پیشفرض
def p1(n, m=10):
print(n, m)
p1(5)
۵ ۱۰
چون مقدار m ارسال نشده، از مقدار پیشفرض ۱۰ استفاده میشود.
۳- حالت تاپل پارامتر (*args)
با استفاده از یک ستاره (*) قبل از نام پارامتر، میتوانیم تعداد دلخواهی آرگومان دریافت کنیم. این آرگومانها به صورت تاپل ذخیره میشوند.
مثال ۱: بدون ارسال آرگومان اضافی
def p1(n, *m):
print(n)
print(m)
p1(5)
۵() # تاپل خالی
مثال ۲: ارسال چندین آرگومان
def p1(n, *m):
print(n)
print(m)
p1(5, 7, 8, 9, 10)
۵(۷, ۸, ۹, ۱۰) # تاپل شامل مقادیر اضافی
۴- حالت دیکشنری پارامتر (**kwargs)
با استفاده از دو ستاره (**) قبل از نام پارامتر، میتوانیم آرگومانهای کلید-مقدار دلخواهی دریافت کنیم. این آرگومانها به صورت دیکشنری ذخیره میشوند.
def p1(n, *m, **k):
print(n)
print(m)
print(k)
p1(5, 7, 8, 9, name='sara', family='monfared')
۵(۷, ۸, ۹){'name': 'sara', 'family': 'monfared'}
نکته: حالت دیکشنری داده اختیاری و دلخواه است، میتوانید هر چندتا داده که خواستید ارسال کنید ولی به صورت کلید-مقدار است. یعنی نمیتوانید فقط مقدار بدهید.
📚 خلاصه انواع پارامترها
پارامتر اجباری
def func(x):
باید حتما ارسال شود
پارامتر اختیاری
def func(x=10):
مقدار پیشفرض دارد
پارامتر دیکشنری (**kwargs)
def func(**kwargs):
کلید-مقدار دلخواه
۱۰ پروژه پایتون برای انواع داده در زیربرنامه
تمرین عملی انواع پارامترها در توابع پایتون
محاسبه میانگین اعداد
📝 صورت مسئله:
تابعی بنویسید که با استفاده از پارامترهای اجباری، میانگین سه عدد را محاسبه کند.
🎯 خروجی مورد انتظار:
میانگین اعداد ۵، ۱۵ و ۲۵: ۱۵٫۰
def calculate_average(num1, num2, num3):
return (num1 + num2 + num3) / 3
# فراخوانی تابع
result1 = calculate_average(10, 20, 30)
result2 = calculate_average(5, 15, 25)
print("میانگین اعداد ۱۰، ۲۰ و ۳۰:", result1)
print("میانگین اعداد ۵، ۱۵ و ۲۵:", result2)
ماشین حساب با پارامتر اختیاری
📝 صورت مسئله:
تابعی بنویسید که دو عدد و یک عملگر (با مقدار پیشفرض ‘+’) دریافت کند و عملیات ریاضی را انجام دهد.
🎯 خروجی مورد انتظار:
۱۵ – ۳ = ۱۲
۱۵ * ۳ = ۴۵
۱۵ / ۳ = ۵٫۰
def calculator(a, b, operator='+'):
if operator == '+':
return a + b
elif operator == '-':
return a - b
elif operator == '*':
return a * b
elif operator == '/':
return a / b
# فراخوانی تابع
print("15 + 3 =", calculator(15, 3))
print("15 - 3 =", calculator(15, 3, '-'))
print("15 * 3 =", calculator(15, 3, '*'))
print("15 / 3 =", calculator(15, 3, '/'))
جمع اعداد با پارامتر تاپل (*args)
📝 صورت مسئله:
تابعی بنویسید که بتواند هر تعداد عدد را دریافت کرده و مجموع آنها را محاسبه کند.
🎯 خروجی مورد انتظار:
مجموع ۱۰، ۲۰، ۳۰، ۴۰: ۱۰۰
مجموع اعداد ۵: ۵
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
# فراخوانی تابع با تعداد مختلف آرگومان
print("مجموع ۱، ۲، ۳:", sum_numbers(1, 2, 3))
print("مجموع ۱۰، ۲۰، ۳۰، ۴۰:", sum_numbers(10, 20, 30, 40))
print("مجموع اعداد ۵:", sum_numbers(5))
ثبت اطلاعات دانشجو با پارامتر دیکشنری (**kwargs)
📝 صورت مسئله:
تابعی بنویسید که اطلاعات دانشجو را به صورت دیکشنری دریافت کرده و نمایش دهد.
🎯 خروجی مورد انتظار:
نام: علی
نام خانوادگی: احمدی
سن: ۲۰
معدل: ۱۸٫۵
def register_student(**student_info):
print("اطلاعات دانشجو:")
for key, value in student_info.items():
print(f" {key}: {value}")
# فراخوانی تابع
register_student(
name="علی",
family="احمدی",
age=20,
average=18.5
)
تبدیل واحد دما
📝 صورت مسئله:
تابعی بنویسید که دما را از سلسیوس به فارنهایت تبدیل کند (با پارامتر اجباری).
🎯 خروجی مورد انتظار:
۱۰۰°C = 212°F
۳۷°C = 98.6°F
def celsius_to_fahrenheit(celsius):
fahrenheit = (celsius * 9/5) + 32
return round(fahrenheit, 1)
# فراخوانی تابع
temps = [0, 100, 37]
for temp in temps:
result = celsius_to_fahrenheit(temp)
print(f"{temp}°C = {result}°F")
پیام خوشامدگویی با پارامتر اختیاری
📝 صورت مسئله:
تابعی بنویسید که نام کاربر را دریافت کند و پیام خوشامدگویی بدهد (زمان پیشفرض = صبح).
🎯 خروجی مورد انتظار:
عصر بخیر، سارا!
شب بخیر، محمد!
def greet(name, time="صبح"):
greetings = {
"صبح": "صبح بخیر",
"عصر": "عصر بخیر",
"شب": "شب بخیر"
}
return f"{greetings[time]}، {name}!"
# فراخوانی تابع
print(greet("علی"))
print(greet("سارا", "عصر"))
print(greet("محمد", "شب"))
پیدا کردن بزرگترین عدد با *args
📝 صورت مسئله:
تابعی بنویسید که هر تعداد عدد دریافت کرده و بزرگترین آنها را پیدا کند.
🎯 خروجی مورد انتظار:
بزرگترین عدد بین ۱۰، ۲۰، ۳۰، ۴۰، ۲۵: ۴۰
بزرگترین عدد بین ۷: ۷
def find_max(*numbers):
if not numbers:
return None
max_num = numbers[0]
for num in numbers:
if num > max_num:
max_num = num
return max_num
# فراخوانی تابع
print("بزرگترین عدد بین ۱، ۵، ۳:", find_max(1, 5, 3))
print("بزرگترین عدد بین ۱۰، ۲۰، ۳۰، ۴۰، ۲۵:", find_max(10, 20, 30, 40, 25))
print("بزرگترین عدد بین ۷:", find_max(7))
ایجاد پروفایل کاربر با **kwargs
📝 صورت مسئله:
تابعی بنویسید که اطلاعات پروفایل کاربر را دریافت و فرمت کند.
🎯 خروجی مورد انتظار:
============
نام کاربری: ali_ahmadi
ایمیل: ali@example.com
سن: ۲۵
شهر: تهران
============
def create_profile(**user_data):
print("پروفایل کاربر:")
print("============")
for key, value in user_data.items():
print(f"{key}: {value}")
print("============")
# فراخوانی تابع
create_profile(
username="ali_ahmadi",
email="ali@example.com",
age=25,
city="تهران"
)
چک کردن عدد اول
📝 صورت مسئله:
تابعی بنویسید که بررسی کند آیا یک عدد اول است یا خیر.
🎯 خروجی مورد انتظار:
۱۰ عدد اول نیست
۱۳ عدد اول است
۱ عدد اول نیست
پروژه: محاسبه فاکتوریل با زیربرنامه
📝 صورت مسئله:
برنامهای بنویسید که عددی را از کاربر دریافت کرده، به داخل زیربرنامه ارسال کند و فاکتوریل آن را محاسبه و نمایش دهد.
🧮 مفهوم فاکتوریل چیست؟
فاکتوریل یک عدد صحیح مثبت (n!) حاصل ضرب تمام اعداد صحیح مثبت از ۱ تا آن عدد است.
🎯 کاربردهای فاکتوریل در دنیای واقعی
🔢 ترکیبیات و احتمال
برای محاسبه تعداد حالات مختلف چیدن اشیا در کنار هم
📊 آمار
در توزیعهای آماری و محاسبات مرتبط با احتمال
🧮 ریاضیات گسسته
در مبحث جایگشتها و ترکیبات
📝 مثال کاربردی ساده:
مسئله: ۴ نفر میخواهند در یک صف بایستند. چند حالت مختلف برای ایستادن آنها وجود دارد؟
💻 کد پایتون محاسبه فاکتوریل:
def factorial(n):
"""
تابع محاسبه فاکتوریل یک عدد
ورودی: n (عدد صحیح)
خروجی: فاکتوریل عدد n
"""
if n == 0 or n == 1:
return 1
result = 1
for i in range(2, n + 1):
result *= i
return result
# 📥 دریافت عدد از کاربر
try:
num = int(input("لطفاً یک عدد صحیح وارد کنید: "))
if num < 0:
print("فاکتوریل برای اعداد منفی تعریف نشده است!")
else:
# 📤 فراخوانی تابع و نمایش نتیجه
fact = factorial(num)
print(f"فاکتوریل {num} برابر است با: {fact}")
except ValueError:
print("لطفاً فقط عدد وارد کنید!")
🎯 نمونه اجرای برنامه:
ورودی ۱:
لطفاً یک عدد صحیح وارد کنید: ۵
ورودی ۲:
لطفاً یک عدد صحیح وارد کنید: ۰
ورودی ۳:
لطفاً یک عدد صحیح وارد کنید: -۳
🔍 توضیح الگوریتم:
مراحل محاسبه فاکتوریل ۵:
- شروع با result = 1
- i = 2 → result = 1 × ۲ = ۲
- i = 3 → result = 2 × ۳ = ۶
- i = 4 → result = 6 × ۴ = ۲۴
- i = 5 → result = 24 × ۵ = ۱۲۰
🔹 پارامترها در توابع پایتون
پارامتر: مقداری است
که از برنامه اصلی به زیر برنامه ارسال میشود. این پارامتر را به ۴ روش میتوان ارسال کردکه گفتیم.
🔸 انواع متغیر از نظر سطح دسترسی
۱٫ متغیر سراسری (Global)
در برنامه اصلی تعریف میشود، هم در برنامه اصلی و هم در زیربرنامهها قابل دسترسی است.
def p1(): # خط ۱ print(n) # خط ۲ n = 10 # خط ۴ print(n) # خط ۵ p1() # خط ۶ print(n) # خط ۷
📤 خروجی:
۱۰
۱۰
۱۰
📝 توضیح:
زیر برنامه ای به نام p1 داریم
در برنامه اصلی متغیری داریم به نام n=10 دارم
خط ۶ می گم p1 را فراخوانی کن
خط ۷ می گم n دوباره پرینت کن n
برنامه از خط ۴ شروع میشه، در خط ۴ میاد مقدار ۱۰ رو درون متغیر قرار میده و پرینت می کنه ۱۰ رو و سپس خط ۷
پس در زیر برنامه در حالت پیش فرض ، متغیرهای سراسری قابل دستیابی هستند.
۲٫ متغیر محلی (Local)
فقط داخل زیربرنامه تعریف میشود و فقط در زیربرنامه قابل دسترسی است.
def p1(): # خط ۱ n = 40 # خط ۲ print(n) # خط ۳ n = 10 # خط ۵ print(n) # خط ۶ p1() # خط ۷ print(n) # خط ۸
📤 خروجی:
۱۰
۴۰
۱۰
📝 توضیح:
در خط ۵ متغیر سراسری n=10 تعریف شده است.
در خط ۶ مقدار ۱۰ چاپ میشود.
در خط ۷ تابع p1 فراخوانی میشود که داخل آن یک متغیر محلی n=40 تعریف شده و چاپ میشود.
در خط ۸ دوباره متغیر سراسری n=10 چاپ میشود.
💡 پروژههای کاربردی
📊 پروژه ۱: محاسبه حقوق کارمندان با متغیر سراسری
محاسبه حقوق نهایی با احتساب مالیات ثابت به عنوان متغیر سراسری
# متغیر سراسری مالیات tax_rate = 0.15 def calculate_salary(base_salary): # دسترسی به متغیر سراسری tax_rate tax_amount = base_salary * tax_rate net_salary = base_salary - tax_amount print(f"حقوق پایه: {base_salary}, مالیات: {tax_amount:.1f}, حقوق خالص: {net_salary:.1f}") return net_salary # برنامه اصلی print("محاسبه حقوق کارمندان:") emp1 = calculate_salary(5000) emp2 = calculate_salary(7500) emp3 = calculate_salary(6000)
📌 خروجی پروژه:
محاسبه حقوق کارمندان:
حقوق پایه: ۵۰۰۰, مالیات: ۷۵۰٫۰, حقوق خالص: ۴۲۵۰٫۰
حقوق پایه: ۷۵۰۰, مالیات: ۱۱۲۵٫۰, حقوق خالص: ۶۳۷۵٫۰
حقوق پایه: ۶۰۰۰, مالیات: ۹۰۰٫۰, حقوق خالص: ۵۱۰۰٫۰
👥 پروژه ۲: شمارنده بازدید با متغیر محلی
شمارنده تعداد بازدید از یک صفحه با استفاده از متغیر محلی
def page_visitor(): # متغیر محلی شمارنده visit_count = 0 def increment(): nonlocal visit_count visit_count += 1 return visit_count return increment # ایجاد شمارنده مجزا برای هر صفحه page1_counter = page_visitor() page2_counter = page_visitor() print("بازدید صفحه ۱:", page1_counter()) print("بازدید صفحه ۱:", page1_counter()) print("بازدید صفحه ۲:", page2_counter())
📌 خروجی پروژه:
بازدید صفحه ۱: ۱
بازدید صفحه ۱: ۲
بازدید صفحه ۲: ۱
📦 پروژه ۳: مدیریت موجودی انبار
سیستم مدیریت موجودی با متغیر سراسری برای سقف مجاز و متغیر محلی برای هر محصول
# متغیر سراسری سقف مجاز انبار MAX_CAPACITY = 1000 def manage_product(product_name): # متغیر محلی هر محصول stock = 0 def add(quantity): nonlocal stock global MAX_CAPACITY if stock + quantity <= MAX_CAPACITY: stock += quantity print(f"{quantity} واحد به {product_name} اضافه شد. موجودی: {stock}") else: print(f"⚠️ خطا: ظرفیت انبار {MAX_CAPACITY} است") return stock return add product1 = manage_product("لپتاپ") product2 = manage_product("موبایل") product1(300) product1(200) product2(500) product2(600)
📌 خروجی پروژه:
۳۰۰ واحد به لپتاپ اضافه شد. موجودی: ۳۰۰
۲۰۰ واحد به لپتاپ اضافه شد. موجودی: ۵۰۰
۵۰۰ واحد به موبایل اضافه شد. موجودی: ۵۰۰
⚠️ خطا: ظرفیت انبار ۱۰۰۰ است
🎮 پروژه ۴: سیستم امتیازدهی بازی
مدیریت امتیاز بازیکنان با متغیر سراسری برای سطح بازی
# متغیر سراسری سطح بازی game_level = "آسان" def create_player(name): score = 0 def play(points): nonlocal score global game_level multiplier = {"آسان": ۱, "متوسط": ۱٫۵, "سخت": ۲}[game_level] earned_points = points * multiplier score += earned_points print(f"{name} در سطح {game_level}، {earned_points:.1f} امتیاز گرفت. کل: {score:.1f}") return score return play player1 = create_player("علی") player2 = create_player("سارا") player1(10) player2(15) game_level = "متوسط" player1(20) player2(25)
📌 خروجی پروژه:
علی در سطح آسان، ۱۰٫۰ امتیاز گرفت. کل: ۱۰٫۰
سارا در سطح آسان، ۱۵٫۰ امتیاز گرفت. کل: ۱۵٫۰
علی در سطح متوسط، ۳۰٫۰ امتیاز گرفت. کل: ۴۰٫۰
سارا در سطح متوسط، ۳۷٫۵ امتیاز گرفت. کل: ۵۲٫۵
⚙️ پروژه ۵: تنظیمات سیستم
مدیریت تنظیمات سیستم با قابلیت بازنشانی به حالت پیشفرض
# متغیرهای سراسری تنظیمات پیشفرض DEFAULT_THEME = "روشن" DEFAULT_LANGUAGE = "فارسی" DEFAULT_FONT_SIZE = 12 def user_settings(username): theme, language, font_size = DEFAULT_THEME, DEFAULT_LANGUAGE, DEFAULT_FONT_SIZE def change(setting, value): nonlocal theme, language, font_size if setting == "theme": theme = value elif setting == "language": language = value elif setting == "font_size": font_size = value print(f"{username}: پوسته={theme}, زبان={language}, قلم={font_size}") def reset(): nonlocal theme, language, font_size theme, language, font_size = DEFAULT_THEME, DEFAULT_LANGUAGE, DEFAULT_FONT_SIZE print(f"{username}: بازنشانی شد") return change, reset user1_set, user1_reset = user_settings("احمد") user2_set, _ = user_settings("مریم") user1_set("theme", "تاریک") user1_set("font_size", 14) user2_set("language", "انگلیسی") user1_reset()
📌 خروجی پروژه:
احمد: پوسته=تاریک, زبان=فارسی, قلم=۱۴
احمد: پوسته=تاریک, زبان=فارسی, قلم=۱۴
مریم: پوسته=روشن, زبان=انگلیسی, قلم=۱۲
احمد: بازنشانی شد
✨ ۵ پروژه جدید کاربردی ✨
🏦
پروژه ۶: سیستم بانکداری با نرخ سود سراسری
مدیریت حسابهای بانکی با نرخ سود ثابت سراسری و موجودی محلی هر حساب
# متغیر سراسری نرخ سود بانک INTEREST_RATE = 0.12 def create_bank_account(account_holder, initial_balance): # متغیرهای محلی هر حساب balance = initial_balance transactions = [] def deposit(amount): nonlocal balance balance += amount transactions.append(f"+{amount}") return f"واریز: {amount}, موجودی: {balance}" def withdraw(amount): nonlocal balance if balance >= amount: balance -= amount transactions.append(f"-{amount}") return f"برداشت: {amount}, موجودی: {balance}" return "موجودی کافی نیست" def calculate_yearly_interest(): global INTEREST_RATE interest = balance * INTEREST_RATE return f"سود سالانه: {interest:.2f} (نرخ: {INTEREST_RATE*100}%)" def get_info(): return f"حساب {account_holder}: موجودی={balance}, تراکنشها={transactions}" return deposit, withdraw, calculate_yearly_interest, get_info # ایجاد حسابهای بانکی acc1_deposit, acc1_withdraw, acc1_interest, acc1_info = create_bank_account("علی رضایی", ۵۰۰۰) acc2_deposit, acc2_withdraw, acc2_interest, acc2_info = create_bank_account("سارا احمدی", ۸۰۰۰) print(acc1_deposit(1500)) print(acc1_withdraw(2000)) print(acc1_interest()) print(acc2_deposit(3000)) print(acc2_interest()) print(acc1_info()) print(acc2_info())
📌 خروجی پروژه ۶:
واریز: ۱۵۰۰, موجودی: ۶۵۰۰
برداشت: ۲۰۰۰, موجودی: ۴۵۰۰
سود سالانه: ۵۴۰٫۰۰ (نرخ: ۱۲٫۰%)
واریز: ۳۰۰۰, موجودی: ۱۱۰۰۰
سود سالانه: ۱۳۲۰٫۰۰ (نرخ: ۱۲٫۰%)
حساب علی رضایی: موجودی=۴۵۰۰, تراکنشها=['+۱۵۰۰', '-۲۰۰۰']
حساب سارا احمدی: موجودی=۱۱۰۰۰, تراکنشها=['+۳۰۰۰']
🏨
پروژه ۷: سیستم رزرو هتل با قیمتپایه سراسری
مدیریت رزرو اتاقهای هتل با قیمت پایه سراسری و تخفیف محلی
# متغیر سراسری قیمت پایه هر شب BASE_PRICE_PER_NIGHT = 200 def hotel_reservation(guest_name): # متغیرهای محلی هر مهمان reservations = [] total_nights = 0 discount_rate = 0 def book_room(room_type, nights): nonlocal total_nights global BASE_PRICE_PER_NIGHT room_prices = {"استاندارد": ۱, "لوکس": ۱٫۸, "سوئیت": ۲٫۵} price_multiplier = room_prices.get(room_type, 1) room_price = BASE_PRICE_PER_NIGHT * price_multiplier total_price = room_price * nights * (1 - discount_rate) reservations.append({ "نوع": room_type, "شب": nights, "قیمت": total_price }) total_nights += nights return f"اتاق {room_type} برای {nights} شب رزرو شد. قیمت: {total_price:.2f} $" def set_discount(rate): nonlocal discount_rate discount_rate = rate return f"تخفیف {rate*100}% برای {guest_name} اعمال شد" def get_total_bill(): total = sum(r["قیمت"] for r in reservations) return f"صورتحساب {guest_name}: {total:.2f} $ برای {total_nights} شب" return book_room, set_discount, get_total_bill # رزرو برای مهمانها guest1_book, guest1_discount, guest1_bill = hotel_reservation("محمد کریمی") guest2_book, guest2_discount, guest2_bill = hotel_reservation("زهرا محمدی") print(guest1_book("استاندارد", ۳)) print(guest1_discount(0.1)) print(guest1_book("لوکس", ۲)) print(guest2_book("سوئیت", ۴)) print(guest1_bill()) print(guest2_bill())
📌 خروجی پروژه ۷:
اتاق استاندارد برای ۳ شب رزرو شد. قیمت: ۶۰۰٫۰۰ $
تخفیف ۱۰٫۰% برای محمد کریمی اعمال شد
اتاق لوکس برای ۲ شب رزرو شد. قیمت: ۶۴۸٫۰۰ $
اتاق سوئیت برای ۴ شب رزرو شد. قیمت: ۲۰۰۰٫۰۰ $
صورتحساب محمد کریمی: ۱۲۴۸٫۰۰ $ برای ۵ شب
صورتحساب زهرا محمدی: ۲۰۰۰٫۰۰ $ برای ۴ شب
🛒
پروژه ۸: سیستم فروشگاه آنلاین با مالیات سراسری
مدیریت سبد خرید با نرخ مالیات ثابت سراسری و تخفیفهای محلی
# متغیر سراسری نرخ مالیات TAX_RATE = 0.09 def shopping_cart(customer_name): # متغیرهای محلی هر مشتری items = [] subtotal = 0 coupon_discount = 0 def add_item(item_name, price, quantity=1): nonlocal subtotal total_price = price * quantity items.append({"نام": item_name, "تعداد": quantity, "قیمت": total_price}) subtotal += total_price return f"{quantity} عدد {item_name} با قیمت {total_price} تومان اضافه شد" def apply_coupon(discount_percent): nonlocal coupon_discount coupon_discount = discount_percent return f"تخفیف {discount_percent*100}% اعمال شد" def calculate_total(): global TAX_RATE discount_amount = subtotal * coupon_discount after_discount = subtotal - discount_amount tax = after_discount * TAX_RATE final_total = after_discount + tax return { "مشتری": customer_name, "زیرمجموع": subtotal, "تخفیف": discount_amount, "مالیات": tax, "قابلپرداخت": final_total } def show_cart(): result = f"سبد خرید {customer_name}:\n" for item in items: result += f" - {item['نام']}: {item['تعداد']} عدد = {item['قیمت']} تومان\n" return result return add_item, apply_coupon, calculate_total, show_cart # ایجاد سبد خرید برای مشتریان cart1_add, cart1_coupon, cart1_total, cart1_show = shopping_cart("احمد موسوی") cart2_add, cart2_coupon, cart2_total, cart2_show = shopping_cart("فاطمه حسینی") print(cart1_add("لپتاپ", ۲۵۰۰۰۰۰۰)) print(cart1_add("ماوس", ۵۰۰۰۰۰, ۲)) print(cart1_coupon(0.05)) print(cart2_add("هدفون", ۱۵۰۰۰۰۰)) print(cart1_show()) print("صورتحساب احمد:", cart1_total()) print("صورتحساب فاطمه:", cart2_total())
📌 خروجی پروژه ۸:
۱ عدد لپتاپ با قیمت ۲۵۰۰۰۰۰۰ تومان اضافه شد
۲ عدد ماوس با قیمت ۱۰۰۰۰۰۰ تومان اضافه شد
تخفیف ۵٫۰% اعمال شد
۱ عدد هدفون با قیمت ۱۵۰۰۰۰۰ تومان اضافه شد
سبد خرید احمد موسوی:
- لپتاپ: ۱ عدد = ۲۵۰۰۰۰۰۰ تومان
- ماوس: ۲ عدد = ۱۰۰۰۰۰۰ تومان
صورتحساب احمد: {'مشتری': 'احمد موسوی', 'زیرمجموع': ۲۶۰۰۰۰۰۰, 'تخفیف': ۱۳۰۰۰۰۰٫۰, 'مالیات': ۲۲۲۳۰۰۰٫۰, 'قابلپرداخت': ۲۶۹۲۳۰۰۰٫۰}
صورتحساب فاطمه: {'مشتری': 'فاطمه حسینی', 'زیرمجموع': ۱۵۰۰۰۰۰, 'تخفیف': ۰, 'مالیات': ۱۳۵۰۰۰٫۰, 'قابلپرداخت': ۱۶۳۵۰۰۰٫۰}
🎓
پروژه ۹: سیستم مدیریت دانشجو با معدلکل سراسری
مدیریت نمرات دانشجویان با معیار قبولی سراسری
# متغیر سراسری معدل قبولی PASSING_GPA = 12.0 def student_record(student_name, student_id): # متغیرهای محلی هر دانشجو courses = {} total_points = 0 total_credits = 0 def add_grade(course_name, grade, credits): nonlocal total_points, total_credits courses[course_name] = {"نمره": grade, "واحد": credits} total_points += grade * credits total_credits += credits return f"درس {course_name} با نمره {grade} و {credits} واحد ثبت شد" def calculate_gpa(): if total_credits == 0: return 0 return total_points / total_credits def check_status(): global PASSING_GPA gpa = calculate_gpa() status = "قبول" if gpa >= PASSING_GPA else "مشروط" return f"دانشجو: {student_name} ({student_id})\nمعدل: {gpa:.2f}\nوضعیت: {status}" def get_transcript(): transcript = f"کارنامه {student_name}:\n" for course, info in courses.items(): transcript += f" {course}: {info['نمره']} ({info['واحد']} واحد)\n" return transcript return add_grade, check_status, get_transcript # ثبت نمرات دانشجویان student1_add, student1_status, student1_transcript = student_record("کیان رستمی", "۴۰۱۱۲۳") student2_add, student2_status, student2_transcript = student_record("نرگس زمانی", "۴۰۱۴۵۶") print(student1_add("ریاضی ۱", ۱۵, ۳)) print(student1_add("فیزیک ۱", ۱۴, ۳)) print(student1_add("برنامهنویسی", ۱۸, ۴)) print(student2_add("ریاضی ۱", ۱۰, ۳)) print(student2_add("معادلات", ۸, ۳)) print(student1_transcript()) print(student1_status()) print(student2_status())
📌 خروجی پروژه ۹:
درس ریاضی ۱ با نمره ۱۵ و ۳ واحد ثبت شد
درس فیزیک ۱ با نمره ۱۴ و ۳ واحد ثبت شد
درس برنامهنویسی با نمره ۱۸ و ۴ واحد ثبت شد
درس ریاضی ۱ با نمره ۱۰ و ۳ واحد ثبت شد
درس معادلات با نمره ۸ و ۳ واحد ثبت شد
کارنامه کیان رستمی:
ریاضی ۱: ۱۵ (۳ واحد)
فیزیک ۱: ۱۴ (۳ واحد)
برنامهنویسی: ۱۸ (۴ واحد)
دانشجو: کیان رستمی (۴۰۱۱۲۳)
معدل: ۱۵٫۹۰
وضعیت: قبول
دانشجو: نرگس زمانی (۴۰۱۴۵۶)
معدل: ۹٫۰۰
وضعیت: مشروط
💪
پروژه ۱۰: سیستم باشگاه ورزشی با تعرفه سراسری
مدیریت عضویت اعضای باشگاه با تعرفه پایه سراسری و ساعات حضور محلی
# متغیر سراسری تعرفه باشگاه (تومان در ساعت) BASE_RATE_PER_HOUR = 50000 def gym_membership(member_name, member_type): # متغیرهای محلی هر عضو total_hours = 0 sessions = [] membership_discount = {"نقرهای": ۰, "طلایی": ۰٫۱۵, "الماسی": ۰٫۲۵}.get(member_type, 0) def attend(date, hours): nonlocal total_hours global BASE_RATE_PER_HOUR total_hours += hours session_cost = hours * BASE_RATE_PER_HOUR * (1 - membership_discount) sessions.append({"تاریخ": date, "ساعت": hours, "هزینه": session_cost}) return f"حضور در تاریخ {date}: {hours} ساعت (هزینه: {session_cost:,.0f} تومان)" def get_monthly_bill(): total_cost = sum(s["هزینه"] for s in sessions) return f"صورتحساب ماهانه {member_name} (عضویت {member_type}):\n" \ f" مجموع ساعات: {total_hours} ساعت\n" \ f" مبلغ قابل پرداخت: {total_cost:,.0f} تومان\n" \ f" تخفیف اعمال شده: {membership_discount*100}%" def get_attendance_summary(): summary = f"گزارش حضور {member_name}:\n" for session in sessions: summary += f" {session['تاریخ']}: {session['ساعت']} ساعت\n" return summary return attend, get_monthly_bill, get_attendance_summary # ثبت حضور اعضای باشگاه member1_attend, member1_bill, member1_summary = gym_membership("امیر حسینی", "الماسی") member2_attend, member2_bill, member2_summary = gym_membership("لیلا کریمی", "نقرهای") print(member1_attend("1402/02/01", 2)) print(member1_attend("1402/02/03", 1.5)) print(member1_attend("1402/02/05", 2.5)) print(member2_attend("1402/02/02", 1)) print(member2_attend("1402/02/04", 2)) print(member1_summary()) print(member1_bill()) print(member2_bill())
📌 خروجی پروژه ۱۰:
حضور در تاریخ ۱۴۰۲/۰۲/۰۱: ۲ ساعت (هزینه: ۷۵,۰۰۰ تومان)
حضور در تاریخ ۱۴۰۲/۰۲/۰۳: ۱٫۵ ساعت (هزینه: ۵۶,۲۵۰ تومان)
حضور در تاریخ ۱۴۰۲/۰۲/۰۵: ۲٫۵ ساعت (هزینه: ۹۳,۷۵۰ تومان)
حضور در تاریخ ۱۴۰۲/۰۲/۰۲: ۱ ساعت (هزینه: ۵۰,۰۰۰ تومان)
حضور در تاریخ ۱۴۰۲/۰۲/۰۴: ۲ ساعت (هزینه: ۱۰۰,۰۰۰ تومان)
گزارش حضور امیر حسینی:
۱۴۰۲/۰۲/۰۱: ۲ ساعت
۱۴۰۲/۰۲/۰۳: ۱٫۵ ساعت
۱۴۰۲/۰۲/۰۵: ۲٫۵ ساعت
صورتحساب ماهانه امیر حسینی (عضویت الماسی):
مجموع ساعات: ۶٫۰ ساعت
مبلغ قابل پرداخت: ۲۲۵,۰۰۰ تومان
تخفیف اعمال شده: ۲۵٫۰%
صورتحساب ماهانه لیلا کریمی (عضویت نقرهای):
مجموع ساعات: ۳ ساعت
مبلغ قابل پرداخت: ۱۵۰,۰۰۰ تومان
تخفیف اعمال شده: ۰%
🚀 پروژههای پیشرفته پایتون
متغیرهای سراسری (Global) و محلی (Local) در عمل
🏥 پروژه ۱۲
✈️ پروژه ۱۳
🎮 پروژه ۱۴
📚 پروژه ۱۵
پروژه ۱۱: سیستم کرایه ماشین با نرخ روزانه سراسری
مدیریت ناوگان کرایه ماشین با نرخ پایه سراسری و تخفیفهای ویژه مشتریان
# متغیر سراسری نرخ کرایه روزانه DAILY_RATE = 800000 # تومان def car_rental_system(customer_name, customer_type="عادی"): # متغیرهای محلی هر مشتری rentals = [] total_days = 0 loyalty_points = 0 # تخفیف براساس نوع مشتری discount_rates = { "عادی": ۰, "نقرهای": ۰٫۱, "طلایی": ۰٫۲, "الماسی": ۰٫۳ } customer_discount = discount_rates.get(customer_type, 0) def rent_car(car_model, days): nonlocal total_days, loyalty_points global DAILY_RATE # قیمتگذاری براساس مدل ماشین car_multiplier = { "پراید": ۱, "پژو": ۱٫۳, "سمند": ۱٫۵, "دنا": ۱٫۸, "تارا": ۲ }.get(car_model, 1) base_price = DAILY_RATE * car_multiplier * days discount_amount = base_price * customer_discount final_price = base_price - discount_amount # محاسبه امتیاز وفاداری earned_points = days * 10 loyalty_points += earned_points rental_info = { "ماشین": car_model, "روز": days, "قیمت_پایه": base_price, "تخفیف": discount_amount, "قیمت_نهایی": final_price, "امتیاز": earned_points } rentals.append(rental_info) total_days += days return (f"✅ ماشین {car_model} برای {days} روز کرایه شد\n" f" قیمت پایه: {base_price:,.0f} تومان\n" f" تخفیف {customer_discount*100}%: {discount_amount:,.0f} تومان\n" f" قیمت نهایی: {final_price:,.0f} تومان\n" f" امتیاز کسب شده: {earned_points}") def use_loyalty_points(points_to_use): nonlocal loyalty_points if loyalty_points >= points_to_use: loyalty_points -= points_to_use discount_value = points_to_use * 1000 # هر امتیاز = ۱۰۰۰ تومان return f"🎁 {points_to_use} امتیاز استفاده شد. معادل {discount_value:,.0f} تومان تخفیف" return f"❌ امتیاز کافی نیست. موجودی: {loyalty_points}" def get_customer_summary(): summary = f"📋 گزارش مشتری: {customer_name} (نوع: {customer_type})\n" summary += f" مجموع روزهای کرایه: {total_days}\n" summary += f" امتیاز وفاداری: {loyalty_points}\n" summary += " تاریخچه کرایه:\n" total_cost = 0 for r in rentals: summary += f" - {r['ماشین']}: {r['روز']} روز = {r['قیمت_نهایی']:,.۰f} تومان\n" total_cost += r['قیمت_نهایی'] summary += f" جمع کل پرداختی: {total_cost:,.0f} تومان" return summary return rent_car, use_loyalty_points, get_customer_summary # اجرای پروژه print("🟢"*۵۰) print("🚗 شروع پروژه سیستم کرایه ماشین") print("🟢"*۵۰) # مشتری ۱: علی (طلایی) rent1, points1, summary1 = car_rental_system("علی محمدی", "طلایی") print("\n🔸 مشتری ۱ (علی - طلایی):") print(rent1("دنا", ۳)) print(rent1("تارا", ۲)) print(points1(50)) print(summary1()) # مشتری ۲: سارا (عادی) rent2, points2, summary2 = car_rental_system("سارا احمدی", "عادی") print("\n🔸 مشتری ۲ (سارا - عادی):") print(rent2("پراید", ۵)) print(summary2())
📊 خروجی پروژه ۱۱:
🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢
🚗 شروع پروژه سیستم کرایه ماشین
🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢
🔸 مشتری ۱ (علی - طلایی):
✅ ماشین دنا برای ۳ روز کرایه شد
قیمت پایه: ۴,۳۲۰,۰۰۰ تومان
تخفیف ۲۰%: ۸۶۴,۰۰۰ تومان
قیمت نهایی: ۳,۴۵۶,۰۰۰ تومان
امتیاز کسب شده: ۳۰
✅ ماشین تارا برای ۲ روز کرایه شد
قیمت پایه: ۳,۲۰۰,۰۰۰ تومان
تخفیف ۲۰%: ۶۴۰,۰۰۰ تومان
قیمت نهایی: ۲,۵۶۰,۰۰۰ تومان
امتیاز کسب شده: ۲۰
🎁 ۵۰ امتیاز استفاده شد. معادل ۵۰,۰۰۰ تومان تخفیف
📋 گزارش مشتری: علی محمدی (نوع: طلایی)
مجموع روزهای کرایه: ۵
امتیاز وفاداری: ۰
تاریخچه کرایه:
- دنا: ۳ روز = ۳,۴۵۶,۰۰۰ تومان
- تارا: ۲ روز = ۲,۵۶۰,۰۰۰ تومان
جمع کل پرداختی: ۶,۰۱۶,۰۰۰ تومان
🔸 مشتری ۲ (سارا - عادی):
✅ ماشین پراید برای ۵ روز کرایه شد
قیمت پایه: ۴,۰۰۰,۰۰۰ تومان
تخفیف ۰%: ۰ تومان
قیمت نهایی: ۴,۰۰۰,۰۰۰ تومان
امتیاز کسب شده: ۵۰
📋 گزارش مشتری: سارا احمدی (نوع: عادی)
مجموع روزهای کرایه: ۵
امتیاز وفاداری: ۵۰
تاریخچه کرایه:
- پراید: ۵ روز = ۴,۰۰۰,۰۰۰ تومان
جمع کل پرداختی: ۴,۰۰۰,۰۰۰ تومان
پروژه ۱۲: سیستم نوبتدهی بیمارستان با تعرفه ویزیت سراسری
مدیریت نوبتهای پزشکی با تعرفه پایه و بیمههای مختلف
# متغیر سراسری تعرفه ویزیت BASE_VISIT_FEE = 250000 # تومان def hospital_appointment_system(patient_name, insurance_type="آزاد"): # متغیرهای محلی هر بیمار appointments = [] total_cost = 0 medical_history = [] # پوشش بیمه insurance_coverage = { "آزاد": ۰, "تامین اجتماعی": ۰٫۷, "سلامت": ۰٫۸, "نیروهای مسلح": ۰٫۹ } coverage = insurance_coverage.get(insurance_type, 0) def book_appointment(doctor_name, specialty, date, is_specialist=False): nonlocal total_cost global BASE_VISIT_FEE # تعرفه براساس تخصص specialty_multiplier = { "عمومی": ۱, "متخصص اطفال": ۱٫۵, "متخصص قلب": ۲٫۵, "متخصص مغز و اعصاب": ۳, "جراح": ۲ }.get(specialty, 1) if is_specialist: specialty_multiplier *= 1.5 visit_fee = BASE_VISIT_FEE * specialty_multiplier patient_payment = visit_fee * (1 - coverage) appointment = { "پزشک": doctor_name, "تخصص": specialty, "تاریخ": date, "هزینه_کل": visit_fee, "پوشش_بیمه": visit_fee * coverage, "پرداخت_بیمار": patient_payment } appointments.append(appointment) total_cost += patient_payment medical_history.append(f"{date}: {doctor_name} ({specialty})") return (f"📅 نوبت برای {date} با دکتر {doctor_name} ثبت شد\n" f" هزینه ویزیت: {visit_fee:,.0f} تومان\n" f" سهم بیمه ({insurance_type} - {coverage*100}%): {visit_fee * coverage:,.0f} تومان\n" f" پرداخت بیمار: {patient_payment:,.0f} تومان") def get_prescription(medicines): # محاسبه هزینه دارو با تخفیف بیمه total_medicine_cost = 0 prescription_text = "💊 نسخه تجویزی:\n" for med, price in medicines.items(): patient_share = price * (1 - coverage/2) # بیمه ۵۰% داروها را پوشش میدهد total_medicine_cost += patient_share prescription_text += f" • {med}: {price:,.0f} تومان (سهم بیمار: {patient_share:,.0f} تومان)\n" prescription_text += f" جمع هزینه دارو: {total_medicine_cost:,.0f} تومان" return prescription_text def get_medical_report(): report = f"🏥 گزارش پزشکی {patient_name}\n" report += f" نوع بیمه: {insurance_type} (پوشش {coverage*100}%)\n" report += " سوابق نوبتها:\n" for h in medical_history: report += f" • {h}\n" report += f" جمع هزینههای پرداختی: {total_cost:,.0f} تومان" return report return book_appointment, get_prescription, get_medical_report # اجرای پروژه print("\n🟡"*۵۰) print("🏥 شروع پروژه سیستم نوبتدهی بیمارستان") print("🟡"*۵۰) # بیمار ۱: رضا (تامین اجتماعی) book1, prescription1, report1 = hospital_appointment_system("رضا کریمی", "تامین اجتماعی") print("\n🔸 بیمار ۱ (رضا - تامین اجتماعی):") print(book1("دکتر احمدی", "متخصص قلب", "۱۴۰۲/۰۳/۱۵", True)) print(book1("دکتر محمدی", "عمومی", "۱۴۰۲/۰۳/۲۰")) print(prescription1({"آسپرین": ۵۰۰۰۰, "آتورواستاتین": ۱۲۰۰۰۰})) print(report1()) # بیمار ۲: مریم (آزاد) book2, prescription2, report2 = hospital_appointment_system("مریم حسینی", "آزاد") print("\n🔸 بیمار ۲ (مریم - آزاد):") print(book2("دکتر رضایی", "متخصص اطفال", "۱۴۰۲/۰۳/۱۸")) print(prescription2({"شربت سرفه": ۴۵۰۰۰, "استامینوفن": ۳۰۰۰۰})) print(report2())
📊 خروجی پروژه ۱۲:
🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡 🏥 شروع پروژه سیستم نوبتدهی بیمارستان 🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡🟡 🔸 بیمار ۱ (رضا - تامین اجتماعی): 📅 نوبت برای ۱۴۰۲/۰۳/۱۵ با دکتر دکتر احمدی ثبت شد هزینه ویزیت: ۹۳۷,۵۰۰ تومان سهم بیمه (تامین اجتماعی - ۷۰%): ۶۵۶,۲۵۰ تومان پرداخت بیمار: ۲۸۱,۲۵۰ تومان 📅 نوبت برای ۱۴۰۲/۰۳/۲۰ با دکتر دکتر محمدی ثبت شد هزینه ویزیت: ۲۵۰,۰۰۰ تومان سهم بیمه (تامین اجتماعی - ۷۰%): ۱۷۵,۰۰۰ تومان پرداخت بیمار: ۷۵,۰۰۰ تومان 💊 نسخه تجویزی: • آسپرین: ۵۰,۰۰۰ تومان (سهم بیمار: ۳۲,۵۰۰ تومان) • آتورواستاتین: ۱۲۰,۰۰۰ تومان (سهم بیمار: ۷۸,۰۰۰ تومان) جمع هزینه دارو: ۱۱۰,۵۰۰ تومان 🏥 گزارش پزشکی رضا کریمی نوع بیمه: تامین اجتماعی (پوشش ۷۰%) سوابق نوبتها:پروژه ۱: محاسبه حقوق کارمندان با متغیر سراسری
محاسبه حقوق نهایی با احتساب مالیات ثابت به عنوان متغیر سراسری
# متغیر سراسری مالیات tax_rate = 0.15 def calculate_salary(base_salary): # دسترسی به متغیر سراسری tax_rate tax_amount = base_salary * tax_rate net_salary = base_salary - tax_amount print(f"حقوق پایه: {base_salary}, مالیات: {tax_amount}, حقوق خالص: {net_salary}") return net_salary # برنامه اصلی print("محاسبه حقوق کارمندان:") emp1 = calculate_salary(5000) emp2 = calculate_salary(7500) emp3 = calculate_salary(6000)خروجی:
محاسبه حقوق کارمندان: حقوق پایه: ۵۰۰۰, مالیات: ۷۵۰٫۰, حقوق خالص: ۴۲۵۰٫۰ حقوق پایه: ۷۵۰۰, مالیات: ۱۱۲۵٫۰, حقوق خالص: ۶۳۷۵٫۰ حقوق پایه: ۶۰۰۰, مالیات: ۹۰۰٫۰, حقوق خالص: ۵۱۰۰٫۰پروژه ۲: شمارنده بازدید با متغیر محلی
شمارنده تعداد بازدید از یک صفحه با استفاده از متغیر محلی
def page_visitor(): # متغیر محلی شمارنده visit_count = 0 def increment(): nonlocal visit_count visit_count += 1 return visit_count return increment # ایجاد شمارنده مجزا برای هر صفحه page1_counter = page_visitor() page2_counter = page_visitor() print("بازدید صفحه ۱:", page1_counter()) print("بازدید صفحه ۱:", page1_counter()) print("بازدید صفحه ۲:", page2_counter())خروجی:
بازدید صفحه ۱: ۱ بازدید صفحه ۱: ۲ بازدید صفحه ۲: ۱پروژه ۳: مدیریت موجودی انبار (ترکیبی از سراسری و محلی)
سیستم مدیریت موجودی با متغیر سراسری برای سقف مجاز و متغیر محلی برای هر محصول
# متغیر سراسری سقف مجاز انبار MAX_CAPACITY = 1000 def manage_product(product_name): # متغیر محلی هر محصول stock = 0 def add(quantity): nonlocal stock global MAX_CAPACITY if stock + quantity <= MAX_CAPACITY: stock += quantity print(f"{quantity} واحد به {product_name} اضافه شد. موجودی: {stock}") else: print(f"خطا: ظرفیت انبار {MAX_CAPACITY} است") return stock return add # مدیریت محصولات مختلف product1 = manage_product("لپتاپ") product2 = manage_product("موبایل") product1(300) product1(200) product2(500) product2(600) # این خطا میدهد چون از سقف مجاز عبور میکندخروجی:
۳۰۰ واحد به لپتاپ اضافه شد. موجودی: ۳۰۰ ۲۰۰ واحد به لپتاپ اضافه شد. موجودی: ۵۰۰ ۵۰۰ واحد به موبایل اضافه شد. موجودی: ۵۰۰ خطا: ظرفیت انبار ۱۰۰۰ استپروژه ۴: سیستم امتیازدهی بازی
مدیریت امتیاز بازیکنان با متغیر سراسری برای سطح بازی و متغیر محلی برای امتیاز هر بازیکن
# متغیر سراسری سطح بازی game_level = "آسان" def create_player(name): # متغیر محلی امتیاز بازیکن score = 0 def play(points): nonlocal score global game_level if game_level == "آسان": multiplier = 1 elif game_level == "متوسط": multiplier = 1.5 else: multiplier = 2 earned_points = points * multiplier score += earned_points print(f"{name} در سطح {game_level}، {earned_points} امتیاز کسب کرد. کل امتیاز: {score}") return score return play # ایجاد بازیکنان player1 = create_player("علی") player2 = create_player("سارا") player1(10) player2(15) # تغییر سطح بازی game_level = "متوسط" player1(20) player2(25)خروجی:
علی در سطح آسان، ۱۰٫۰ امتیاز کسب کرد. کل امتیاز: ۱۰٫۰ سارا در سطح آسان، ۱۵٫۰ امتیاز کسب کرد. کل امتیاز: ۱۵٫۰ علی در سطح متوسط، ۳۰٫۰ امتیاز کسب کرد. کل امتیاز: ۴۰٫۰ سارا در سطح متوسط، ۳۷٫۵ امتیاز کسب کرد. کل امتیاز: ۵۲٫۵پروژه ۵: تنظیمات سیستم با متغیر سراسری و محلی
مدیریت تنظیمات سیستم با قابلیت بازنشانی به حالت پیشفرض
# متغیرهای سراسری تنظیمات پیشفرض DEFAULT_THEME = "روشن" DEFAULT_LANGUAGE = "فارسی" DEFAULT_FONT_SIZE = 12 def user_settings(username): # متغیرهای محلی هر کاربر theme = DEFAULT_THEME language = DEFAULT_LANGUAGE font_size = DEFAULT_FONT_SIZE def change_setting(setting_name, value): nonlocal theme, language, font_size global DEFAULT_THEME, DEFAULT_LANGUAGE, DEFAULT_FONT_SIZE if setting_name == "theme": theme = value elif setting_name == "language": language = value elif setting_name == "font_size": font_size = value print(f"{username}: پوسته={theme}, زبان={language}, اندازه قلم={font_size}") def reset_to_default(): nonlocal theme, language, font_size theme = DEFAULT_THEME language = DEFAULT_LANGUAGE font_size = DEFAULT_FONT_SIZE print(f"{username}: تنظیمات به حالت پیشفرض بازگشت") return change_setting, reset_to_default # ایجاد تنظیمات برای دو کاربر user1_set, user1_reset = user_settings("احمد") user2_set, user2_reset = user_settings("مریم") user1_set("theme", "تاریک") user1_set("font_size", 14) user2_set("language", "انگلیسی") user1_reset()خروجی:
احمد: پوسته=تاریک, زبان=فارسی, اندازه قلم=۱۴ احمد: پوسته=تاریک, زبان=فارسی, اندازه قلم=۱۴ مریم: پوسته=روشن, زبان=انگلیسی, اندازه قلم=۱۲ احمد: تنظیمات به حالت پیشفرض بازگشت
