Bird
Raised Fist0
Pythonprogramming~10 mins

Polymorphism through functions in Python - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a function that prints the length of any input.

Python
def print_length([1]):
    print(len(item))

print_length("hello")
Drag options to blanks, or click blank then click option'
Avalue
Blength
Citem
Dobj
Attempts:
3 left
💡 Hint
Common Mistakes
Using a parameter name different from the variable inside the function causes a NameError.
2fill in blank
medium

Complete the code to call the function with a list argument.

Python
def print_length(item):
    print(len(item))

print_length([1])
Drag options to blanks, or click blank then click option'
A[1, 2, 3]
B5
C"hello"
Dlen
Attempts:
3 left
💡 Hint
Common Mistakes
Passing an integer like 5 causes a TypeError because integers have no length.
3fill in blank
hard

Fix the error in the function to handle any input and print its length.

Python
def print_length(item):
    print([1](item))

print_length(12345)
Drag options to blanks, or click blank then click option'
Acount
Blen
Csize
Dlength
Attempts:
3 left
💡 Hint
Common Mistakes
Using undefined functions like length or size causes NameError.
4fill in blank
hard

Fill both blanks to create a function that works with strings and lists, printing their lengths.

Python
def print_length([1]):
    print(len([2]))

print_length("test")
print_length([1, 2, 3])
Drag options to blanks, or click blank then click option'
Adata
Citem
Dvalue
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names causes NameError.
5fill in blank
hard

Fill all three blanks to create a function that prints the length of the uppercase version of a string argument.

Python
def print_upper_length([1]):
    upper_str = [2].upper()
    print(len([3]))

print_upper_length("hello")
Drag options to blanks, or click blank then click option'
Atext
Cupper_str
Dtext.upper()
Attempts:
3 left
💡 Hint
Common Mistakes
Using text.upper() directly in print causes error because it's not stored.
Mismatching variable names causes NameError.

Practice

(1/5)
1.

What does polymorphism through functions mean in Python?

easy
A. Functions cannot be reused with different inputs
B. Multiple functions have the same name but different parameters
C. Functions can only accept one specific data type
D. A single function works with different data types

Solution

  1. Step 1: Understand polymorphism concept

    Polymorphism means one function can handle different types of inputs.
  2. Step 2: Relate to function behavior

    In Python, a single function can accept various data types and behave accordingly.
  3. Final Answer:

    A single function works with different data types -> Option D
  4. Quick Check:

    Polymorphism = single function, many types [OK]
Hint: Think: one function, many input types [OK]
Common Mistakes:
  • Confusing polymorphism with function overloading
  • Believing functions accept only one data type
  • Mixing polymorphism with inheritance
2.

Which of the following is the correct way to check a variable's type inside a function for polymorphism?

def process(value):
    # What to use here?
    pass
easy
A. if type(value) == int:
B. if value is int:
C. if isinstance(value, int):
D. if value == int:

Solution

  1. Step 1: Recall Python type checking methods

    Using isinstance() is the recommended way to check type in Python.
  2. Step 2: Compare options

    if isinstance(value, int): uses isinstance(value, int), which correctly checks if value is an int or subclass.
  3. Final Answer:

    if isinstance(value, int): -> Option C
  4. Quick Check:

    Use isinstance() for type checks [OK]
Hint: Use isinstance() to check types safely [OK]
Common Mistakes:
  • Using 'type() == int' which fails with subclasses
  • Using 'is' or '==' incorrectly for type comparison
  • Not checking type at all
3.

What is the output of this code?

def describe(value):
    if isinstance(value, int):
        return f"Integer: {value}"
    elif isinstance(value, str):
        return f"String: {value}"
    else:
        return "Unknown type"

print(describe(10))
print(describe('hello'))
print(describe(3.14))
medium
A. Integer: 10\nString: hello\nUnknown type
B. Integer: 10\nString: hello\nFloat: 3.14
C. Unknown type\nUnknown type\nUnknown type
D. Integer: 10\nUnknown type\nUnknown type

Solution

  1. Step 1: Check input 10

    10 is int, so returns 'Integer: 10'.
  2. Step 2: Check input 'hello'

    'hello' is str, so returns 'String: hello'.
  3. Step 3: Check input 3.14

    3.14 is float, not int or str, so returns 'Unknown type'.
  4. Final Answer:

    Integer: 10 String: hello Unknown type -> Option A
  5. Quick Check:

    Type checks match outputs [OK]
Hint: Match isinstance checks to output lines [OK]
Common Mistakes:
  • Assuming float is handled like int or str
  • Ignoring else case output
  • Mixing output order
4.

Find the error in this polymorphic function and fix it:

def process(value):
    if isinstance(value, int):
        return value * 2
    elif isinstance(value, str):
        return value + value
    else:
        return value / 2

print(process('abc'))
print(process([1, 2, 3]))
medium
A. No error; code runs fine
B. Error: Cannot divide list by 2; fix by handling list separately
C. Error: Missing return statement for int type
D. Error: Cannot multiply string by 2; fix by converting to int

Solution

  1. Step 1: Analyze input 'abc'

    String input returns 'abcabc' by concatenation, no error.
  2. Step 2: Analyze input [1, 2, 3]

    List input goes to else: value / 2, but dividing list by 2 causes TypeError.
  3. Step 3: Fix the error

    Need to add a check for list type or avoid dividing list by 2.
  4. Final Answer:

    Error: Cannot divide list by 2; fix by handling list separately -> Option B
  5. Quick Check:

    List / 2 causes error [OK]
Hint: Check operations valid for each type [OK]
Common Mistakes:
  • Assuming all types support division
  • Not testing with different input types
  • Ignoring TypeError exceptions
5.

Write a polymorphic function combine that accepts either two strings or two lists and returns their concatenation. What is the output of this code?

def combine(a, b):
    if isinstance(a, str) and isinstance(b, str):
        return a + b
    elif isinstance(a, list) and isinstance(b, list):
        return a + b
    else:
        return None

print(combine('Hi, ', 'there!'))
print(combine([1, 2], [3, 4]))
print(combine('Hello', [1, 2]))
hard
A. 'Hi, there!'\n[1, 2, 3, 4]\nNone
B. 'Hi, there!'\n[1, 2]\n[3, 4]
C. None\nNone\nNone
D. 'Hi, there!'\nNone\nNone

Solution

  1. Step 1: Check first call combine('Hi, ', 'there!')

    Both are strings, so returns concatenation 'Hi, there!'.
  2. Step 2: Check second call combine([1, 2], [3, 4])

    Both are lists, so returns concatenated list [1, 2, 3, 4].
  3. Step 3: Check third call combine('Hello', [1, 2])

    Types differ, so returns None.
  4. Final Answer:

    'Hi, there!' [1, 2, 3, 4] None -> Option A
  5. Quick Check:

    Type checks control output [OK]
Hint: Check types of both inputs before combining [OK]
Common Mistakes:
  • Not checking both inputs' types
  • Trying to combine different types directly
  • Returning wrong default for mismatched types