sq_01_python_intro/jupyter_book/06_schleifen_arrays.ipynb

363 lines
9.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"id": "a6eda542-00bd-401a-a2cd-735f182ffee4",
"metadata": {},
"source": [
"# Schleifen und Arrays\n",
"## For-Schleifen\n",
"\n",
"Addiere die Zahlen 1 bis 100 ist eine Aufgabe, die man effizient mit der [Gaußschen Summenformel](https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Summenformel) lösen kann.\n",
"Wir wollen aber den Computer die einzelnen Berechnungen durchführen lassen.\n",
"Hierfür muss dieser\n",
"* von 1 bis 100 Zählen\n",
"* und diese Zahl jeweils auf die bisherige Summe addieren\n",
"\n",
"Als Funktion sieht das so aus:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "92c0754d-0ad9-4920-97f1-fba219b24fcd",
"metadata": {},
"outputs": [],
"source": [
"def sum(start, end):\n",
" sum = 0\n",
" for i in range(start, end):\n",
" sum = sum + i\n",
" return sum"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "0abe90ed-f16c-4f85-91a2-72e3a16144ec",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5050"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(1,101)"
]
},
{
"cell_type": "markdown",
"id": "9088fa07-2889-4470-9903-df1a5c1e1b3f",
"metadata": {},
"source": [
" Bei der Programmierung hält man sich i.d.R. daran, dass bei einem Bereich\n",
"* der erste Wert dazu gehört\n",
"* der zweite Wert aber nicht mehr.\n",
"\n",
"Damit ist ein Jahr z.B. definiert als 1.1.2022 - 1.1.2023.\n",
"Das gilt auch für die Funktion `range()`, die einen Zahlenbereich liefert."
]
},
{
"cell_type": "markdown",
"id": "9a878b57-d866-43e5-a5af-863eea90b1b5",
"metadata": {},
"source": [
"## Arrays\n",
"Bisher hatten Variablen genau einen Wert, eine Zahl oder einen Text.\n",
"Manchmal ist es aber praktisch, mehrere Werte darin zu speichern, z.B. den zu erwartenden Kontostand in den nächsten Jahren wenn man Geld mit einem bestimmten Zinssatz angelegt hat.\n",
"\n",
"Für so etwas gibt es Arrays."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "ea885cba-1b89-4ce2-b1e6-bcb737e0158b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Array mit den Werten 1, 2 und 3\n",
"a = [1,2,3]\n",
"# 8 mal der Arry [1], d.h. [1, 1, 1, 1,1, 1, 1, 1]\n",
"b = [1] * 8\n",
"# Arrays kann man aneinanderfügen\n",
"c = a + b\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "aaf07a48-d337-4418-8d98-1e1abe35a1f4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# die Reihenfole umdrehen - Achtung: es wird nichts zurückgeliefert, c wird intern geändert\n",
"c.reverse()\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "bdc988c6-a831-4303-a7c1-38aaeed2772f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Auf einzelne Elemente des Arrays kann man zugreifen\n",
"a[0] + a[1]"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "6fa6c3ef-b765-49b5-aebe-8ef53009b202",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 4]"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Ein neues Element hinten an den Array anhängen\n",
"a.append(4)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "16ac89fe-daf4-4472-9d7d-613530f37a76",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"24"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Einen Array kann man statt range() auch in einer for-Schleife verwenden\n",
"# Hier erhält die Variable i in jeden Durchlauf der Schleife einen Wert des Arrays a\n",
"# Abhängig von der Berechung in der Schleife muss das Ergebnis (hier prod)\n",
"# vorher initialisiert werden\n",
"prod = 1\n",
"for i in a:\n",
" prod = prod * i\n",
" \n",
"prod"
]
},
{
"cell_type": "markdown",
"id": "d60f9fd7-9b3f-4a1f-a572-c7e4407dd561",
"metadata": {},
"source": [
"## Aufgabe\n",
"❓ Schreibe eine Funktion, die als Parameter einen **Anlagebetrag**, einen **Zins** und die **Laufzeit** in Jahren entgegennimmt, \n",
"die Zinsrechnung durchführt (Zinsen werden wieder angelegt) und einen Array zurückliefert, bei dem das 0te Element den aktuellen Geldbetrag enthält und die darauffolgenden Elemente den Kontostand nach jeweils n Jahren."
]
},
{
"cell_type": "markdown",
"id": "67f9d6d7-9d51-4217-8555-b4e409848775",
"metadata": {},
"source": [
"## Lösung"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "f0eca3d7-6b3e-4f06-869b-cbc563cce9c8",
"metadata": {},
"outputs": [],
"source": [
"def zinsrechnung(anlagebetrag, zins, jahre):\n",
" \"\"\"Berechnet den Kontonstand der nächsten Jahre\n",
" \n",
" anlagebetrag\n",
" Der inital angelegte Betrag\n",
" zins\n",
" Der vereinbarte Zins. Dieser bleibt über die gesamte Laufzeit gleich. Ein Zins von 1.5% muss als 1.5 angegeben werden.\n",
" jahre\n",
" Die Anlagedauer in Jahren.\n",
" \n",
" Das Ergebis ist ein Array mit jahre + 1 Elementen.\n",
" Das 0. Element enthält den Anlagebetrag, das 1. Element den Gesamtbetrag nach Verzinsung nach dem ersten Jahr, ...\n",
" \"\"\"\n",
" \n",
" result = [anlagebetrag] # Initialisieren mit anlagebetrag\n",
" factor = (1 + zins / 100) # ist für jeden Schleifendurchlauf gleich, muss man nur einmal berechnen\n",
" \n",
" for i in range(0, jahre):\n",
" result.append(result[i] * factor)\n",
" \n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "738f1035-38a9-45ad-ad94-e0ec4831c00d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1000, 1010.0, 1020.1, 1030.301]"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"zinsrechnung(1000, 1, 3)"
]
},
{
"cell_type": "markdown",
"id": "33c234e2-bb8d-4164-bf83-ab2929d228e6",
"metadata": {},
"source": [
"## Aufgabe\n",
"\n",
"❓ Jetzt erweitern wir die vorherige Aufgabe.\n",
"Der Zinssatz kann variabel sein. Er wird als Array neben dem anlagebetrag der Funktion übergeben."
]
},
{
"cell_type": "markdown",
"id": "75d53e88-adf8-481f-a385-852a27315a1b",
"metadata": {},
"source": [
"## Lösung"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "055c6f9f-5623-454a-b6ae-5579b05c6ca4",
"metadata": {},
"outputs": [],
"source": [
"def variabler_zins(anlagebetrag, zinsen):\n",
" \"\"\"Berechnet den Kontonstand der nächsten Jahre\n",
" \n",
" anlagebetrag\n",
" Der inital angelegte Betrag\n",
" zinsen\n",
" Array mit den Zinssätzen der nächsten Jahre. [1.0, 1.5] bedeutet, \n",
" dass der Kontostand für 2 Jahre berechnet werden soll und im 1. Jahr 1.0%\n",
" und im 2. Jahr 1.5% Zinsen gezahlt werden und die Zinsen wiederangelegt werden.\n",
" \n",
" Das Ergebis ist ein Array mit jahre + 1 Elementen.\n",
" Das 0. Element enthält den Anlagebetrag, das 1. Element den Gesamtbetrag nach Verzinsung nach dem ersten Jahr, ...\n",
" \"\"\"\n",
" jahre = len(zinsen)\n",
" result = [anlagebetrag]\n",
" for i in range(0, jahre):\n",
" result.append(result[i] * (1+ zinsen[i]/100))\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "26510caa-6a87-4b8e-98fc-bc1d9dfc5f85",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1000, 1010.0, 1025.1499999999999, 1045.6529999999998]"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"variabler_zins(1000, [1.0, 1.5, 2.0])"
]
}
],
"metadata": {
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}