آموزش پایتون از صفر – بخش سوم: توابع، دیکشنری و پروژه‌های کاربردی

بازدید: 57 بازدید
آموزش پایتون از صفر بخش سوم - توابع و دیکشنری‌ها در پایتون

در بخش‌های قبلی آموزش پایتون با مفاهیم پایه مانند متغیرها، ورودی و خروجی، شرط‌ها، حلقه‌ها، ساختارهای داده‌ای اولیه و کمی توابع آشنا شدیم.

حالا زمان آن رسیده که برنامه‌هایمان را حرفه‌ای‌تر و منظم‌تر بنویسیم. در این بخش یاد می‌گیریم چگونه با استفاده از توابع کدهای خود را دسته‌بندی و قابل استفاده مجدد کنیم، چگونه اطلاعات را با Dictionary مدیریت کنیم و چگونه داده‌های پیچیده‌تر را در برنامه‌های واقعی به کار ببریم.

در پایان این بخش با ترکیب این مفاهیم، چند پروژه عملی خواهیم ساخت و قدمی مهم برای نوشتن برنامه‌های بزرگ‌تر و کاربردی‌تر برمی‌داریم

این آموزش با الهام از دوره Python Bootcamp از Angela Yu و با بازنویسی آموزشی، مثال‌های تکمیلی و تمرین‌های اختصاصی تهیه شده است.

فهرست مطالب این بخش

1. مروری بر مفهوم تابع (Function)

تابع چیست؟

در برنامه‌نویسی، معمولاً بخش‌هایی از کد چندین بار تکرار می‌شوند.

برای مثال، فرض کنید در یک برنامه چند بار نیاز داریم پیام خوش‌آمدگویی نمایش دهیم:

print("Welcome to Python")
print("Start your programming journey")

اگر این کد را در چند جای برنامه تکرار کنیم، نگهداری آن سخت می‌شود. اینجا تابع به کمک ما می‌آید.

تابع یک بخش مستقل از برنامه است که یک وظیفه مشخص را انجام می‌دهد و هر زمان که نیاز داشته باشیم می‌توانیم آن را اجرا کنیم.

ساختار کلی تابع:

def function_name():
    # instructions

کلمه کلیدی def مخفف define است و برای تعریف تابع استفاده می‌شود.

مثال:

def show_message():

    print("Hello Python")
    print("Learning functions")


show_message()

خروجی:

Hello Python
Learning functions

در این مثال:

  • تابعی به نام show_message ساختیم.
  • داخل آن دو دستور قرار دادیم.
  • با نوشتن نام تابع، آن را اجرا کردیم.

2. کار با ورودی‌های تابع (Function Parameters)

گاهی یک تابع برای انجام کار خود به اطلاعات نیاز دارد. مثلاً تابعی که قرار است نام کاربر را نمایش دهد، باید نام را دریافت کند.

برای این کار از پارامتر استفاده می‌کنیم.

مثال: ساخت تابع با ورودی

def greet(name):

    print(f"Hello {name}")


greet("Ali")

خروجی:

Hello Ali

اینجا name یک پارامتر است و Ali یک آرگومان است.

Parameter و Argument چه تفاوتی دارند؟

این دو اصطلاح شبیه هم هستند اما کاربرد متفاوتی دارند: پارامتر (parameter) متغیری است که هنگام ساخت تابع تعریف می‌کنیم و آرگومان (argument) مقداری است که هنگام اجرای تابع ارسال می‌کنیم.

مثال:

def greet(name):
    print(name)

greet("Sara")
name = parameter
"Sara" = argument

چند ورودی برای تابع

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

مثال:

def introduce(name, country):

    print(f"My name is {name}")
    print(f"I live in {country}")


introduce("Reza", "Iran")

خروجی:

My name is Reza
I live in Iran

اهمیت ترتیب ورودی‌ها

در حالت عادی پایتون مقدارها را بر اساس ترتیب قرار می‌دهد.

مثال:

def user_information(name, age):

    print(name)
    print(age)


user_information("Ali", 25)

نتیجه:

Ali
25

اما:

user_information(25, "Ali")

نتیجه اشتباه خواهد بود:

25
Ali

Keyword Arguments

برای جلوگیری از اشتباه می‌توانیم نام پارامتر را مشخص کنیم.

مثال:

def user_information(name, age):

    print(name)
    print(age)


user_information(
    age=25,
    name="Ali"
)

در این حالت ترتیب مهم نیست.

3. پروژه محاسبه تعداد قوطی رنگ

تا اینجا یاد گرفتیم چگونه تابع بسازیم و اطلاعات را به آن ارسال کنیم. حالا می‌خواهیم یک مسئله واقعی را با استفاده از تابع حل کنیم.

تحلیل مسئله

فرض کنید می‌خواهیم یک دیوار را رنگ کنیم. اطلاعاتی که داریم:

  • ارتفاع دیوار
  • عرض دیوار
  • مقدار پوشش هر قوطی رنگ

هر قوطی رنگ می‌تواند مقدار مشخصی از سطح دیوار را پوشش دهد. هدف ما این است که محاسبه کنیم چند قوطی رنگ نیاز داریم.

فرمول:

مساحت دیوار = ارتفاع × عرض

تعداد قوطی = مساحت دیوار ÷ مقدار پوشش هر قوطی

اما یک نکته مهم وجود دارد.

اگر نتیجه اعشاری باشد، نمی‌توانیم بخشی از یک قوطی را خریداری کنیم.

مثلاً:

مساحت دیوار = 18 متر

پوشش هر قوطی = 5 متر

18 ÷ 5 = 3.6

برای گرد کردن به سمت بالا از تابع ceil() در کتابخانه math استفاده می‌کنیم.

استفاده از کتابخانه Math

برای استفاده از امکانات ریاضی پایتون می‌توانیم کتابخانه math را وارد کنیم.

import math

یکی از توابع مهم این کتابخانه:

math.ceil()

است. این تابع همیشه عدد را به سمت بالا گرد می‌کند.

مثال:

import math


number = 4.2

result = math.ceil(number)


print(result)

خروجی:

5

ساخت تابع محاسبه رنگ

حالا مسئله را تبدیل به یک تابع می‌کنیم:

import math


def calculate_paint_cans(height, width, coverage):

    wall_area = height * width

    cans = math.ceil(
        wall_area / coverage
    )

    print(
        f"You need {cans} cans of paint"
    )


calculate_paint_cans(
    3,
    6,
    5
)

خروجی:

You need 4 cans of paint

دریافت اطلاعات از کاربر

در برنامه‌های واقعی معمولاً مقدارها از کاربر دریافت می‌شوند.

نسخه کامل‌تر:

import math


def calculate_paint_cans(height, width, coverage):

    wall_area = height * width

    cans = math.ceil(
        wall_area / coverage
    )

    print(
        f"You need {cans} cans of paint"
    )



wall_height = int(
    input("Enter wall height: ")
)


wall_width = int(
    input("Enter wall width: ")
)


calculate_paint_cans(
    wall_height,
    wall_width,
    5
)

در این برنامه:

  1. کاربر ارتفاع را وارد می‌کند.
  2. کاربر عرض را وارد می‌کند.
  3. اطلاعات به تابع ارسال می‌شوند.
  4. تابع تعداد قوطی‌ها را محاسبه می‌کند.

4. بررسی اعداد اول با تابع (Prime Number Checker)

در این تمرین می‌خواهیم برنامه‌ای بسازیم که تشخیص دهد یک عدد اول است یا خیر.

عدد اول چیست؟

عدد اول عددی است که:

  • بزرگ‌تر از یک باشد.
  • فقط بر خودش و عدد یک بخش‌پذیر باشد.

مثال:

اعداد اول:

2
3
5
7
11

اعداد غیر اول:

4
8
12
15

برای مثال عدد 10 اول نیست:

10 ÷ 2 = 5

ساخت تابع بررسی عدد اول

def check_prime(number):

    is_prime = True


    for i in range(2, number):

        if number % i == 0:

            is_prime = False



    if is_prime:

        print(
            f"{number} is a prime number"
        )

    else:

        print(
            f"{number} is not a prime number"
        )



check_prime(13)

خروجی:

13 is a prime number

دریافت عدد از کاربر

def check_prime(number):

    is_prime = True


    for i in range(2, number):

        if number % i == 0:

            is_prime = False



    if is_prime:

        print("Prime number")

    else:

        print("Not prime number")



user_number = int(
    input("Enter a number: ")
)


check_prime(user_number)

5. آشنایی با Dictionary در پایتون

تا اینجا با لیست‌ها آشنا شدیم. لیست‌ها اطلاعات را با شماره جایگاه ذخیره می‌کنند.

مثال:

names = [
    "Ali",
    "Sara",
    "Reza"
]

برای دسترسی:

print(names[0])

خروجی:

Ali

اما در بسیاری از برنامه‌ها بهتر است اطلاعات با یک نام مشخص ذخیره شوند. اینجا Dictionary وارد می‌شود.

Dictionary چیست؟

Dictionary یک ساختار داده است که اطلاعات را به صورت:

Key : Value

ذخیره می‌کند.

مثال:

student = {

    "name": "Ali",
    "age": 20,
    "grade": "A"

}


print(student["name"])

در این مثال:

name
age
grade

کلیدها هستند و:

Ali
20
A

مقادیر ما می‌باشند.

چرا Dictionary مهم است؟

در پروژه‌های واقعی تقریباً همیشه با داده‌هایی شبیه Dictionary کار می‌کنیم.

مثلاً اطلاعات یک محصول:

product = {

    "title": "Laptop",
    "price": 800,
    "stock": 15

}

یا اطلاعات یک کاربر:

user = {

    "username": "admin",
    "email": "admin@test.com",
    "active": True

}

دسترسی به اطلاعات Dictionary

برای دریافت مقدار یک کلید:

user = {

    "name": "Sara",
    "age": 25

}


print(user["age"])

خروجی:

25

اضافه کردن مقدار جدید

می‌توانیم بعداً اطلاعات جدید اضافه کنیم.

user = {

    "name": "Sara"

}


user["city"] = "Tehran"


print(user)

خروجی:

{
'name': 'Sara',
'city': 'Tehran'
}

تغییر مقدار موجود

اگر کلید وجود داشته باشد، مقدار آن تغییر می‌کند.

user = {

    "name": "Sara",
    "age": 25

}


user["age"] = 26


print(user)

خروجی:

{'name': 'Sara', 'age': 26}

6. مدیریت اطلاعات در Dictionary

تا اینجا یاد گرفتیم چگونه یک Dictionary بسازیم و به اطلاعات آن دسترسی داشته باشیم. اما در برنامه‌های واقعی فقط خواندن اطلاعات کافی نیست.

ما معمولاً نیاز داریم:

  • اطلاعات جدید اضافه کنیم.
  • اطلاعات قبلی را تغییر دهیم.
  • روی داده‌ها پیمایش کنیم.
  • اطلاعات را مدیریت کنیم.

ایجاد Dictionary خالی

گاهی در شروع برنامه هنوز اطلاعاتی نداریم و می‌خواهیم بعداً داده‌ها را اضافه کنیم. برای این کار یک Dictionary خالی می‌سازیم.

user_data = {}


user_data["name"] = "Ali"
user_data["age"] = 30


print(user_data)

خروجی:

{'name': 'Ali', 'age': 30}

پاک کردن اطلاعات Dictionary

اگر بخواهیم تمام اطلاعات یک Dictionary را حذف کنیم، می‌توانیم دوباره آن را برابر {} قرار دهیم.

مثال:

profile = {

    "name": "Sara",
    "job": "Designer"

}


profile = {}


print(profile)

خروجی:

{}

بررسی وجود یک کلید

گاهی قبل از استفاده از یک مقدار، بهتر است بررسی کنیم که آیا کلید مورد نظر وجود دارد یا خیر.

مثال:

student = {

    "name": "Ali",
    "score": 90

}


if "score" in student:

    print(student["score"])

else:

    print("Score not found")

خروجی:

90

پیمایش در Dictionary

یکی از کاربردهای مهم Dictionary، خواندن تمام اطلاعات آن است. برای این کار از حلقه for استفاده می‌کنیم.

مثال:

student = {

    "name": "Ali",
    "age": 20,
    "city": "Tehran"

}


for key in student:

    print(key)
    print(student[key])

خروجی:

name
Ali

age
20

city
Tehran

در این حلقه:

for key in student:

هر بار یکی از کلیدهای Dictionary داخل متغیر key قرار می‌گیرد.

سپس:

student[key]

مقدار مربوط به آن کلید را برمی‌گرداند.

7. پروژه تبدیل امتیاز دانش‌آموزان به سطح عملکرد

حالا می‌خواهیم یک مسئله واقعی‌تر حل کنیم.

فرض کنید امتیاز چند دانش‌آموز را داریم و می‌خواهیم بر اساس امتیاز آن‌ها یک سطح عملکرد تعیین کنیم.

قوانین:

  • بالاتر از ۹۰ → عالی
  • بالاتر از ۸۰ → خوب
  • بالاتر از ۷۰ → قابل قبول
  • کمتر از آن → مردود

اطلاعات اولیه

ابتدا امتیازها را در یک Dictionary ذخیره می‌کنیم.

student_scores = {

    "Ali": 95,
    "Sara": 84,
    "Reza": 72,
    "Mina": 60

}

ساخت Dictionary جدید برای نتیجه

حالا نتیجه هر دانش‌آموز را در Dictionary دیگری ذخیره می‌کنیم.

student_grades = {}


for student in student_scores:

    score = student_scores[student]


    if score >= 90:

        student_grades[student] = "Excellent"


    elif score >= 80:

        student_grades[student] = "Good"


    elif score >= 70:

        student_grades[student] = "Acceptable"


    else:

        student_grades[student] = "Fail"



print(student_grades)

خروجی:

{
'Ali': 'Excellent',
'Sara': 'Good',
'Reza': 'Acceptable',
'Mina': 'Fail'
}

در این پروژه چند مفهوم را همزمان استفاده کردیم:

  • Dictionary
  • حلقه for
  • شرط‌ها
  • ایجاد داده جدید

این ترکیب در پروژه‌های واقعی بسیار رایج است.

8. ساختارهای داده تو در تو (Nested Data Structures)

در پروژه‌های واقعی، داده‌ها معمولاً ساده نیستند. برای مثال اطلاعات یک کاربر فقط یک مقدار نیست. ممکن است شامل:

  • نام
  • ایمیل
  • لیست سفارش‌ها
  • تاریخ‌ها
  • تنظیمات

باشد.

برای مدیریت این اطلاعات از ساختارهای تو در تو استفاده می‌کنیم.

قرار دادن List داخل Dictionary

مثال:

user = {

    "name": "Ali",

    "skills": [
        "Python",
        "JavaScript",
        "SQL"
    ]

}


print(user["skills"])

خروجی:

['Python', 'JavaScript', 'SQL']

دسترسی به یک مقدار ازلیست:

print(user["skills"][0])

خروجی:

Python

قرار دادن Dictionary داخل Dictionary

گاهی یک Dictionary شامل چند Dictionary دیگر است.

مثال:

users = {

    "user1": {

        "name": "Ali",
        "age": 25

    },


    "user2": {

        "name": "Sara",
        "age": 30

    }

}

برای دسترسی:

print(users["user1"]["name"])

خروجی:

Ali

قرار دادن Dictionary داخل List

یکی از پرکاربردترین ساختارها در برنامه‌های واقعی:

products = [

    {
        "name": "Laptop",
        "price": 900
    },


    {
        "name": "Phone",
        "price": 500
    }


]

در اینجا:

  • یک List داریم.
  • هر عضو List یک Dictionary است.

چرا این ساختار مهم است؟

چون بسیاری از داده‌هایی که از اینترنت دریافت می‌کنیم، همین شکل را دارند.

مثلاً یک API فروشگاه:

[
    {
        "id":1,
        "name":"Laptop"
    },

    {
        "id":2,
        "name":"Phone"
    }
]

9. کار با داده‌های پیچیده و توابع

حالا می‌خواهیم ترکیب مهم‌تری ایجاد کنیم:

ارسال Dictionary به تابع

در پایتون Dictionary هم مانند سایر داده‌ها می‌تواند ورودی تابع باشد.

مثال:

def show_user(user):

    print(
        f"Name: {user['name']}"
    )

    print(
        f"Age: {user['age']}"
    )



person = {

    "name": "Ali",
    "age": 25

}


show_user(person)

خروجی:

Name: Ali
Age: 25

اضافه کردن اطلاعات جدید با تابع

حالا یک تابع می‌سازیم که اطلاعات کشور جدیدی را به لیست سفرها اضافه کند.

ابتدا لیست اطلاعات:

travel_history = [

    {
        "country": "France",
        "cities": [
            "Paris",
            "Lyon"
        ],
        "visits": 3
    }

]

تابع اضافه کردن کشور:

def add_country(
    country_name,
    visit_count,
    cities
):

    new_country = {

        "country": country_name,
        "visits": visit_count,
        "cities": cities

    }


    travel_history.append(new_country)



add_country(
    "Japan",
    2,
    [
        "Tokyo",
        "Osaka"
    ]
)


print(travel_history)

در اینجا یاد گرفتیم که:

  • تابع می‌تواند اطلاعات دریافت کند.
  • Dictionary می‌تواند داخل List قرار بگیرد.
  • با تابع می‌توانیم داده جدید بسازیم و ذخیره کنیم.

این دقیقاً همان الگویی است که در برنامه‌های واقعی برای مدیریت اطلاعات استفاده می‌شود.

10. بازگرداندن مقدار از تابع (Return)

تا اینجا در بیشتر مثال‌ها، توابع ما فقط یک کار انجام می‌دادند و نتیجه را با print() نمایش می‌دادند. اما در برنامه‌های واقعی معمولاً نمی‌خواهیم تابع فقط چیزی را

نمایش دهد. ما نیاز داریم نتیجه یک محاسبه را دریافت کنیم و در بخش دیگری از برنامه استفاده کنیم. برای این کار از دستور return استفاده می‌کنیم.

تفاوت Print و Return

ابتدا یک مثال با print() ببینیم:

def calculate_sum(a, b):

    print(a + b)


calculate_sum(5, 10)

خروجی:

15

این کد عدد ۱۵ را نمایش می‌دهد، اما ما نمی‌توانیم آن را در یک متغیر ذخیره کنیم.

مثلاً:

result = calculate_sum(5, 10)

print(result)

خروجی:

15
None

چرا؟

چون تابع چیزی برنگردانده است.

استفاده از Return

حالا همان مثال را با return می‌نویسیم:

def calculate_sum(a, b):

    return a + b



result = calculate_sum(5, 10)


print(result)

خروجی:

15

در این حالت مقدار خروجی تابع را دریافت کرده‌ایم.

ذخیره نتیجه تابع

یکی از مزیت‌های مهم return این است که می‌توانیم نتیجه را ذخیره کنیم.

مثال:

def multiply(number1, number2):

    return number1 * number2



price = multiply(20, 5)


total_price = price + 100


print(total_price)

خروجی:

200

چند مقدار در یک تابع

یک تابع می‌تواند چند مقدار را همزمان برگرداند.

مثال:

def calculate(a, b):

    total = a + b
    difference = a - b

    return total, difference



result = calculate(10, 3)


print(result)

خروجی:

(13, 7)

استفاده از Return در پروژه‌ها

فرض کنید یک فروشگاه داریم.

به جای اینکه تابع فقط قیمت را چاپ کند، بهتر است مقدار را برگرداند.

def calculate_discount(price, discount):

    final_price = price - (price * discount / 100)

    return final_price



new_price = calculate_discount(1000, 20)


print(new_price)

خروجی:

800

حالا می‌توانیم این مقدار را:

  • ذخیره کنیم.
  • داخل دیتابیس قرار دهیم.
  • دوباره محاسبه کنیم.
  • نمایش دهیم.

11. مستندسازی توابع با Docstring

وقتی برنامه‌ها بزرگ‌تر می‌شوند، فقط نوشتن کد کافی نیست.

بعد از مدتی ممکن است خودمان هم فراموش کنیم یک تابع دقیقاً چه کاری انجام می‌دهد.

برای توضیح هدف تابع از Docstring استفاده می‌کنیم.

Docstring چیست؟

Docstring یک متن توضیحی است که در اولین خط داخل تابع نوشته می‌شود.

مثال:

def calculate_area(width, height):

    """
    Calculate the area of a rectangle
    using width and height.
    """


    return width * height

این توضیح به برنامه‌نویس کمک می‌کند بفهمد تابع چه کاری انجام می‌دهد.

مشاهده Docstring

می‌توانیم توضیحات تابع را ببینیم:

print(calculate_area.__doc__)

خروجی:

Calculate the area of a rectangle
using width and height.

چرا Docstring مهم است؟

در پروژه‌های بزرگ:

  • چندین برنامه‌نویس روی یک پروژه کار می‌کنند.
  • تعداد توابع زیاد می‌شود.
  • نگهداری کد سخت‌تر می‌شود.

داشتن توضیح برای توابع باعث می‌شود کد حرفه‌ای‌تر و قابل فهم‌تر باشد.

12. پروژه تمرینی بخش سوم: سیستم مزایده (Blind Auction)

در این پروژه چند مفهوم مهم را ترکیب می‌کنیم:

  • Dictionary
  • Function
  • Loop
  • شرط‌ها
  • ورودی کاربر

ایده پروژه

فرض کنید چند نفر در یک مزایده شرکت می‌کنند.

هر شخص:

  • نام خود را وارد می‌کند.
  • مبلغ پیشنهادی خود را وارد می‌کند.

در پایان برنامه باید:

  • بیشترین پیشنهاد را پیدا کند.
  • برنده را اعلام کند.

ابتدا یک Dictionary برای ذخیره پیشنهادها ایجاد می‌کنیم.

مثال:

bids = {

    "Ali": 500,
    "Sara": 700,
    "Reza": 600

}

ساختار:

نام شخص : مبلغ پیشنهاد

ساخت تابع پیدا کردن برنده

تابع باید Dictionary را دریافت کند. سپس تمام پیشنهادها را بررسی کند.

def find_highest_bidder(bidding_data):

    highest_bid = 0
    winner = ""


    for bidder in bidding_data:

        bid_amount = bidding_data[bidder]


        if bid_amount > highest_bid:

            highest_bid = bid_amount
            winner = bidder



    print(
        f"Winner is {winner} with ${highest_bid}"
    )

اجرای برنامه کامل:

import os


bids = {}


auction_finished = False



def find_highest_bidder(bidding_data):

    highest_bid = 0
    winner = ""


    for bidder in bidding_data:

        bid_amount = bidding_data[bidder]


        if bid_amount > highest_bid:

            highest_bid = bid_amount
            winner = bidder



    print(
        f"Winner is {winner} with ${highest_bid}"
    )




while not auction_finished:


    name = input(
        "Enter your name: "
    )


    price = int(
        input("Enter your bid: ")
    )


    bids[name] = price



    another_bidder = input(
        "Any other bidders? yes/no: "
    )



    if another_bidder == "no":

        auction_finished = True

        find_highest_bidder(bids)


    elif another_bidder == "yes":

        os.system("cls")

در این پروژه یاد گرفتیم:

Dictionary برای ذخیره اطلاعات

bids[name] = price

هر پیشنهاد جدید را ذخیره می‌کند.

تابع برای جدا کردن یک وظیفه

find_highest_bidder()

فقط مسئول پیدا کردن برنده است.

حلقه برای بررسی اطلاعات

for bidder in bidding_data:

تمام پیشنهادها را بررسی می‌کند.

این پروژه نمونه‌ای از یک برنامه واقعی مدیریت داده است.

جمع‌بندی بخش سوم

در این بخش یک قدم مهم در مسیر برنامه‌نویسی برداشتیم. یاد گرفتیم چگونه کدهای خود را با توابع مرتب‌تر کنیم، اطلاعات را با Dictionary مدیریت کنیم و ساختارهای پیچیده‌تر برای ذخیره داده بسازیم.

همچنین با ساخت پروژه‌هایی مانند سیستم مزایده دیدیم که چگونه چند مفهوم ساده می‌توانند در کنار هم یک برنامه کاربردی ایجاد کنند.


13. چند تمرین برای این بخش:

 تمرین 1: برنامه‌ای بنویسید که نام چند دانش‌آموز را دریافت کند، نمره آنها را ذخیره کند، میانگین کلاس را محاسبه کند و بالاترین نمره را پیدا کند.

 شرایط: (اطلاعات باید داخل dictionary ذخیره شود –  محاسبه میانگین با یک تابع انجام شود.)

مشاهده پاسخ تمرین 1

student_scores = {

    "Ali": 90,
    "Sara": 80,
    "Reza": 70,
    "Mina": 95

}


def calculate_average(scores):

    total = 0


    for student in scores:

        total += scores[student]


    average = total / len(scores)


    return average



def find_highest_score(scores):

    highest_student = ""
    highest_score = 0


    for student in scores:

        if scores[student] > highest_score:

            highest_score = scores[student]
            highest_student = student


    return highest_student, highest_score



average = calculate_average(student_scores)


student, score = find_highest_score(student_scores)



print(f"Average: {average}")

print(
    f"Highest score: {student} with {score}"
)

تمرین 2: یک برنامه بسازید که اطلاعات محصولات را مدیریت کند: هر محصول شامل نام محصول، قیمت، تعداد موجودی باشد.

 قابلیت‌ها: (اضافه‌کردن محصول جدید، نمایش محصولات، محاسبه ارزش کل انبار) – از لیست و دیکشنری استفاده کنید.

مشاهده پاسخ تمرین 2
products = [

    {
        "name": "Laptop",
        "price": 800,
        "stock": 5
    },


    {
        "name": "Phone",
        "price": 500,
        "stock": 10
    }

]



def add_product(name, price, stock):

    new_product = {

        "name": name,
        "price": price,
        "stock": stock

    }


    products.append(new_product)




def show_products():

    for product in products:

        print(
            f"{product['name']} - Price: {product['price']} - Stock: {product['stock']}"
        )




def calculate_inventory_value():

    total = 0


    for product in products:

        total += (
            product["price"] *
            product["stock"]
        )


    return total




add_product(
    "Tablet",
    300,
    8
)


show_products()


total_value = calculate_inventory_value()


print(
    f"Total inventory value: {total_value}"
)

 تمرین 3: تابعی بسازید که تبدیل واحد انجام دهد. برای مثال کیلومتر به متر و متر به سانتی‌متر

 برنامه باید نوع تبدیل را دریافت کند، مقدار را دریافت کند و نتیجه را برگرداند.

مشاهده پاسخ تمرین 3
def convert_unit(value, conversion_type):


    if conversion_type == "km_to_m":

        return value * 1000



    elif conversion_type == "m_to_cm":

        return value * 100



    else:

        return "Invalid conversion"




distance = float(
    input("Enter value: ")
)


conversion = input(
    "Choose conversion (km_to_m / m_to_cm): "
)



result = convert_unit(
    distance,
    conversion
)



print(result)

تمرین 4: برنامه‌ای بنویسید که یک عدد تصادفی تولید کند، کاربر حدس بزند، با شرط‌ها مشخص کند عدد بزرگ‌تر یا کوچک‌تر است و تعداد تلاش‌ها را ذخیره کند.

 قوانین: منطق بررسی حدس داخل یک تابع باشد – نتیجه تابع با return برگردانده شود.

مشاهده پاسخ تمرین 4

import random



secret_number = random.randint(1, 100)


attempts = 0



def check_guess(user_guess, secret):


    if user_guess > secret:

        return "Too high"


    elif user_guess < secret:

        return "Too low"


    else:

        return "Correct"




game_finished = False



while not game_finished:


    guess = int(
        input("Guess the number: ")
    )


    attempts += 1


    result = check_guess(
        guess,
        secret_number
    )


    print(result)



    if result == "Correct":

        game_finished = True


        print(
            f"You won in {attempts} attempts"
        )

 تمرین 5: برنامه‌ای طراحی کنید که اطلاعات حساب کاربران را ذخیره کند. هر کاربر نام و موجودی داشته باشد.

 توابعی بسازید برای واریز پول، برداشت پول و نمایش موجودی.

مشاهده پاسخ تمرین 5

accounts = {

    "Ali": {

        "balance": 1000

    },


    "Sara": {

        "balance": 2000

    }

}



def deposit(user, amount):


    accounts[user]["balance"] += amount


    return accounts[user]["balance"]





def withdraw(user, amount):


    if accounts[user]["balance"] >= amount:


        accounts[user]["balance"] -= amount


        return accounts[user]["balance"]



    else:

        return "Insufficient balance"





def show_balance(user):


    return accounts[user]["balance"]





print(
    deposit(
        "Ali",
        500
    )
)


print(
    withdraw(
        "Sara",
        700
    )
)


print(
    show_balance("Ali")
)

ادامه مطلب