Skip to main content
`Ctrl`+`K`

# Functions

Read Functions before you start with the exercises.

## Inplace Squaring

Write a function which squares all numbers in a list. The list of numbers is the only parameter and there is no return value. The results have to be stored in the original list.

Test your code with

    [1, 2, 3, 4, 5]

Solution:

    # your solution

## Arbitrary Keyword Arguments

Write a function taking an arbitrary number of keyword arguments and printing all of them.

Test your code by passing

    a=1, b='test', c=(1, 2, 3)

This should yield the output

    a: 1
    b: test
    c: (1, 2, 3)

Solution:

    # your solution

## Apply to All

Write a function `apply_to_all` which takes an arbitrary number of arguments.

- The first argument is a function taking a float and returning a float.

- All other arguments are floats.

The `apply_to_all` function shall apply the first argument (function) to all other arguments (floats). Results shall be returned as tuple of floats.

Test your code with a function, which calculates the square of a number. So calling `apply_to_all(lambda x: x * x, 3, 2, 5)` yields `(9, 4, 25)`.

Hint: For `apply_to_all` one short line of code suffices, but you may use more.

Solution:

    # your solution

## Composition

Write a function `apply_composition` which takes an arbitrary number of positional arguments.

- The first argument is mandatory. It’s a float.

- All other arguments are optional. They are real functions of a real variable, which shall be applied to the first argument.

Example: If three functions are passed to your function, then the first is to be applied to the float, the second is to be applied to the result of the first function, and the third is to be applied to the result of the second function.

Test your code with `23.42` and the following functions:

- square a number

- add 3

- sine (from `math` module)

- multiply by 2

Result should be `-1.9784623024455807`.

Solution:

    # your solution

## Sorting

Sort a list of paths by file name. Use `list.sort` with custom sort key.

Test your code with

    ['/some/path/file.txt',
    '/another/path/xfile.txt',
    'file_without_path.xyz',
    '../relative/path/abc.py',
    '/no/extension/some_file.txt']

Result should be

    ['../relative/path/abc.py',
     '/some/path/file.txt',
     'file_without_path.xyz',
     '/no/extension/some_file.txt',
     '/another/path/xfile.txt']

Solution:

    # your solution

## Loop versus Recursion

Given an integer \(n\) calculate \(n!\) (see Combinatorics for a definition) using a loop. Then calculate \(n!\) by exploiting the recursive rule \(n!=n\cdot(n-1)!\). Test both functions with \(10!=3628800\).

Solution:

    # your solution