363 lines
9.3 KiB
Plaintext
363 lines
9.3 KiB
Plaintext
{
|
||
"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
|
||
}
|