Thursday, January 14, 2021

Python - Function Parameters (Day 8)

This is a 100 Days challenge to learn a new language (Python). 100 Days of Code - The Complete Python Pro Bootcamp 

I will post some notes to motivate myself to finish this challenge.


Function parameters and arguments



Ex:
# Define a function with some parameters
# something is called 'Parameter'
# something is a name of data which has been passing to this function,
# then we can use this name inside this function as an reference
def my_function(something):
    print(f"this is {something}")

# Call a function and pass an argument
# 123 is called 'Argument'
# 123 is a actual value of the date we are passing to
my_function(123)

Result:
this is 123



Positional V.S. Keyword Argument



Ex:
# a custom func
def my_func(name, age):
    print(f"Hello {name}. you are {age} years old")


# positional argument
# order matters
my_func("frank", 5)

# keyword argument
# order does not matters
my_func(age=5, name="frank")

Result:
Hello frank. you are 5 years old Hello frank. you are 5 years old



Challenge - Caesar Cipher



What is it? Reference

Ex:
# Caesar Cipher
# Example
# plain_text = "hello"
# shift = 5
# cipher_text = "mjqqt"

alphabet = ['a', 'b', 'c', 'd', 'e',
            'f', 'g', 'h', 'i', 'j',
            'k', 'l', 'm', 'n', 'o',
            'p', 'q', 'r', 's', 't',
            'u', 'v', 'w', 'x', 'y',
            'z']

direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n")
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))

# Custom Func
def caesar(direction, text, shift):
    # Define a variable for returning
    result_str = ""

    # Reduce the shift number
    # For example, if shift is 26, then the cipher text and
# the raw text are the same
    shift = shift % len(alphabet)

    if direction == 'decode':
        shift *= -1

    # Loop through all letters in text
    for letter in text:
        # Calculate the new index
        new_index = alphabet.index(letter)+ shift

        if new_index <= -1:
            # Ex: index -1 => index 25
            new_index += len(alphabet)
        elif new_index >= len(alphabet):
            # Ex: index 26 => index 0
            new_index -= len(alphabet)

        # Concatenate the string from the encoded letter
        result_str += alphabet[new_index]

    print(f"Here's the {direction} result: {result_str}")

# Call a funtion to process caesar cipher
caesar(direction, text, shift)

Result:
Type 'encode' to encrypt, type 'decode' to decrypt: encode Type your message: hello Type the shift number: 5 Here's the encode result: mjqqt

Type 'encode' to encrypt, type 'decode' to decrypt: decode Type your message: mjqqt Type the shift number: 5 Here's the decode result: hello


No comments:

Post a Comment