SE_BMMF/07kapitel/070a Uebung.ipynb

235 lines
5.0 KiB
Plaintext
Raw Normal View History

2022-03-21 12:07:02 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"pycharm": {
"name": "#%% md\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"_Aufgabe 1_\n",
"\n",
"Schreiben Sie eine Funktion <code>get_it_or_none1</code>, die ein Dictionary und einen\n",
"Schlüsselwert als Parameter erhält. Sie soll den im Dictionary gespeicherten Wert\n",
"zurückgeben, wenn er enthalten ist, andernfalls <code>None</code>.\n",
"\n",
"Vermeiden Sie bei der Implementierung das Auftreten einer Exception, indem Sie vor\n",
"dem Zugriff prüfen, ob der Schlüssel enthalten ist."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"def get_it_or_none1(dict_arg, key):\n",
" if key in dict_arg:\n",
" return dict_arg[key]\n",
" else:\n",
" return None\n",
" \n",
"my_dict = {'a': 1, 2: 'b'}\n",
"print(get_it_or_none1(my_dict, 'a'))\n",
"print(get_it_or_none1(my_dict, 'b'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"_Aufgabe 2_\n",
"\n",
"Implementieren Sie eine Funktion <code>get_it_or_none2</code> mit der gleichen\n",
"Funktionalität. Allerdings verzichten Sie dieses Mal auf die Prüfung und Fangen\n",
"eine evtl. auftretende Exception, um dann <code>None</code> zurückzugeben."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"def get_it_or_none2(dict_arg, key):\n",
" try:\n",
" return dict_arg[key]\n",
" except:\n",
" return None\n",
" \n",
"my_dict = {'a': 1, 2: 'b'}\n",
"print(get_it_or_none2(my_dict, 'a'))\n",
"print(get_it_or_none2(my_dict, 'b'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"_Aufgabe 3_\n",
"\n",
"Überprüfen Sie die Laufzeit der beiden Varianten, indem Sie jede Funktion\n",
"10000-mal so aufrufen, dass <code>None</code> zurückgegeben wird. Was ist schneller?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"import timeit\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"import timeit\n",
"\n",
"my_dict = {}\n",
2022-05-12 08:46:17 +02:00
"print(f'get_it_or_none1:: {timeit.timeit(lambda: get_it_or_none1(my_dict, 0), number=10000)}')\n",
"print(f'get_it_or_none2:: {timeit.timeit(lambda: get_it_or_none2(my_dict, 0), number=10000)}')\n"
2022-03-21 12:07:02 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"_Aufgabe 4_\n",
"\n",
"Tatsächlich besitzt ein Python-Dictionary eine bisher nicht eingeführte Methode\n",
"<code>get</code>, der neben dem Schlüssel auch ein Default-Wert übergeben werden kann,\n",
"der zurückgegeben wird, wenn der Schlüssel nicht enthalten ist.\n",
"\n",
"<code>dict.get( \\< key \\>, \\< default \\> ) </code>\n",
"\n",
"Überprüfen Sie auch die Laufzeit dieses Ansatzes."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
2022-05-12 08:46:17 +02:00
"print(f'get_it_or_none2:: {timeit.timeit(lambda: my_dict.get(0), number=10000)}')\n"
2022-03-21 12:07:02 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Wie erklären Sie sich die Ergebnisse?"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
}
},
"nbformat": 4,
"nbformat_minor": 1
}