לדלג לתוכן

3.1 פונקציות פתרון

יום הולדת שמח

def happy_bd(name: str, age: int) -> None:
    print(f"Happy birthday {name}, you'r {age}!")

happy_bd("Amit", 19)

חזקה

def square(first_number: int, second_number: int) -> int:
    return first_number ** second_number

המחשבון 1

def main() -> None:
    while True:
        op = get_operation()
        num1, num2 = get_numbers()
        result = calculate(num1, op, num2)

def get_operation() -> str:
    return input("addition or subtraction? (add/sub): ")

def get_numbers() -> tuple:
    first_number = int(input("first_number> "))
    second_number = int(input("second_number> "))
    return first_number, second_number

def calculate(num1: int, op: str, num2: int) -> int:
    if op == "add":
        return num1 + num2
    elif op == "sub":
        return num1 - num2

if __name__ == "__main__":  
    main()
    ```

## המחשבון 2
**פתרון פשוט לתרגיל:**
```python
def main() -> None:  
    start_calculator()  
    print("bye!")  

def start_calculator() -> None:  
    while True:  
        command = input("> ")  
        first_number, operation, second_number = command.split()  
        result = calculate(int(first_number), operation, int(second_number))  
        print(f"res: {result}")  


def calculate(first_number: int, operation: str, second_number: int) -> int:  
    """  
    calculate result by given 2 integers and operation -> can be only +,-,*,/    """    
    if operation == "+":
        return num1 + num2
    elif operation == "-":
        return num1 - num2
    elif operation == "*":
        return num1 * num2
    elif operation == "/":
        return num1 / num2

if __name__ == "__main__":  
    main()

בעיות בפתרון
- יש המון בעיות לפתרון הפשוט הזה, מה אם נרצה להוסיף עוד 10 פעולות למחשבון, אז נצטרך להוסיף עוד 20 שורות לif הארוך בפונקציה calculate? נשמע לא ממש יעיל, בפתרון הבא, תיקנתי את הבעיה באמצעות יצירה של מילון שמכיל רשימה של כל הפעולות האפשריות וכל פעולה מצביעה על פונקציה שממשת את הפעולה בין המספרים, אחרכך אני ניגש לפונקציה ממש באמצעות משתנה:
actions = {  
        "+": add,  
        "-": sub,  
        "*": mul,  
        "/": div  
    }
function = actions[operation]

- ואני משתמש במשתנה כדי ממש לחשב את הפעולה:
result = function(first_number, second_number)  
return result 

- בפתרון הבא הוספתי גם פונקציה שמסבירה כיצד להשתמש במחשבון, וגם מאפשרת לצאת מהמחשבון באמצעות הפקודה q/
פתרון מורכב לתרגיל:
def main() -> None:  
    welcome()  
    start_calculator()  
    print("bye!")  


def welcome() -> None:  
    """  
    welcoming the user   """    welcome_message = "Amit calculator! \n" \  
                      "syntax: > number operation number \n" \  
                      "example: 1 + 3 \n" \  
                      "avilable operations: +,-,*,/ \n" \  
                      "enter /q for exit the program!"  
    print(welcome_message)  


def start_calculator() -> None:  
    while True:  
        command = input("> ")  
        if command == "/q":  
            return  
        first_number, operation, second_number = command.split()  
        result = calculate(int(first_number), operation, int(second_number))  
        print(f"res: {result}")  


def calculate(first_number: int, operation: str, second_number: int) -> int:  
    """  
    calculate result by given 2 integers and operation -> can be only +,-,*,/    """    actions = {  
        "+": add,  
        "-": sub,  
        "*": mul,  
        "/": div  
    }  
    function = actions[operation]  
    result = function(first_number, second_number)  
    return result  


def add(first_number: int, second_number: int) -> int:  
    """  
    Adding 2 given parametrs and return    """    return first_number + second_number  


def sub(first_number: int, second_number: int) -> int:  
    """  
    Subtracting 2 given parametrs and return   """    return first_number - second_number  


def mul(first_number: int, second_number: int) -> int:  
    """  
    Multiplaing 2 given parametrs and return    """    return first_number * second_number  


def div(first_number: int, second_number: int) -> float:  
    """  
    Dividing 2 given parametrs and return    """    return first_number / second_number  


if __name__ == "__main__":  
    main()

- נסו להוסיף עוד פונקצנליות למחשבון, התאמנו על כתיבת פונקציות!