<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://zumunterrichten.idea-sketch.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kwschneider</id>
	<title>ZUM-Unterrichten - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://zumunterrichten.idea-sketch.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kwschneider"/>
	<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/wiki/Spezial:Beitr%C3%A4ge/Kwschneider"/>
	<updated>2026-08-06T03:19:28Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149957</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung in objektorientierte Programmierung (OOP)</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149957"/>
		<updated>2026-02-24T14:54:59Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Quiz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 7. Einführung in objektorientierte Programmierung (OOP) =&lt;br /&gt;
&lt;br /&gt;
== Klassen und Objekte ==&lt;br /&gt;
&lt;br /&gt;
Klassen und Objekte sind ein zentraler Bestandteil der objektorientierten Programmierung, die ihr zum Beispiel mit Python kennenlernen werdet. In Python kann man mit Klassen Vorlagen für sogenannte &amp;quot;Objekte&amp;quot; erstellen – das sind Dinge oder Begriffe aus der echten Welt, die in einem Programm abgebildet werden. Eine Klasse ist wie eine Bauanleitung: Sie beschreibt, welche Eigenschaften (Attribute) und Fähigkeiten (Methoden) ein Objekt haben soll.&lt;br /&gt;
Wenn ihr zum Beispiel eine Klasse &amp;quot;Auto&amp;quot; erstellt, könnt ihr darin festlegen, dass jedes Auto eine bestimmte Farbe und eine maximale Geschwindigkeit hat. Aus dieser Klasse könnt ihr dann beliebig viele einzelne Autos – also Objekte – erzeugen, zum Beispiel ein rotes Auto oder ein blaues Auto.&lt;br /&gt;
Der grosse Vorteil: Ihr könnt mit Klassen und Objekten übersichtliche und strukturierte Programme schreiben. Anstatt für jedes Auto alles einzeln zu programmieren, legt ihr einmal eine Klasse fest und erstellt daraus so viele Autos (Objekte), wie ihr braucht. Das macht euren Code einfacher, wiederverwendbar und leichter zu pflegen.&lt;br /&gt;
&lt;br /&gt;
== Attribute und Methoden ==&lt;br /&gt;
&lt;br /&gt;
Stellt euch vor, ihr wollt in Python eine Klasse für „Auto“ schreiben. Damit ein Auto im Programm sinnvoll funktioniert, braucht es Eigenschaften und Fähigkeiten – in der objektorientierten Programmierung nennt man diese Eigenschaften „Attribute“ und die Fähigkeiten „Methoden“.&lt;br /&gt;
Ein Attribut ist zum Beispiel die Farbe oder die maximale Geschwindigkeit eines Autos. Ihr könnt also in eurer Klasse festlegen, dass jedes Auto eine Farbe (zum Beispiel „rot“ oder „blau“) und eine Höchstgeschwindigkeit besitzt. In Python sieht das dann so aus:&lt;br /&gt;
Mit dieser Klasse könnt ihr jetzt verschiedene Autos erzeugen:&lt;br /&gt;
Methoden sind Funktionen, die zu einer Klasse gehören. Sie geben an, was ein Objekt tun kann. Zum Beispiel könnt ihr für die Klasse Auto eine Methode erstellen, mit der das Auto hupt:&lt;br /&gt;
def hupen(self):&lt;br /&gt;
    print(&amp;quot;Hup! Hup!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Jetzt könnt ihr jedes Auto im Programm „hupen“ lassen:&lt;br /&gt;
Zusammengefasst: Attribute speichern Informationen über das Objekt, Methoden sorgen dafür, dass das Objekt etwas tun kann. Mit Klassen, Attributen und Methoden könnt ihr in Python übersichtlichen und wiederverwendbaren Code schreiben – und genau das braucht ihr später auch für grössere Projekte.&lt;br /&gt;
&lt;br /&gt;
== Vererbung und Polymorphie (Grundlagen) ==&lt;br /&gt;
&lt;br /&gt;
Vererbung bedeutet, dass eine neue Klasse (die sogenannte „Kindklasse“) die Eigenschaften und Methoden einer bestehenden Klasse (der „Elternklasse“) übernehmen kann. Das spart viel Schreibarbeit und macht deinen Code übersichtlicher. Zum Beispiel: Wenn du eine Klasse „Fahrzeug“ hast, kannst du eine neue Klasse „Auto“ erstellen, die alles von „Fahrzeug“ erbt und zusätzlich eigene Eigenschaften oder Methoden bekommt. So musst du nicht alles doppelt schreiben.&lt;br /&gt;
Polymorphie heisst, dass ein Objekt – zum Beispiel ein „Auto“ oder ein „Motorrad“ – zwar unterschiedlich aussehen kann, aber gleich angesprochen werden kann. Du kannst also verschiedene Objekte mit der gleichen Methode wie zum Beispiel .hupen() verwenden, und jedes Objekt reagiert auf seine eigene Weise. Das macht Programme flexibel und leicht erweiterbar.&lt;br /&gt;
&lt;br /&gt;
== Praxisbeispiel: Mini-Projekt mit OOP ==&lt;br /&gt;
&lt;br /&gt;
Aufgabenstellung: OOP-Miniprojekt „Fahrzeugverwaltung“&lt;br /&gt;
&lt;br /&gt;
Stellt euch vor, ihr arbeitet bei einem kleinen Autoverleih. Eure Aufgabe ist es, ein einfaches Verwaltungssystem für verschiedene Fahrzeuge zu programmieren. Ihr sollt eine Übersichts-Liste aller Fahrzeuge führen können, neue Fahrzeuge hinzufügen und bestimmte Aktionen mit ihnen durchführen. Nutzt dafür die Prinzipien der objektorientierten Programmierung (OOP): Klassen, Attribute, Methoden, Vererbung und Polymorphie.&lt;br /&gt;
&lt;br /&gt;
* Erstellt eine Elternklasse Fahrzeug mit Attributen wie marke, modell und baujahr sowie einer Methode beschreibung_ausgeben().&lt;br /&gt;
* Leitet davon zwei Kindklassen ab: Auto (mit zusätzlichem Attribut anzahl_tueren) und Motorrad (mit zusätzlichem Attribut hat_beiwagen).&lt;br /&gt;
* Implementiert für beide Kindklassen eigene hupen()-Methoden, die je nach Fahrzeugtyp unterschiedlich klingen.&lt;br /&gt;
* Erstellt eine Liste mit mehreren Fahrzeugen und lasst alle Fahrzeuge ihre Beschreibung ausgeben und hupen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der hauptsächliche Vorteil von Objektorientierung bei der Entwicklung von Programmen?&lt;br /&gt;
(!Komplexität wird erhöht)&lt;br /&gt;
(Wiederverwendbarkeit des Codes)&lt;br /&gt;
(!Programme laufen schneller)&lt;br /&gt;
(!Es gibt keine Vorteile)&lt;br /&gt;
&lt;br /&gt;
Was ist der Unterschied zwischen einer Klasse und einem Objekt?&lt;br /&gt;
(!Eine Klasse ist eine Instanz, ein Objekt ist eine Vorlage)&lt;br /&gt;
(Eine Klasse ist eine Vorlage, ein Objekt ist eine Instanz)&lt;br /&gt;
(!Es gibt keinen Unterschied)&lt;br /&gt;
(!Ein Objekt kann Methoden definieren, eine Klasse nicht)&lt;br /&gt;
&lt;br /&gt;
Welche der folgenden Aussagen trifft auf Vererbung zu?&lt;br /&gt;
(!Nur Methoden, aber keine Attribute können vererbt werden)&lt;br /&gt;
(Ein Kind-Objekt hat Zugriff auf die Attribute und Methoden der Elternklasse)&lt;br /&gt;
(!Vererbung ist nur in Java möglich)&lt;br /&gt;
(!Vererbung bedeutet, dass ein Objekt mehrere Klassen gleichzeitig sein kann)&lt;br /&gt;
&lt;br /&gt;
Was ist ein typischer Ansatz zur praxisorientierten Vermittlung von Programmierkenntnissen?&lt;br /&gt;
(!Nur Theorie vermitteln)&lt;br /&gt;
(Viele praktische Übungen und kleine Projekte)&lt;br /&gt;
(!Abschlussprüfung ohne Vorbereitung)&lt;br /&gt;
(!Nur Frontalunterricht)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149956</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung in objektorientierte Programmierung (OOP)</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149956"/>
		<updated>2026-02-24T14:50:18Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 7. Einführung in objektorientierte Programmierung (OOP) =&lt;br /&gt;
&lt;br /&gt;
== Klassen und Objekte ==&lt;br /&gt;
&lt;br /&gt;
Klassen und Objekte sind ein zentraler Bestandteil der objektorientierten Programmierung, die ihr zum Beispiel mit Python kennenlernen werdet. In Python kann man mit Klassen Vorlagen für sogenannte &amp;quot;Objekte&amp;quot; erstellen – das sind Dinge oder Begriffe aus der echten Welt, die in einem Programm abgebildet werden. Eine Klasse ist wie eine Bauanleitung: Sie beschreibt, welche Eigenschaften (Attribute) und Fähigkeiten (Methoden) ein Objekt haben soll.&lt;br /&gt;
Wenn ihr zum Beispiel eine Klasse &amp;quot;Auto&amp;quot; erstellt, könnt ihr darin festlegen, dass jedes Auto eine bestimmte Farbe und eine maximale Geschwindigkeit hat. Aus dieser Klasse könnt ihr dann beliebig viele einzelne Autos – also Objekte – erzeugen, zum Beispiel ein rotes Auto oder ein blaues Auto.&lt;br /&gt;
Der grosse Vorteil: Ihr könnt mit Klassen und Objekten übersichtliche und strukturierte Programme schreiben. Anstatt für jedes Auto alles einzeln zu programmieren, legt ihr einmal eine Klasse fest und erstellt daraus so viele Autos (Objekte), wie ihr braucht. Das macht euren Code einfacher, wiederverwendbar und leichter zu pflegen.&lt;br /&gt;
&lt;br /&gt;
== Attribute und Methoden ==&lt;br /&gt;
&lt;br /&gt;
Stellt euch vor, ihr wollt in Python eine Klasse für „Auto“ schreiben. Damit ein Auto im Programm sinnvoll funktioniert, braucht es Eigenschaften und Fähigkeiten – in der objektorientierten Programmierung nennt man diese Eigenschaften „Attribute“ und die Fähigkeiten „Methoden“.&lt;br /&gt;
Ein Attribut ist zum Beispiel die Farbe oder die maximale Geschwindigkeit eines Autos. Ihr könnt also in eurer Klasse festlegen, dass jedes Auto eine Farbe (zum Beispiel „rot“ oder „blau“) und eine Höchstgeschwindigkeit besitzt. In Python sieht das dann so aus:&lt;br /&gt;
Mit dieser Klasse könnt ihr jetzt verschiedene Autos erzeugen:&lt;br /&gt;
Methoden sind Funktionen, die zu einer Klasse gehören. Sie geben an, was ein Objekt tun kann. Zum Beispiel könnt ihr für die Klasse Auto eine Methode erstellen, mit der das Auto hupt:&lt;br /&gt;
def hupen(self):&lt;br /&gt;
    print(&amp;quot;Hup! Hup!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Jetzt könnt ihr jedes Auto im Programm „hupen“ lassen:&lt;br /&gt;
Zusammengefasst: Attribute speichern Informationen über das Objekt, Methoden sorgen dafür, dass das Objekt etwas tun kann. Mit Klassen, Attributen und Methoden könnt ihr in Python übersichtlichen und wiederverwendbaren Code schreiben – und genau das braucht ihr später auch für grössere Projekte.&lt;br /&gt;
&lt;br /&gt;
== Vererbung und Polymorphie (Grundlagen) ==&lt;br /&gt;
&lt;br /&gt;
Vererbung bedeutet, dass eine neue Klasse (die sogenannte „Kindklasse“) die Eigenschaften und Methoden einer bestehenden Klasse (der „Elternklasse“) übernehmen kann. Das spart viel Schreibarbeit und macht deinen Code übersichtlicher. Zum Beispiel: Wenn du eine Klasse „Fahrzeug“ hast, kannst du eine neue Klasse „Auto“ erstellen, die alles von „Fahrzeug“ erbt und zusätzlich eigene Eigenschaften oder Methoden bekommt. So musst du nicht alles doppelt schreiben.&lt;br /&gt;
Polymorphie heisst, dass ein Objekt – zum Beispiel ein „Auto“ oder ein „Motorrad“ – zwar unterschiedlich aussehen kann, aber gleich angesprochen werden kann. Du kannst also verschiedene Objekte mit der gleichen Methode wie zum Beispiel .hupen() verwenden, und jedes Objekt reagiert auf seine eigene Weise. Das macht Programme flexibel und leicht erweiterbar.&lt;br /&gt;
&lt;br /&gt;
== Praxisbeispiel: Mini-Projekt mit OOP ==&lt;br /&gt;
&lt;br /&gt;
Aufgabenstellung: OOP-Miniprojekt „Fahrzeugverwaltung“&lt;br /&gt;
&lt;br /&gt;
Stellt euch vor, ihr arbeitet bei einem kleinen Autoverleih. Eure Aufgabe ist es, ein einfaches Verwaltungssystem für verschiedene Fahrzeuge zu programmieren. Ihr sollt eine Übersichts-Liste aller Fahrzeuge führen können, neue Fahrzeuge hinzufügen und bestimmte Aktionen mit ihnen durchführen. Nutzt dafür die Prinzipien der objektorientierten Programmierung (OOP): Klassen, Attribute, Methoden, Vererbung und Polymorphie.&lt;br /&gt;
&lt;br /&gt;
* Erstellt eine Elternklasse Fahrzeug mit Attributen wie marke, modell und baujahr sowie einer Methode beschreibung_ausgeben().&lt;br /&gt;
* Leitet davon zwei Kindklassen ab: Auto (mit zusätzlichem Attribut anzahl_tueren) und Motorrad (mit zusätzlichem Attribut hat_beiwagen).&lt;br /&gt;
* Implementiert für beide Kindklassen eigene hupen()-Methoden, die je nach Fahrzeugtyp unterschiedlich klingen.&lt;br /&gt;
* Erstellt eine Liste mit mehreren Fahrzeugen und lasst alle Fahrzeuge ihre Beschreibung ausgeben und hupen.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149955</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung in objektorientierte Programmierung (OOP)</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung_in_objektorientierte_Programmierung_(OOP)&amp;diff=149955"/>
		<updated>2026-02-24T14:48:42Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: neues Kapitel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 7. Einführung in objektorientierte Programmierung (OOP) =&lt;br /&gt;
&lt;br /&gt;
== Klassen und Objekte ==&lt;br /&gt;
&lt;br /&gt;
Klassen und Objekte sind ein zentraler Bestandteil der objektorientierten Programmierung, die ihr zum Beispiel mit Python kennenlernen werdet. In Python kann man mit Klassen Vorlagen für sogenannte &amp;quot;Objekte&amp;quot; erstellen – das sind Dinge oder Begriffe aus der echten Welt, die in einem Programm abgebildet werden. Eine Klasse ist wie eine Bauanleitung: Sie beschreibt, welche Eigenschaften (Attribute) und Fähigkeiten (Methoden) ein Objekt haben soll.&lt;br /&gt;
Wenn ihr zum Beispiel eine Klasse &amp;quot;Auto&amp;quot; erstellt, könnt ihr darin festlegen, dass jedes Auto eine bestimmte Farbe und eine maximale Geschwindigkeit hat. Aus dieser Klasse könnt ihr dann beliebig viele einzelne Autos – also Objekte – erzeugen, zum Beispiel ein rotes Auto oder ein blaues Auto.&lt;br /&gt;
Der grosse Vorteil: Ihr könnt mit Klassen und Objekten übersichtliche und strukturierte Programme schreiben. Anstatt für jedes Auto alles einzeln zu programmieren, legt ihr einmal eine Klasse fest und erstellt daraus so viele Autos (Objekte), wie ihr braucht. Das macht euren Code einfacher, wiederverwendbar und leichter zu pflegen.&lt;br /&gt;
&lt;br /&gt;
== Attribute und Methoden ==&lt;br /&gt;
&lt;br /&gt;
Stellt euch vor, ihr wollt in Python eine Klasse für „Auto“ schreiben. Damit ein Auto im Programm sinnvoll funktioniert, braucht es Eigenschaften und Fähigkeiten – in der objektorientierten Programmierung nennt man diese Eigenschaften „Attribute“ und die Fähigkeiten „Methoden“.&lt;br /&gt;
Ein Attribut ist zum Beispiel die Farbe oder die maximale Geschwindigkeit eines Autos. Ihr könnt also in eurer Klasse festlegen, dass jedes Auto eine Farbe (zum Beispiel „rot“ oder „blau“) und eine Höchstgeschwindigkeit besitzt. In Python sieht das dann so aus:&lt;br /&gt;
Mit dieser Klasse könnt ihr jetzt verschiedene Autos erzeugen:&lt;br /&gt;
Methoden sind Funktionen, die zu einer Klasse gehören. Sie geben an, was ein Objekt tun kann. Zum Beispiel könnt ihr für die Klasse Auto eine Methode erstellen, mit der das Auto hupt:&lt;br /&gt;
def hupen(self):&lt;br /&gt;
    print(&amp;quot;Hup! Hup!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Jetzt könnt ihr jedes Auto im Programm „hupen“ lassen:&lt;br /&gt;
Zusammengefasst: Attribute speichern Informationen über das Objekt, Methoden sorgen dafür, dass das Objekt etwas tun kann. Mit Klassen, Attributen und Methoden könnt ihr in Python übersichtlichen und wiederverwendbaren Code schreiben – und genau das braucht ihr später auch für grössere Projekte.&lt;br /&gt;
&lt;br /&gt;
== Vererbung und Polymorphie (Grundlagen) ==&lt;br /&gt;
&lt;br /&gt;
Vererbung bedeutet, dass eine neue Klasse (die sogenannte „Kindklasse“) die Eigenschaften und Methoden einer bestehenden Klasse (der „Elternklasse“) übernehmen kann. Das spart viel Schreibarbeit und macht deinen Code übersichtlicher. Zum Beispiel: Wenn du eine Klasse „Fahrzeug“ hast, kannst du eine neue Klasse „Auto“ erstellen, die alles von „Fahrzeug“ erbt und zusätzlich eigene Eigenschaften oder Methoden bekommt. So musst du nicht alles doppelt schreiben.&lt;br /&gt;
Polymorphie heisst, dass ein Objekt – zum Beispiel ein „Auto“ oder ein „Motorrad“ – zwar unterschiedlich aussehen kann, aber gleich angesprochen werden kann. Du kannst also verschiedene Objekte mit der gleichen Methode wie zum Beispiel .hupen() verwenden, und jedes Objekt reagiert auf seine eigene Weise. Das macht Programme flexibel und leicht erweiterbar.&lt;br /&gt;
&lt;br /&gt;
== Praxisbeispiel: Mini-Projekt mit OOP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufgabenstellung: OOP-Miniprojekt „Fahrzeugverwaltung“&#039;&#039;&#039;&lt;br /&gt;
Stellt euch vor, ihr arbeitet bei einem kleinen Autoverleih. Eure Aufgabe ist es, ein einfaches Verwaltungssystem für verschiedene Fahrzeuge zu programmieren. Ihr sollt eine Übersichts-Liste aller Fahrzeuge führen können, neue Fahrzeuge hinzufügen und bestimmte Aktionen mit ihnen durchführen. Nutzt dafür die Prinzipien der objektorientierten Programmierung (OOP): Klassen, Attribute, Methoden, Vererbung und Polymorphie.&lt;br /&gt;
Erstellt eine Elternklasse Fahrzeug mit Attributen wie marke, modell und baujahr sowie einer Methode beschreibung_ausgeben().&lt;br /&gt;
Leitet davon zwei Kindklassen ab: Auto (mit zusätzlichem Attribut anzahl_tueren) und Motorrad (mit zusätzlichem Attribut hat_beiwagen).&lt;br /&gt;
Implementiert für beide Kindklassen eigene hupen()-Methoden, die je nach Fahrzeugtyp unterschiedlich klingen.&lt;br /&gt;
Erstellt eine Liste mit mehreren Fahrzeugen und lasst alle Fahrzeuge ihre Beschreibung ausgeben und hupen.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149954</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149954"/>
		<updated>2026-02-24T14:44:00Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: neues Kapitel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung in objektorientierte Programmierung (OOP)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149953</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149953"/>
		<updated>2026-02-24T14:41:55Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 6. Softwareentwicklungsprozesse und -modelle =&lt;br /&gt;
&lt;br /&gt;
== Wasserfallmodell vs. agile Methoden ==&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklungsprozesse und -modelle beschreiben, wie ein Softwareprojekt von der Idee bis zur fertigen Anwendung abläuft. Sie helfen Teams, die Arbeit zu strukturieren, Aufgaben zu verteilen, Zeit zu planen und am Ende ein funktionierendes Produkt zu liefern. Grundsätzlich gibt es verschiedene Ansätze, wie so ein Ablauf organisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein klassisches Modell ist das sogenannte Wasserfallmodell. Hier werden die einzelnen Phasen – wie zum Beispiel Planung, Entwicklung, Testen und Auslieferung – nacheinander durchgeführt. Das bedeutet, erst wenn eine Phase abgeschlossen ist, geht es mit der nächsten weiter. Dieses Modell ist übersichtlich, aber wenig flexibel, wenn sich zum Beispiel zwischendurch Anforderungen ändern.&lt;br /&gt;
&lt;br /&gt;
In modernen Softwareprojekten werden deshalb oft agile Methoden verwendet, zum Beispiel Scrum. Bei agilen Methoden arbeitet das Team in kurzen Abschnitten, sogenannten Sprints, und überprüft regelmäßig die bisherigen Ergebnisse. Neue Wünsche oder Änderungen können schneller eingeplant werden, und die Zusammenarbeit im Team steht im Mittelpunkt. So können Softwareprodukte Schritt für Schritt entwickelt und laufend verbessert werden.&lt;br /&gt;
&lt;br /&gt;
Welches Modell am besten passt, hängt von der Art des Projekts und den Anforderungen ab. In jedem Fall helfen klar strukturierte Prozesse dabei, Aufgaben sinnvoll zu verteilen, Fehler zu vermeiden und das Ziel besser zu erreichen.&lt;br /&gt;
&lt;br /&gt;
== Anforderungen und Lasten-/Pflichtenheft ==&lt;br /&gt;
&lt;br /&gt;
Bevor mit der eigentlichen Entwicklung einer Software begonnen wird, müssen genau festgelegt werden, was die Software eigentlich können soll und welche Wünsche oder Erwartungen die Auftraggeber*innen haben. Dabei hilft die Unterscheidung zwischen zwei wichtigen Dokumenten: dem Lastenheft und dem Pflichtenheft.&lt;br /&gt;
&lt;br /&gt;
Im Lastenheft beschreiben die Auftraggeber&#039;&#039;innen, was sie von der Software erwarten, also welche Aufgaben und Probleme die Software lösen soll. Hier stehen die Wünsche und Anforderungen aus Sicht der Nutzer&#039;&#039;innen im Mittelpunkt, zum Beispiel: „Die App soll Kundendaten speichern können“ oder „Die Software muss auch auf Smartphones funktionieren“.&lt;br /&gt;
&lt;br /&gt;
Das Pflichtenheft wird meist von den Entwickler*innen erstellt. Hier wird genau erklärt, wie die Anforderungen aus dem Lastenheft technisch umgesetzt werden können. Es geht also darum, konkrete Lösungen zu finden und zu beschreiben, wie die Software gebaut wird, welche Programmiersprache genutzt wird oder wie die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Durch diese klare Aufteilung wissen alle Beteiligten genau, worauf es ankommt. So können Missverständnisse vermieden werden und das Projekt läuft reibungsloser ab.&lt;br /&gt;
&lt;br /&gt;
== Planung und Umsetzung kleiner Projekte im Team ==&lt;br /&gt;
&lt;br /&gt;
Wenn ihr als Team ein kleines Softwareprojekt plant, ist es wichtig, von Anfang an gemeinsam zu überlegen, was genau erreicht werden soll. Zuerst setzt ihr euch zusammen und besprecht die Anforderungen: Was muss die Software können? Welche Funktionen sind wirklich notwendig, und was wäre vielleicht ein Extra?&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, die wichtigsten Aufgaben in einzelne Arbeitsschritte zu unterteilen. So könnt ihr die Aufgaben gerecht im Team verteilen und jede Person weiss, wofür sie zuständig ist.&lt;br /&gt;
&lt;br /&gt;
Während der Umsetzung tauscht ihr euch regelmässig aus – zum Beispiel bei wöchentlichen Treffen oder kurzen Abstimmungen. Ihr besprecht, welche Aufgaben schon erledigt sind, wo es vielleicht Schwierigkeiten gibt und wie ihr als Gruppe weiter vorgeht. Durch diese enge Zusammenarbeit lassen sich Probleme oft schnell lösen, und am Ende entsteht eine Software, die allen Anforderungen entspricht.&lt;br /&gt;
&lt;br /&gt;
Zum Abschluss stellt ihr euer Projekt vor, präsentiert die wichtigsten Funktionen und gebt vielleicht sogar einen Ausblick, wie man die Software weiterentwickeln könnte. So lernt ihr nicht nur das Programmieren, sondern auch Teamarbeit, Planung und Präsentation – Fähigkeiten, die in der Arbeitswelt sehr gefragt sind.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt das Lastenheft im Softwareentwicklungsprozess?&lt;br /&gt;
(!Wie die Anforderungen technisch umgesetzt werden)&lt;br /&gt;
(Welche Wünsche und Anforderungen die Auftraggeber*innen an die Software haben)&lt;br /&gt;
(!Welche Programmiersprache verwendet wird)&lt;br /&gt;
(!Die geplante Teamgröße)&lt;br /&gt;
&lt;br /&gt;
Wer erstellt in der Regel das Pflichtenheft?&lt;br /&gt;
(!Die Auftraggeber*innen)&lt;br /&gt;
(!Die Nutzer*innen)&lt;br /&gt;
(Die Entwickler*innen)&lt;br /&gt;
(!Die Produktmanager*innen)&lt;br /&gt;
&lt;br /&gt;
Warum ist es sinnvoll, die Aufgaben bei einem kleinen Softwareprojekt in einzelne Arbeitsschritte zu unterteilen?&lt;br /&gt;
(!Weil es den Code kürzer macht)&lt;br /&gt;
(Damit jede Person im Team weiss, wofür sie zuständig ist)&lt;br /&gt;
(!Weil es schneller ist)&lt;br /&gt;
(!Damit die Software teurer wird)&lt;br /&gt;
&lt;br /&gt;
Was sind in der objektorientierten Programmierung Attribute?&lt;br /&gt;
(!Die Fähigkeiten eines Objekts)&lt;br /&gt;
(Die Eigenschaften eines Objekts)&lt;br /&gt;
(!Die Programmiersprache)&lt;br /&gt;
(!Die Teamrollen)&lt;br /&gt;
&lt;br /&gt;
Welcher Vorteil ergibt sich, wenn man Klassen und Objekte in einem Programm verwendet?&lt;br /&gt;
(!Der Code wird unübersichtlicher)&lt;br /&gt;
(Es können viele Objekte auf Basis einer Vorlage erstellt werden)&lt;br /&gt;
(!Die Software wird langsamer)&lt;br /&gt;
(!Es gibt keine Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149952</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149952"/>
		<updated>2026-02-24T14:40:46Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Quiz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 6. Softwareentwicklungsprozesse und -modelle =&lt;br /&gt;
&lt;br /&gt;
== Wasserfallmodell vs. agile Methoden ==&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklungsprozesse und -modelle beschreiben, wie ein Softwareprojekt von der Idee bis zur fertigen Anwendung abläuft. Sie helfen Teams, die Arbeit zu strukturieren, Aufgaben zu verteilen, Zeit zu planen und am Ende ein funktionierendes Produkt zu liefern. Grundsätzlich gibt es verschiedene Ansätze, wie so ein Ablauf organisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein klassisches Modell ist das sogenannte Wasserfallmodell. Hier werden die einzelnen Phasen – wie zum Beispiel Planung, Entwicklung, Testen und Auslieferung – nacheinander durchgeführt. Das bedeutet, erst wenn eine Phase abgeschlossen ist, geht es mit der nächsten weiter. Dieses Modell ist übersichtlich, aber wenig flexibel, wenn sich zum Beispiel zwischendurch Anforderungen ändern.&lt;br /&gt;
&lt;br /&gt;
In modernen Softwareprojekten werden deshalb oft agile Methoden verwendet, zum Beispiel Scrum. Bei agilen Methoden arbeitet das Team in kurzen Abschnitten, sogenannten Sprints, und überprüft regelmäßig die bisherigen Ergebnisse. Neue Wünsche oder Änderungen können schneller eingeplant werden, und die Zusammenarbeit im Team steht im Mittelpunkt. So können Softwareprodukte Schritt für Schritt entwickelt und laufend verbessert werden.&lt;br /&gt;
&lt;br /&gt;
Welches Modell am besten passt, hängt von der Art des Projekts und den Anforderungen ab. In jedem Fall helfen klar strukturierte Prozesse dabei, Aufgaben sinnvoll zu verteilen, Fehler zu vermeiden und das Ziel besser zu erreichen.&lt;br /&gt;
&lt;br /&gt;
== Anforderungen und Lasten-/Pflichtenheft ==&lt;br /&gt;
&lt;br /&gt;
Bevor mit der eigentlichen Entwicklung einer Software begonnen wird, müssen genau festgelegt werden, was die Software eigentlich können soll und welche Wünsche oder Erwartungen die Auftraggeber*innen haben. Dabei hilft die Unterscheidung zwischen zwei wichtigen Dokumenten: dem Lastenheft und dem Pflichtenheft.&lt;br /&gt;
&lt;br /&gt;
Im Lastenheft beschreiben die Auftraggeber&#039;&#039;innen, was sie von der Software erwarten, also welche Aufgaben und Probleme die Software lösen soll. Hier stehen die Wünsche und Anforderungen aus Sicht der Nutzer&#039;&#039;innen im Mittelpunkt, zum Beispiel: „Die App soll Kundendaten speichern können“ oder „Die Software muss auch auf Smartphones funktionieren“.&lt;br /&gt;
&lt;br /&gt;
Das Pflichtenheft wird meist von den Entwickler*innen erstellt. Hier wird genau erklärt, wie die Anforderungen aus dem Lastenheft technisch umgesetzt werden können. Es geht also darum, konkrete Lösungen zu finden und zu beschreiben, wie die Software gebaut wird, welche Programmiersprache genutzt wird oder wie die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Durch diese klare Aufteilung wissen alle Beteiligten genau, worauf es ankommt. So können Missverständnisse vermieden werden und das Projekt läuft reibungsloser ab.&lt;br /&gt;
&lt;br /&gt;
== Planung und Umsetzung kleiner Projekte im Team ==&lt;br /&gt;
&lt;br /&gt;
Wenn ihr als Team ein kleines Softwareprojekt plant, ist es wichtig, von Anfang an gemeinsam zu überlegen, was genau erreicht werden soll. Zuerst setzt ihr euch zusammen und besprecht die Anforderungen: Was muss die Software können? Welche Funktionen sind wirklich notwendig, und was wäre vielleicht ein Extra?&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, die wichtigsten Aufgaben in einzelne Arbeitsschritte zu unterteilen. So könnt ihr die Aufgaben gerecht im Team verteilen und jede Person weiss, wofür sie zuständig ist.&lt;br /&gt;
&lt;br /&gt;
Während der Umsetzung tauscht ihr euch regelmässig aus – zum Beispiel bei wöchentlichen Treffen oder kurzen Abstimmungen. Ihr besprecht, welche Aufgaben schon erledigt sind, wo es vielleicht Schwierigkeiten gibt und wie ihr als Gruppe weiter vorgeht. Durch diese enge Zusammenarbeit lassen sich Probleme oft schnell lösen, und am Ende entsteht eine Software, die allen Anforderungen entspricht.&lt;br /&gt;
&lt;br /&gt;
Zum Abschluss stellt ihr euer Projekt vor, präsentiert die wichtigsten Funktionen und gebt vielleicht sogar einen Ausblick, wie man die Software weiterentwickeln könnte. So lernt ihr nicht nur das Programmieren, sondern auch Teamarbeit, Planung und Präsentation – Fähigkeiten, die in der Arbeitswelt sehr gefragt sind.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt das Lastenheft im Softwareentwicklungsprozess?&lt;br /&gt;
(!Wie die Anforderungen technisch umgesetzt werden)&lt;br /&gt;
(Welche Wünsche und Anforderungen die Auftraggeber*innen an die Software haben)&lt;br /&gt;
(!Welche Programmiersprache verwendet wird)&lt;br /&gt;
(!Die geplante Teamgröße)&lt;br /&gt;
&lt;br /&gt;
Wer erstellt in der Regel das Pflichtenheft?&lt;br /&gt;
(!Die Auftraggeber*innen)&lt;br /&gt;
(!Die Nutzer*innen)&lt;br /&gt;
(Die Entwickler*innen)&lt;br /&gt;
(!Die Produktmanager*innen)&lt;br /&gt;
&lt;br /&gt;
Warum ist es sinnvoll, die Aufgaben bei einem kleinen Softwareprojekt in einzelne Arbeitsschritte zu unterteilen?&lt;br /&gt;
(!Weil es den Code kürzer macht)&lt;br /&gt;
(Damit jede Person im Team weiss, wofür sie zuständig ist)&lt;br /&gt;
(!Weil es schneller ist)&lt;br /&gt;
(!Damit die Software teurer wird)&lt;br /&gt;
&lt;br /&gt;
Was sind in der objektorientierten Programmierung (OOP) Attribute?&lt;br /&gt;
(!Die Fähigkeiten eines Objekts)&lt;br /&gt;
(Die Eigenschaften eines Objekts)&lt;br /&gt;
(!Die Programmiersprache)&lt;br /&gt;
(!Die Teamrollen)&lt;br /&gt;
&lt;br /&gt;
Welcher Vorteil ergibt sich, wenn man Klassen und Objekte in einem Programm verwendet?&lt;br /&gt;
(!Der Code wird unübersichtlicher)&lt;br /&gt;
(Es können viele Objekte auf Basis einer Vorlage erstellt werden)&lt;br /&gt;
(!Die Software wird langsamer)&lt;br /&gt;
(!Es gibt keine Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149951</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149951"/>
		<updated>2026-02-24T14:34:50Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 6. Softwareentwicklungsprozesse und -modelle =&lt;br /&gt;
&lt;br /&gt;
== Wasserfallmodell vs. agile Methoden ==&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklungsprozesse und -modelle beschreiben, wie ein Softwareprojekt von der Idee bis zur fertigen Anwendung abläuft. Sie helfen Teams, die Arbeit zu strukturieren, Aufgaben zu verteilen, Zeit zu planen und am Ende ein funktionierendes Produkt zu liefern. Grundsätzlich gibt es verschiedene Ansätze, wie so ein Ablauf organisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein klassisches Modell ist das sogenannte Wasserfallmodell. Hier werden die einzelnen Phasen – wie zum Beispiel Planung, Entwicklung, Testen und Auslieferung – nacheinander durchgeführt. Das bedeutet, erst wenn eine Phase abgeschlossen ist, geht es mit der nächsten weiter. Dieses Modell ist übersichtlich, aber wenig flexibel, wenn sich zum Beispiel zwischendurch Anforderungen ändern.&lt;br /&gt;
&lt;br /&gt;
In modernen Softwareprojekten werden deshalb oft agile Methoden verwendet, zum Beispiel Scrum. Bei agilen Methoden arbeitet das Team in kurzen Abschnitten, sogenannten Sprints, und überprüft regelmäßig die bisherigen Ergebnisse. Neue Wünsche oder Änderungen können schneller eingeplant werden, und die Zusammenarbeit im Team steht im Mittelpunkt. So können Softwareprodukte Schritt für Schritt entwickelt und laufend verbessert werden.&lt;br /&gt;
&lt;br /&gt;
Welches Modell am besten passt, hängt von der Art des Projekts und den Anforderungen ab. In jedem Fall helfen klar strukturierte Prozesse dabei, Aufgaben sinnvoll zu verteilen, Fehler zu vermeiden und das Ziel besser zu erreichen.&lt;br /&gt;
&lt;br /&gt;
== Anforderungen und Lasten-/Pflichtenheft ==&lt;br /&gt;
&lt;br /&gt;
Bevor mit der eigentlichen Entwicklung einer Software begonnen wird, müssen genau festgelegt werden, was die Software eigentlich können soll und welche Wünsche oder Erwartungen die Auftraggeber*innen haben. Dabei hilft die Unterscheidung zwischen zwei wichtigen Dokumenten: dem Lastenheft und dem Pflichtenheft.&lt;br /&gt;
&lt;br /&gt;
Im Lastenheft beschreiben die Auftraggeber&#039;&#039;innen, was sie von der Software erwarten, also welche Aufgaben und Probleme die Software lösen soll. Hier stehen die Wünsche und Anforderungen aus Sicht der Nutzer&#039;&#039;innen im Mittelpunkt, zum Beispiel: „Die App soll Kundendaten speichern können“ oder „Die Software muss auch auf Smartphones funktionieren“.&lt;br /&gt;
&lt;br /&gt;
Das Pflichtenheft wird meist von den Entwickler*innen erstellt. Hier wird genau erklärt, wie die Anforderungen aus dem Lastenheft technisch umgesetzt werden können. Es geht also darum, konkrete Lösungen zu finden und zu beschreiben, wie die Software gebaut wird, welche Programmiersprache genutzt wird oder wie die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Durch diese klare Aufteilung wissen alle Beteiligten genau, worauf es ankommt. So können Missverständnisse vermieden werden und das Projekt läuft reibungsloser ab.&lt;br /&gt;
&lt;br /&gt;
== Planung und Umsetzung kleiner Projekte im Team ==&lt;br /&gt;
&lt;br /&gt;
Wenn ihr als Team ein kleines Softwareprojekt plant, ist es wichtig, von Anfang an gemeinsam zu überlegen, was genau erreicht werden soll. Zuerst setzt ihr euch zusammen und besprecht die Anforderungen: Was muss die Software können? Welche Funktionen sind wirklich notwendig, und was wäre vielleicht ein Extra?&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, die wichtigsten Aufgaben in einzelne Arbeitsschritte zu unterteilen. So könnt ihr die Aufgaben gerecht im Team verteilen und jede Person weiss, wofür sie zuständig ist.&lt;br /&gt;
&lt;br /&gt;
Während der Umsetzung tauscht ihr euch regelmässig aus – zum Beispiel bei wöchentlichen Treffen oder kurzen Abstimmungen. Ihr besprecht, welche Aufgaben schon erledigt sind, wo es vielleicht Schwierigkeiten gibt und wie ihr als Gruppe weiter vorgeht. Durch diese enge Zusammenarbeit lassen sich Probleme oft schnell lösen, und am Ende entsteht eine Software, die allen Anforderungen entspricht.&lt;br /&gt;
&lt;br /&gt;
Zum Abschluss stellt ihr euer Projekt vor, präsentiert die wichtigsten Funktionen und gebt vielleicht sogar einen Ausblick, wie man die Software weiterentwickeln könnte. So lernt ihr nicht nur das Programmieren, sondern auch Teamarbeit, Planung und Präsentation – Fähigkeiten, die in der Arbeitswelt sehr gefragt sind.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149950</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse_und_-modelle&amp;diff=149950"/>
		<updated>2026-02-24T14:33:48Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: neues Kapitel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;= 6. Softwareentwicklungsprozesse und -modelle =&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Wasserfallmodell vs. agile Methoden ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklungsprozesse und -modelle beschreiben, wie ein Softwareprojekt von der Idee bis zur fertigen Anwendung abläuft. Sie helfen Teams, die Arbeit zu strukturieren, Aufgaben zu verteilen, Zeit zu planen und am Ende ein funktionierendes Produkt zu liefern. Grundsätzlich gibt es verschiedene Ansätze, wie so ein Ablauf organisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein klassisches Modell ist das sogenannte Wasserfallmodell. Hier werden die einzelnen Phasen – wie zum Beispiel Planung, Entwicklung, Testen und Auslieferung – nacheinander durchgeführt. Das bedeutet, erst wenn eine Phase abgeschlossen ist, geht es mit der nächsten weiter. Dieses Modell ist übersichtlich, aber wenig flexibel, wenn sich zum Beispiel zwischendurch Anforderungen ändern.&lt;br /&gt;
&lt;br /&gt;
In modernen Softwareprojekten werden deshalb oft agile Methoden verwendet, zum Beispiel Scrum. Bei agilen Methoden arbeitet das Team in kurzen Abschnitten, sogenannten Sprints, und überprüft regelmäßig die bisherigen Ergebnisse. Neue Wünsche oder Änderungen können schneller eingeplant werden, und die Zusammenarbeit im Team steht im Mittelpunkt. So können Softwareprodukte Schritt für Schritt entwickelt und laufend verbessert werden.&lt;br /&gt;
&lt;br /&gt;
Welches Modell am besten passt, hängt von der Art des Projekts und den Anforderungen ab. In jedem Fall helfen klar strukturierte Prozesse dabei, Aufgaben sinnvoll zu verteilen, Fehler zu vermeiden und das Ziel besser zu erreichen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Anforderungen und Lasten-/Pflichtenheft ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor mit der eigentlichen Entwicklung einer Software begonnen wird, müssen genau festgelegt werden, was die Software eigentlich können soll und welche Wünsche oder Erwartungen die Auftraggeber*innen haben. Dabei hilft die Unterscheidung zwischen zwei wichtigen Dokumenten: dem Lastenheft und dem Pflichtenheft.&lt;br /&gt;
&lt;br /&gt;
Im Lastenheft beschreiben die Auftraggeber&#039;&#039;innen, was sie von der Software erwarten, also welche Aufgaben und Probleme die Software lösen soll. Hier stehen die Wünsche und Anforderungen aus Sicht der Nutzer&#039;&#039;innen im Mittelpunkt, zum Beispiel: „Die App soll Kundendaten speichern können“ oder „Die Software muss auch auf Smartphones funktionieren“.&lt;br /&gt;
&lt;br /&gt;
Das Pflichtenheft wird meist von den Entwickler*innen erstellt. Hier wird genau erklärt, wie die Anforderungen aus dem Lastenheft technisch umgesetzt werden können. Es geht also darum, konkrete Lösungen zu finden und zu beschreiben, wie die Software gebaut wird, welche Programmiersprache genutzt wird oder wie die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Durch diese klare Aufteilung wissen alle Beteiligten genau, worauf es ankommt. So können Missverständnisse vermieden werden und das Projekt läuft reibungsloser ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Planung und Umsetzung kleiner Projekte im Team ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ihr als Team ein kleines Softwareprojekt plant, ist es wichtig, von Anfang an gemeinsam zu überlegen, was genau erreicht werden soll. Zuerst setzt ihr euch zusammen und besprecht die Anforderungen: Was muss die Software können? Welche Funktionen sind wirklich notwendig, und was wäre vielleicht ein Extra?&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, die wichtigsten Aufgaben in einzelne Arbeitsschritte zu unterteilen. So könnt ihr die Aufgaben gerecht im Team verteilen und jede Person weiss, wofür sie zuständig ist.&lt;br /&gt;
&lt;br /&gt;
Während der Umsetzung tauscht ihr euch regelmässig aus – zum Beispiel bei wöchentlichen Treffen oder kurzen Abstimmungen. Ihr besprecht, welche Aufgaben schon erledigt sind, wo es vielleicht Schwierigkeiten gibt und wie ihr als Gruppe weiter vorgeht. Durch diese enge Zusammenarbeit lassen sich Probleme oft schnell lösen, und am Ende entsteht eine Software, die allen Anforderungen entspricht.&lt;br /&gt;
&lt;br /&gt;
Zum Abschluss stellt ihr euer Projekt vor, präsentiert die wichtigsten Funktionen und gebt vielleicht sogar einen Ausblick, wie man die Software weiterentwickeln könnte. So lernt ihr nicht nur das Programmieren, sondern auch Teamarbeit, Planung und Präsentation – Fähigkeiten, die in der Arbeitswelt sehr gefragt sind.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149949</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149949"/>
		<updated>2026-02-24T14:32:36Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: neues Kapitel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen]]&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklungsprozesse und -modelle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149914</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149914"/>
		<updated>2026-02-23T19:50:11Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Quiz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5. Softwareentwicklung in der Praxis = =&lt;br /&gt;
== Entwicklungsumgebungen (IDE, Editor, Compiler/Interpreter) ==&lt;br /&gt;
&lt;br /&gt;
In der Praxis der Softwareentwicklung brauchst du nicht nur das Wissen, wie man Programme schreibt, sondern auch Werkzeuge, die dir die Arbeit erleichtern. Dazu gehören zum Beispiel Entwicklungsumgebungen, also Programme wie Editoren oder IDEs (Integrated Development Environments). Sie bieten dir viele praktische Funktionen – du kannst damit Code schreiben, testen und sogar direkt ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein Compiler oder Interpreter sorgt dafür, dass dein Code vom Computer verstanden und ausgeführt wird. So wird aus deinem Python-Programm zum Beispiel eine lauffähige Anwendung.&lt;br /&gt;
&lt;br /&gt;
Moderne Entwicklungsteams nutzen ausserdem Tools, um gemeinsam am Code zu arbeiten und Änderungen nachzuverfolgen. Ein sehr bekanntes Werkzeug dafür ist Git.&lt;br /&gt;
&lt;br /&gt;
== Versionsverwaltung mit Git (Grundlagen, einfache Workflows) ==&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Grundlage moderner Softwareentwicklung ist die Versionsverwaltung. Damit ist gemeint, dass Änderungen am Code nachverfolgt und gespeichert werden. Besonders in Teams ist das hilfreich, weil so nachvollziehbar bleibt, wer wann was geändert hat und ältere Versionen jederzeit wiederhergestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Eines der bekanntesten Systeme dafür ist derzeit Git. Mit Git kannst du einfach verschiedene Entwicklungsstände sichern, neue Features ausprobieren, ohne den Hauptcode zu stören, und gemeinsam mit anderen am selben Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Workflow ist zum Beispiel: Du lädst dir den aktuellen Code (Klonen), erstellst einen neuen Zweig (Branch) für deine Änderungen, testest alles und verbindest am Ende deine Arbeit wieder mit dem Hauptzweig (Merge). So bleibt die Übersicht erhalten, Fehler lassen sich leichter beheben und die Zusammenarbeit wird viel effizienter.&lt;br /&gt;
&lt;br /&gt;
== Dokumentation und Kommentierung von Code ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren ist es wichtig, dass nicht nur der Computer, sondern auch andere Menschen – und du selbst nach ein paar Wochen – verstehen, was dein Code macht. Genau dafür gibt es Kommentare und Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Kommentare schreibst du direkt in den Quelltext, damit zum Beispiel erklärt wird, warum du etwas auf eine bestimmte Weise gelöst hast oder was eine komplizierte Funktion macht. In Python benutzt du dafür das Zeichen # für einzelne Zeilen oder dreifache Anführungszeichen (&amp;quot;&amp;quot;&amp;quot;…&amp;quot;&amp;quot;&amp;quot;) für längere Erklärungen, sogenannte Docstrings.&lt;br /&gt;
&lt;br /&gt;
Gute Dokumentation hilft dir und dem Team, den Überblick zu behalten und Fehler zu vermeiden. Sie ist besonders wichtig, wenn mehrere Personen am selben Projekt arbeiten oder Programme später weiterentwickelt werden sollen.&lt;br /&gt;
&lt;br /&gt;
In Python ist es üblich, Funktionen und Klassen mit Docstrings zu versehen, damit später automatisch Nachschlagewerke (sogenannte API-Dokumentationen) daraus generiert werden können. Auch kleine Beispiele oder Hinweise zu den Eingaben und Ausgaben einer Funktion sind hilfreich.&lt;br /&gt;
&lt;br /&gt;
Kurz gesagt: Schreibe deinen Code so, dass andere ihn verstehen können, auch wenn sie nicht dabei waren, als du ihn geschrieben hast. Das spart Zeit, Nerven – und macht dich zu einer Person, mit der alle gern im Team arbeiten!&lt;br /&gt;
&lt;br /&gt;
== Docstrings und Annotations ==&lt;br /&gt;
&lt;br /&gt;
Docstrings sind spezielle mehrzeilige Kommentare, die direkt am Anfang einer Funktion, Klasse oder eines Moduls stehen. Sie werden in Python mit dreifachen Anführungszeichen geschrieben, also entweder &amp;quot;&amp;quot;&amp;quot; oder &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;, und dienen dazu, die Aufgabe und Verwendung eines Programmteils ausführlich zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil: Docstrings können von Tools und anderen Programmen automatisch ausgelesen werden, etwa für Nachschlagewerke oder Hilfeseiten (wie die integrierte Hilfe mit help()). Ein typischer Docstring erklärt, was die Funktion macht, welche Parameter sie erwartet und was sie zurückgibt. Damit hilft er nicht nur anderen im Team, sondern auch dir selbst beim späteren Nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion mit Docstring:&lt;br /&gt;
&lt;br /&gt;
Annotations – genauer Typannotationen – sind ein weiteres nützliches Werkzeug in Python. Sie erlauben es, die erwarteten Datentypen von Parametern und Rückgabewerten anzugeben. Typannotationen sind zwar optional und werden beim Ausführen nicht erzwungen, sie helfen aber dabei, Fehler früh zu erkennen und den Code verständlicher zu machen – gerade in großen Projekten.&lt;br /&gt;
&lt;br /&gt;
Viele moderne Editoren und Tools können diese Typinformationen nutzen, um Hinweise oder Warnungen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Typische Annotation sieht so aus:&lt;br /&gt;
&lt;br /&gt;
Hier ist klar ersichtlich, dass sowohl a als auch b ganze Zahlen sein sollen und die Funktion ebenfalls eine ganze Zahl zurückgibt. Diese Zusatzinformationen fördern die Lesbarkeit und Wartbarkeit deines Codes – und sorgen dafür, dass auch später noch nachvollziehbar bleibt, was du dir beim Programmieren gedacht hast.&lt;br /&gt;
&lt;br /&gt;
== Testen und Qualitätssicherung (Unit-Tests, Testfälle) ==&lt;br /&gt;
&lt;br /&gt;
Tests spielen eine zentrale Rolle, wenn du sicherstellen willst, dass dein Programm wirklich das tut, was es soll. Besonders beliebt sind sogenannte Unit-Tests: Das sind kleine, automatisierte Prüfungen, die einzelne Teile deines Codes – zum Beispiel eine Funktion oder Methode – testen.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, du hast eine Funktion geschrieben, die zwei Zahlen addieren soll. Mit einem Unit-Test kannst du automatisch prüfen, ob das Ergebnis zum Beispiel bei 2 + 3 wirklich 5 ist.&lt;br /&gt;
&lt;br /&gt;
Solche Tests helfen dir, Fehler möglichst früh zu entdecken, und sie erleichtern die Wartung von Programmen, weil du schnell erkennst, ob spätere Änderungen etwas kaputtmachen.&lt;br /&gt;
&lt;br /&gt;
In Python gibt es dafür eigene Module wie „unittest“ oder „pytest“, mit denen du Testfälle einfach definieren und immer wieder automatisch ausführen kannst. Je mehr Tests du schreibst, desto sicherer kannst du sein, dass dein Programm auch nach Änderungen zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gute Qualitätssicherung bedeutet also nicht, dass du alles doppelt machen musst, sondern dass du mit klugen Tests viel Zeit und Stress sparst – und die Software am Ende einfach besser ist.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil von Typannotationen in Python?&lt;br /&gt;
(!Sie beschleunigen die Laufzeit des Programms.)&lt;br /&gt;
(Sie helfen, Fehler früh zu erkennen und machen den Code verständlicher.)&lt;br /&gt;
(!Sie sind verpflichtend und werden vom Interpreter geprüft.)&lt;br /&gt;
(!Sie ersetzen die Notwendigkeit zu testen.)&lt;br /&gt;
&lt;br /&gt;
Was beschreibt eine typische Unit-Test-Aufgabe am besten?&lt;br /&gt;
(!Überprüfung der gesamten Software.)&lt;br /&gt;
(Testen einzelner Funktionen oder Methoden auf korrektes Verhalten.)&lt;br /&gt;
(!Kontrolle des Designs der Benutzeroberfläche.)&lt;br /&gt;
(!Erstellung eines Lastenhefts.)&lt;br /&gt;
&lt;br /&gt;
Welches Python-Modul ist speziell für das Schreiben und Ausführen von Unit�Tests vorgesehen?&lt;br /&gt;
(!math)&lt;br /&gt;
(!random)&lt;br /&gt;
(unittest)&lt;br /&gt;
(!os)&lt;br /&gt;
&lt;br /&gt;
Was ist ein zentrales Merkmal des Wasserfallmodells?&lt;br /&gt;
(!Iterative Entwicklung mit vielen Rückkopplungen.)&lt;br /&gt;
(Feste Reihenfolge von Phasen, jeweils Abschluss einer Phase vor Beginn der nächsten.)&lt;br /&gt;
(!Kontinuierliche Auslieferung.)&lt;br /&gt;
(!Ständige Einbindung der Endnutzer*innen.)&lt;br /&gt;
&lt;br /&gt;
Welche Aussage trifft auf das Pflichtenheft zu?&lt;br /&gt;
(!Es wird ausschließlich von den Nutzer*innen geschrieben.)&lt;br /&gt;
(Es beschreibt, wie die Anforderungen technisch umgesetzt werden.)&lt;br /&gt;
(!Es enthält ausschließlich Kundenwünsche.)&lt;br /&gt;
(!Es wird nach Abschluss der Entwicklung erstellt.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149913</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149913"/>
		<updated>2026-02-23T19:41:38Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5. Softwareentwicklung in der Praxis = =&lt;br /&gt;
== Entwicklungsumgebungen (IDE, Editor, Compiler/Interpreter) ==&lt;br /&gt;
&lt;br /&gt;
In der Praxis der Softwareentwicklung brauchst du nicht nur das Wissen, wie man Programme schreibt, sondern auch Werkzeuge, die dir die Arbeit erleichtern. Dazu gehören zum Beispiel Entwicklungsumgebungen, also Programme wie Editoren oder IDEs (Integrated Development Environments). Sie bieten dir viele praktische Funktionen – du kannst damit Code schreiben, testen und sogar direkt ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein Compiler oder Interpreter sorgt dafür, dass dein Code vom Computer verstanden und ausgeführt wird. So wird aus deinem Python-Programm zum Beispiel eine lauffähige Anwendung.&lt;br /&gt;
&lt;br /&gt;
Moderne Entwicklungsteams nutzen ausserdem Tools, um gemeinsam am Code zu arbeiten und Änderungen nachzuverfolgen. Ein sehr bekanntes Werkzeug dafür ist Git.&lt;br /&gt;
&lt;br /&gt;
== Versionsverwaltung mit Git (Grundlagen, einfache Workflows) ==&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Grundlage moderner Softwareentwicklung ist die Versionsverwaltung. Damit ist gemeint, dass Änderungen am Code nachverfolgt und gespeichert werden. Besonders in Teams ist das hilfreich, weil so nachvollziehbar bleibt, wer wann was geändert hat und ältere Versionen jederzeit wiederhergestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Eines der bekanntesten Systeme dafür ist derzeit Git. Mit Git kannst du einfach verschiedene Entwicklungsstände sichern, neue Features ausprobieren, ohne den Hauptcode zu stören, und gemeinsam mit anderen am selben Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Workflow ist zum Beispiel: Du lädst dir den aktuellen Code (Klonen), erstellst einen neuen Zweig (Branch) für deine Änderungen, testest alles und verbindest am Ende deine Arbeit wieder mit dem Hauptzweig (Merge). So bleibt die Übersicht erhalten, Fehler lassen sich leichter beheben und die Zusammenarbeit wird viel effizienter.&lt;br /&gt;
&lt;br /&gt;
== Dokumentation und Kommentierung von Code ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren ist es wichtig, dass nicht nur der Computer, sondern auch andere Menschen – und du selbst nach ein paar Wochen – verstehen, was dein Code macht. Genau dafür gibt es Kommentare und Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Kommentare schreibst du direkt in den Quelltext, damit zum Beispiel erklärt wird, warum du etwas auf eine bestimmte Weise gelöst hast oder was eine komplizierte Funktion macht. In Python benutzt du dafür das Zeichen # für einzelne Zeilen oder dreifache Anführungszeichen (&amp;quot;&amp;quot;&amp;quot;…&amp;quot;&amp;quot;&amp;quot;) für längere Erklärungen, sogenannte Docstrings.&lt;br /&gt;
&lt;br /&gt;
Gute Dokumentation hilft dir und dem Team, den Überblick zu behalten und Fehler zu vermeiden. Sie ist besonders wichtig, wenn mehrere Personen am selben Projekt arbeiten oder Programme später weiterentwickelt werden sollen.&lt;br /&gt;
&lt;br /&gt;
In Python ist es üblich, Funktionen und Klassen mit Docstrings zu versehen, damit später automatisch Nachschlagewerke (sogenannte API-Dokumentationen) daraus generiert werden können. Auch kleine Beispiele oder Hinweise zu den Eingaben und Ausgaben einer Funktion sind hilfreich.&lt;br /&gt;
&lt;br /&gt;
Kurz gesagt: Schreibe deinen Code so, dass andere ihn verstehen können, auch wenn sie nicht dabei waren, als du ihn geschrieben hast. Das spart Zeit, Nerven – und macht dich zu einer Person, mit der alle gern im Team arbeiten!&lt;br /&gt;
&lt;br /&gt;
== Docstrings und Annotations ==&lt;br /&gt;
&lt;br /&gt;
Docstrings sind spezielle mehrzeilige Kommentare, die direkt am Anfang einer Funktion, Klasse oder eines Moduls stehen. Sie werden in Python mit dreifachen Anführungszeichen geschrieben, also entweder &amp;quot;&amp;quot;&amp;quot; oder &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;, und dienen dazu, die Aufgabe und Verwendung eines Programmteils ausführlich zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil: Docstrings können von Tools und anderen Programmen automatisch ausgelesen werden, etwa für Nachschlagewerke oder Hilfeseiten (wie die integrierte Hilfe mit help()). Ein typischer Docstring erklärt, was die Funktion macht, welche Parameter sie erwartet und was sie zurückgibt. Damit hilft er nicht nur anderen im Team, sondern auch dir selbst beim späteren Nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion mit Docstring:&lt;br /&gt;
&lt;br /&gt;
Annotations – genauer Typannotationen – sind ein weiteres nützliches Werkzeug in Python. Sie erlauben es, die erwarteten Datentypen von Parametern und Rückgabewerten anzugeben. Typannotationen sind zwar optional und werden beim Ausführen nicht erzwungen, sie helfen aber dabei, Fehler früh zu erkennen und den Code verständlicher zu machen – gerade in großen Projekten.&lt;br /&gt;
&lt;br /&gt;
Viele moderne Editoren und Tools können diese Typinformationen nutzen, um Hinweise oder Warnungen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Typische Annotation sieht so aus:&lt;br /&gt;
&lt;br /&gt;
Hier ist klar ersichtlich, dass sowohl a als auch b ganze Zahlen sein sollen und die Funktion ebenfalls eine ganze Zahl zurückgibt. Diese Zusatzinformationen fördern die Lesbarkeit und Wartbarkeit deines Codes – und sorgen dafür, dass auch später noch nachvollziehbar bleibt, was du dir beim Programmieren gedacht hast.&lt;br /&gt;
&lt;br /&gt;
== Testen und Qualitätssicherung (Unit-Tests, Testfälle) ==&lt;br /&gt;
&lt;br /&gt;
Tests spielen eine zentrale Rolle, wenn du sicherstellen willst, dass dein Programm wirklich das tut, was es soll. Besonders beliebt sind sogenannte Unit-Tests: Das sind kleine, automatisierte Prüfungen, die einzelne Teile deines Codes – zum Beispiel eine Funktion oder Methode – testen.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, du hast eine Funktion geschrieben, die zwei Zahlen addieren soll. Mit einem Unit-Test kannst du automatisch prüfen, ob das Ergebnis zum Beispiel bei 2 + 3 wirklich 5 ist.&lt;br /&gt;
&lt;br /&gt;
Solche Tests helfen dir, Fehler möglichst früh zu entdecken, und sie erleichtern die Wartung von Programmen, weil du schnell erkennst, ob spätere Änderungen etwas kaputtmachen.&lt;br /&gt;
&lt;br /&gt;
In Python gibt es dafür eigene Module wie „unittest“ oder „pytest“, mit denen du Testfälle einfach definieren und immer wieder automatisch ausführen kannst. Je mehr Tests du schreibst, desto sicherer kannst du sein, dass dein Programm auch nach Änderungen zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gute Qualitätssicherung bedeutet also nicht, dass du alles doppelt machen musst, sondern dass du mit klugen Tests viel Zeit und Stress sparst – und die Software am Ende einfach besser ist.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149912</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149912"/>
		<updated>2026-02-23T19:40:36Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5. Softwareentwicklung in der Praxis =&amp;lt;/nowiki&amp;gt; =&lt;br /&gt;
== Entwicklungsumgebungen (IDE, Editor, Compiler/Interpreter) ==&lt;br /&gt;
&lt;br /&gt;
In der Praxis der Softwareentwicklung brauchst du nicht nur das Wissen, wie man Programme schreibt, sondern auch Werkzeuge, die dir die Arbeit erleichtern. Dazu gehören zum Beispiel Entwicklungsumgebungen, also Programme wie Editoren oder IDEs (Integrated Development Environments). Sie bieten dir viele praktische Funktionen – du kannst damit Code schreiben, testen und sogar direkt ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein Compiler oder Interpreter sorgt dafür, dass dein Code vom Computer verstanden und ausgeführt wird. So wird aus deinem Python-Programm zum Beispiel eine lauffähige Anwendung.&lt;br /&gt;
&lt;br /&gt;
Moderne Entwicklungsteams nutzen ausserdem Tools, um gemeinsam am Code zu arbeiten und Änderungen nachzuverfolgen. Ein sehr bekanntes Werkzeug dafür ist Git.&lt;br /&gt;
&lt;br /&gt;
== Versionsverwaltung mit Git (Grundlagen, einfache Workflows) ==&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Grundlage moderner Softwareentwicklung ist die Versionsverwaltung. Damit ist gemeint, dass Änderungen am Code nachverfolgt und gespeichert werden. Besonders in Teams ist das hilfreich, weil so nachvollziehbar bleibt, wer wann was geändert hat und ältere Versionen jederzeit wiederhergestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Eines der bekanntesten Systeme dafür ist derzeit Git. Mit Git kannst du einfach verschiedene Entwicklungsstände sichern, neue Features ausprobieren, ohne den Hauptcode zu stören, und gemeinsam mit anderen am selben Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Workflow ist zum Beispiel: Du lädst dir den aktuellen Code (Klonen), erstellst einen neuen Zweig (Branch) für deine Änderungen, testest alles und verbindest am Ende deine Arbeit wieder mit dem Hauptzweig (Merge). So bleibt die Übersicht erhalten, Fehler lassen sich leichter beheben und die Zusammenarbeit wird viel effizienter.&lt;br /&gt;
&lt;br /&gt;
== Dokumentation und Kommentierung von Code ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren ist es wichtig, dass nicht nur der Computer, sondern auch andere Menschen – und du selbst nach ein paar Wochen – verstehen, was dein Code macht. Genau dafür gibt es Kommentare und Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Kommentare schreibst du direkt in den Quelltext, damit zum Beispiel erklärt wird, warum du etwas auf eine bestimmte Weise gelöst hast oder was eine komplizierte Funktion macht. In Python benutzt du dafür das Zeichen # für einzelne Zeilen oder dreifache Anführungszeichen (&amp;quot;&amp;quot;&amp;quot;…&amp;quot;&amp;quot;&amp;quot;) für längere Erklärungen, sogenannte Docstrings.&lt;br /&gt;
&lt;br /&gt;
Gute Dokumentation hilft dir und dem Team, den Überblick zu behalten und Fehler zu vermeiden. Sie ist besonders wichtig, wenn mehrere Personen am selben Projekt arbeiten oder Programme später weiterentwickelt werden sollen.&lt;br /&gt;
&lt;br /&gt;
In Python ist es üblich, Funktionen und Klassen mit Docstrings zu versehen, damit später automatisch Nachschlagewerke (sogenannte API-Dokumentationen) daraus generiert werden können. Auch kleine Beispiele oder Hinweise zu den Eingaben und Ausgaben einer Funktion sind hilfreich.&lt;br /&gt;
&lt;br /&gt;
Kurz gesagt: Schreibe deinen Code so, dass andere ihn verstehen können, auch wenn sie nicht dabei waren, als du ihn geschrieben hast. Das spart Zeit, Nerven – und macht dich zu einer Person, mit der alle gern im Team arbeiten!&lt;br /&gt;
&lt;br /&gt;
== Docstrings und Annotations ==&lt;br /&gt;
&lt;br /&gt;
Docstrings sind spezielle mehrzeilige Kommentare, die direkt am Anfang einer Funktion, Klasse oder eines Moduls stehen. Sie werden in Python mit dreifachen Anführungszeichen geschrieben, also entweder &amp;quot;&amp;quot;&amp;quot; oder &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;, und dienen dazu, die Aufgabe und Verwendung eines Programmteils ausführlich zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil: Docstrings können von Tools und anderen Programmen automatisch ausgelesen werden, etwa für Nachschlagewerke oder Hilfeseiten (wie die integrierte Hilfe mit help()). Ein typischer Docstring erklärt, was die Funktion macht, welche Parameter sie erwartet und was sie zurückgibt. Damit hilft er nicht nur anderen im Team, sondern auch dir selbst beim späteren Nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion mit Docstring:&lt;br /&gt;
&lt;br /&gt;
Annotations – genauer Typannotationen – sind ein weiteres nützliches Werkzeug in Python. Sie erlauben es, die erwarteten Datentypen von Parametern und Rückgabewerten anzugeben. Typannotationen sind zwar optional und werden beim Ausführen nicht erzwungen, sie helfen aber dabei, Fehler früh zu erkennen und den Code verständlicher zu machen – gerade in großen Projekten.&lt;br /&gt;
&lt;br /&gt;
Viele moderne Editoren und Tools können diese Typinformationen nutzen, um Hinweise oder Warnungen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Typische Annotation sieht so aus:&lt;br /&gt;
&lt;br /&gt;
Hier ist klar ersichtlich, dass sowohl a als auch b ganze Zahlen sein sollen und die Funktion ebenfalls eine ganze Zahl zurückgibt. Diese Zusatzinformationen fördern die Lesbarkeit und Wartbarkeit deines Codes – und sorgen dafür, dass auch später noch nachvollziehbar bleibt, was du dir beim Programmieren gedacht hast.&lt;br /&gt;
&lt;br /&gt;
== Testen und Qualitätssicherung (Unit-Tests, Testfälle) ==&lt;br /&gt;
&lt;br /&gt;
Tests spielen eine zentrale Rolle, wenn du sicherstellen willst, dass dein Programm wirklich das tut, was es soll. Besonders beliebt sind sogenannte Unit-Tests: Das sind kleine, automatisierte Prüfungen, die einzelne Teile deines Codes – zum Beispiel eine Funktion oder Methode – testen.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, du hast eine Funktion geschrieben, die zwei Zahlen addieren soll. Mit einem Unit-Test kannst du automatisch prüfen, ob das Ergebnis zum Beispiel bei 2 + 3 wirklich 5 ist.&lt;br /&gt;
&lt;br /&gt;
Solche Tests helfen dir, Fehler möglichst früh zu entdecken, und sie erleichtern die Wartung von Programmen, weil du schnell erkennst, ob spätere Änderungen etwas kaputtmachen.&lt;br /&gt;
&lt;br /&gt;
In Python gibt es dafür eigene Module wie „unittest“ oder „pytest“, mit denen du Testfälle einfach definieren und immer wieder automatisch ausführen kannst. Je mehr Tests du schreibst, desto sicherer kannst du sein, dass dein Programm auch nach Änderungen zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gute Qualitätssicherung bedeutet also nicht, dass du alles doppelt machen musst, sondern dass du mit klugen Tests viel Zeit und Stress sparst – und die Software am Ende einfach besser ist.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149911</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149911"/>
		<updated>2026-02-23T19:38:25Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== &amp;lt;nowiki&amp;gt;= 5. Softwareentwicklung in der Praxis =&amp;lt;/nowiki&amp;gt; ====&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Entwicklungsumgebungen (IDE, Editor, Compiler/Interpreter) ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Praxis der Softwareentwicklung brauchst du nicht nur das Wissen, wie man Programme schreibt, sondern auch Werkzeuge, die dir die Arbeit erleichtern. Dazu gehören zum Beispiel Entwicklungsumgebungen, also Programme wie Editoren oder IDEs (Integrated Development Environments). Sie bieten dir viele praktische Funktionen – du kannst damit Code schreiben, testen und sogar direkt ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein Compiler oder Interpreter sorgt dafür, dass dein Code vom Computer verstanden und ausgeführt wird. So wird aus deinem Python-Programm zum Beispiel eine lauffähige Anwendung.&lt;br /&gt;
&lt;br /&gt;
Moderne Entwicklungsteams nutzen ausserdem Tools, um gemeinsam am Code zu arbeiten und Änderungen nachzuverfolgen. Ein sehr bekanntes Werkzeug dafür ist Git.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Versionsverwaltung mit Git (Grundlagen, einfache Workflows) ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Grundlage moderner Softwareentwicklung ist die Versionsverwaltung. Damit ist gemeint, dass Änderungen am Code nachverfolgt und gespeichert werden. Besonders in Teams ist das hilfreich, weil so nachvollziehbar bleibt, wer wann was geändert hat und ältere Versionen jederzeit wiederhergestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Eines der bekanntesten Systeme dafür ist derzeit Git. Mit Git kannst du einfach verschiedene Entwicklungsstände sichern, neue Features ausprobieren, ohne den Hauptcode zu stören, und gemeinsam mit anderen am selben Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Workflow ist zum Beispiel: Du lädst dir den aktuellen Code (Klonen), erstellst einen neuen Zweig (Branch) für deine Änderungen, testest alles und verbindest am Ende deine Arbeit wieder mit dem Hauptzweig (Merge). So bleibt die Übersicht erhalten, Fehler lassen sich leichter beheben und die Zusammenarbeit wird viel effizienter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Dokumentation und Kommentierung von Code ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren ist es wichtig, dass nicht nur der Computer, sondern auch andere Menschen – und du selbst nach ein paar Wochen – verstehen, was dein Code macht. Genau dafür gibt es Kommentare und Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Kommentare schreibst du direkt in den Quelltext, damit zum Beispiel erklärt wird, warum du etwas auf eine bestimmte Weise gelöst hast oder was eine komplizierte Funktion macht. In Python benutzt du dafür das Zeichen # für einzelne Zeilen oder dreifache Anführungszeichen (&amp;quot;&amp;quot;&amp;quot;…&amp;quot;&amp;quot;&amp;quot;) für längere Erklärungen, sogenannte Docstrings.&lt;br /&gt;
&lt;br /&gt;
Gute Dokumentation hilft dir und dem Team, den Überblick zu behalten und Fehler zu vermeiden. Sie ist besonders wichtig, wenn mehrere Personen am selben Projekt arbeiten oder Programme später weiterentwickelt werden sollen.&lt;br /&gt;
&lt;br /&gt;
In Python ist es üblich, Funktionen und Klassen mit Docstrings zu versehen, damit später automatisch Nachschlagewerke (sogenannte API-Dokumentationen) daraus generiert werden können. Auch kleine Beispiele oder Hinweise zu den Eingaben und Ausgaben einer Funktion sind hilfreich.&lt;br /&gt;
&lt;br /&gt;
Kurz gesagt: Schreibe deinen Code so, dass andere ihn verstehen können, auch wenn sie nicht dabei waren, als du ihn geschrieben hast. Das spart Zeit, Nerven – und macht dich zu einer Person, mit der alle gern im Team arbeiten!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Docstrings und Annotations ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Docstrings sind spezielle mehrzeilige Kommentare, die direkt am Anfang einer Funktion, Klasse oder eines Moduls stehen. Sie werden in Python mit dreifachen Anführungszeichen geschrieben, also entweder &amp;quot;&amp;quot;&amp;quot; oder &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;, und dienen dazu, die Aufgabe und Verwendung eines Programmteils ausführlich zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil: Docstrings können von Tools und anderen Programmen automatisch ausgelesen werden, etwa für Nachschlagewerke oder Hilfeseiten (wie die integrierte Hilfe mit help()). Ein typischer Docstring erklärt, was die Funktion macht, welche Parameter sie erwartet und was sie zurückgibt. Damit hilft er nicht nur anderen im Team, sondern auch dir selbst beim späteren Nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion mit Docstring:&lt;br /&gt;
&lt;br /&gt;
Annotations – genauer Typannotationen – sind ein weiteres nützliches Werkzeug in Python. Sie erlauben es, die erwarteten Datentypen von Parametern und Rückgabewerten anzugeben. Typannotationen sind zwar optional und werden beim Ausführen nicht erzwungen, sie helfen aber dabei, Fehler früh zu erkennen und den Code verständlicher zu machen – gerade in großen Projekten.&lt;br /&gt;
&lt;br /&gt;
Viele moderne Editoren und Tools können diese Typinformationen nutzen, um Hinweise oder Warnungen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Typische Annotation sieht so aus:&lt;br /&gt;
&lt;br /&gt;
Hier ist klar ersichtlich, dass sowohl a als auch b ganze Zahlen sein sollen und die Funktion ebenfalls eine ganze Zahl zurückgibt. Diese Zusatzinformationen fördern die Lesbarkeit und Wartbarkeit deines Codes – und sorgen dafür, dass auch später noch nachvollziehbar bleibt, was du dir beim Programmieren gedacht hast.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Testen und Qualitätssicherung (Unit-Tests, Testfälle) ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tests spielen eine zentrale Rolle, wenn du sicherstellen willst, dass dein Programm wirklich das tut, was es soll. Besonders beliebt sind sogenannte Unit-Tests: Das sind kleine, automatisierte Prüfungen, die einzelne Teile deines Codes – zum Beispiel eine Funktion oder Methode – testen.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, du hast eine Funktion geschrieben, die zwei Zahlen addieren soll. Mit einem Unit-Test kannst du automatisch prüfen, ob das Ergebnis zum Beispiel bei 2 + 3 wirklich 5 ist.&lt;br /&gt;
&lt;br /&gt;
Solche Tests helfen dir, Fehler möglichst früh zu entdecken, und sie erleichtern die Wartung von Programmen, weil du schnell erkennst, ob spätere Änderungen etwas kaputtmachen.&lt;br /&gt;
&lt;br /&gt;
In Python gibt es dafür eigene Module wie „unittest“ oder „pytest“, mit denen du Testfälle einfach definieren und immer wieder automatisch ausführen kannst. Je mehr Tests du schreibst, desto sicherer kannst du sein, dass dein Programm auch nach Änderungen zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gute Qualitätssicherung bedeutet also nicht, dass du alles doppelt machen musst, sondern dass du mit klugen Tests viel Zeit und Stress sparst – und die Software am Ende einfach besser ist.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149910</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung_in_der_Praxis&amp;diff=149910"/>
		<updated>2026-02-23T19:34:07Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: neues Kapitel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Softwareentwicklung in der Praxis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;=== Entwicklungsumgebungen (IDE, Editor, Compiler/Interpreter) ===&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Praxis der Softwareentwicklung brauchst du nicht nur das Wissen, wie man Programme schreibt, sondern auch Werkzeuge, die dir die Arbeit erleichtern. Dazu gehören zum Beispiel Entwicklungsumgebungen, also Programme wie Editoren oder IDEs (Integrated Development Environments). Sie bieten dir viele praktische Funktionen – du kannst damit Code schreiben, testen und sogar direkt ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein Compiler oder Interpreter sorgt dafür, dass dein Code vom Computer verstanden und ausgeführt wird. So wird aus deinem Python-Programm zum Beispiel eine lauffähige Anwendung.&lt;br /&gt;
&lt;br /&gt;
Moderne Entwicklungsteams nutzen ausserdem Tools, um gemeinsam am Code zu arbeiten und Änderungen nachzuverfolgen. Ein sehr bekanntes Werkzeug dafür ist Git.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;=== Versionsverwaltung mit Git (Grundlagen, einfache Workflows) ===&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Grundlage moderner Softwareentwicklung ist die Versionsverwaltung. Damit ist gemeint, dass Änderungen am Code nachverfolgt und gespeichert werden. Besonders in Teams ist das hilfreich, weil so nachvollziehbar bleibt, wer wann was geändert hat und ältere Versionen jederzeit wiederhergestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Eines der bekanntesten Systeme dafür ist derzeit Git. Mit Git kannst du einfach verschiedene Entwicklungsstände sichern, neue Features ausprobieren, ohne den Hauptcode zu stören, und gemeinsam mit anderen am selben Projekt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Workflow ist zum Beispiel: Du lädst dir den aktuellen Code (Klonen), erstellst einen neuen Zweig (Branch) für deine Änderungen, testest alles und verbindest am Ende deine Arbeit wieder mit dem Hauptzweig (Merge). So bleibt die Übersicht erhalten, Fehler lassen sich leichter beheben und die Zusammenarbeit wird viel effizienter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;=== Dokumentation und Kommentierung von Code ===&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren ist es wichtig, dass nicht nur der Computer, sondern auch andere Menschen – und du selbst nach ein paar Wochen – verstehen, was dein Code macht. Genau dafür gibt es Kommentare und Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Kommentare schreibst du direkt in den Quelltext, damit zum Beispiel erklärt wird, warum du etwas auf eine bestimmte Weise gelöst hast oder was eine komplizierte Funktion macht. In Python benutzt du dafür das Zeichen # für einzelne Zeilen oder dreifache Anführungszeichen (&amp;quot;&amp;quot;&amp;quot;…&amp;quot;&amp;quot;&amp;quot;) für längere Erklärungen, sogenannte Docstrings.&lt;br /&gt;
&lt;br /&gt;
Gute Dokumentation hilft dir und dem Team, den Überblick zu behalten und Fehler zu vermeiden. Sie ist besonders wichtig, wenn mehrere Personen am selben Projekt arbeiten oder Programme später weiterentwickelt werden sollen.&lt;br /&gt;
&lt;br /&gt;
In Python ist es üblich, Funktionen und Klassen mit Docstrings zu versehen, damit später automatisch Nachschlagewerke (sogenannte API-Dokumentationen) daraus generiert werden können. Auch kleine Beispiele oder Hinweise zu den Eingaben und Ausgaben einer Funktion sind hilfreich.&lt;br /&gt;
&lt;br /&gt;
Kurz gesagt: Schreibe deinen Code so, dass andere ihn verstehen können, auch wenn sie nicht dabei waren, als du ihn geschrieben hast. Das spart Zeit, Nerven – und macht dich zu einer Person, mit der alle gern im Team arbeiten!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;=== Docstrings und Annotations ===&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Docstrings sind spezielle mehrzeilige Kommentare, die direkt am Anfang einer Funktion, Klasse oder eines Moduls stehen. Sie werden in Python mit dreifachen Anführungszeichen geschrieben, also entweder &amp;quot;&amp;quot;&amp;quot; oder &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;, und dienen dazu, die Aufgabe und Verwendung eines Programmteils ausführlich zu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil: Docstrings können von Tools und anderen Programmen automatisch ausgelesen werden, etwa für Nachschlagewerke oder Hilfeseiten (wie die integrierte Hilfe mit help()). Ein typischer Docstring erklärt, was die Funktion macht, welche Parameter sie erwartet und was sie zurückgibt. Damit hilft er nicht nur anderen im Team, sondern auch dir selbst beim späteren Nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion mit Docstring:&lt;br /&gt;
&lt;br /&gt;
Annotations – genauer Typannotationen – sind ein weiteres nützliches Werkzeug in Python. Sie erlauben es, die erwarteten Datentypen von Parametern und Rückgabewerten anzugeben. Typannotationen sind zwar optional und werden beim Ausführen nicht erzwungen, sie helfen aber dabei, Fehler früh zu erkennen und den Code verständlicher zu machen – gerade in großen Projekten.&lt;br /&gt;
&lt;br /&gt;
Viele moderne Editoren und Tools können diese Typinformationen nutzen, um Hinweise oder Warnungen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Typische Annotation sieht so aus:&lt;br /&gt;
&lt;br /&gt;
Hier ist klar ersichtlich, dass sowohl a als auch b ganze Zahlen sein sollen und die Funktion ebenfalls eine ganze Zahl zurückgibt. Diese Zusatzinformationen fördern die Lesbarkeit und Wartbarkeit deines Codes – und sorgen dafür, dass auch später noch nachvollziehbar bleibt, was du dir beim Programmieren gedacht hast.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;=== Testen und Qualitätssicherung (Unit-Tests, Testfälle) ===&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tests spielen eine zentrale Rolle, wenn du sicherstellen willst, dass dein Programm wirklich das tut, was es soll. Besonders beliebt sind sogenannte Unit-Tests: Das sind kleine, automatisierte Prüfungen, die einzelne Teile deines Codes – zum Beispiel eine Funktion oder Methode – testen.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, du hast eine Funktion geschrieben, die zwei Zahlen addieren soll. Mit einem Unit-Test kannst du automatisch prüfen, ob das Ergebnis zum Beispiel bei 2 + 3 wirklich 5 ist.&lt;br /&gt;
&lt;br /&gt;
Solche Tests helfen dir, Fehler möglichst früh zu entdecken, und sie erleichtern die Wartung von Programmen, weil du schnell erkennst, ob spätere Änderungen etwas kaputtmachen.&lt;br /&gt;
&lt;br /&gt;
In Python gibt es dafür eigene Module wie „unittest“ oder „pytest“, mit denen du Testfälle einfach definieren und immer wieder automatisch ausführen kannst. Je mehr Tests du schreibst, desto sicherer kannst du sein, dass dein Programm auch nach Änderungen zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gute Qualitätssicherung bedeutet also nicht, dass du alles doppelt machen musst, sondern dass du mit klugen Tests viel Zeit und Stress sparst – und die Software am Ende einfach besser ist.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149909</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=149909"/>
		<updated>2026-02-23T19:32:12Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Kapitel ergänzt: Softwareentwicklung in der Praxis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen]]&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Softwareentwicklung in der Praxis]]&lt;br /&gt;
* Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Thema:Z6fho9uzwoia2z0y&amp;topic_postId=z6gbmjwzptp76ymq&amp;topic_revId=z6gbmjwzptp76ymq&amp;action=single-view</id>
		<title>Thema:Z6fho9uzwoia2z0y</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Thema:Z6fho9uzwoia2z0y&amp;topic_postId=z6gbmjwzptp76ymq&amp;topic_revId=z6gbmjwzptp76ymq&amp;action=single-view"/>
		<updated>2026-01-13T20:01:09Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/Benutzer:Kwschneider&quot; class=&quot;mw-userlink&quot; title=&quot;Benutzer:Kwschneider&quot;&gt;&lt;bdi&gt;Kwschneider&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/Benutzer_Diskussion:Kwschneider&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;Benutzer Diskussion:Kwschneider&quot;&gt;Diskussion&lt;/a&gt; | &lt;a href=&quot;/wiki/Spezial:Beitr%C3%A4ge/Kwschneider&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;Spezial:Beiträge/Kwschneider&quot;&gt;Beiträge&lt;/a&gt;)&lt;/span&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow noreferrer noopener&quot; class=&quot;external text&quot; href=&quot;http://zumunterrichten.idea-sketch.com/index.php?title=Thema:Z6fho9uzwoia2z0y&amp;amp;topic_showPostId=z6gbmjwzptp76ymq#flow-post-z6gbmjwzptp76ymq&quot;&gt;kommentierte&lt;/a&gt; auf „Lieber Kwschneider“ (&lt;em&gt;Hallo Herr Dautel, auch von meiner Seite a guads Nei‘s, wie man in Bayern sagt! Und vielen Dank, für das Angebot, meine Beiträge über den Z…&lt;/em&gt;).&lt;/span&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=148003</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=148003"/>
		<updated>2026-01-12T17:57:34Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
&lt;br /&gt;
MD5 in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klartext_passwort = &amp;quot;MeinSicheresPW!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klartext_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung während des Speicherns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;br /&gt;
[[Kategorie:Python]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;br /&gt;
[[Kategorie:Programmieren]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147939</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147939"/>
		<updated>2026-01-11T21:25:22Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
&lt;br /&gt;
MD5 in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klartext_passwort = &amp;quot;MeinSicheresPW!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klartext_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung während des Speicherns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;br /&gt;
[[Kategorie:Python]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147938</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147938"/>
		<updated>2026-01-11T21:24:46Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 4. Datenstrukturen und einfache Algorithmen =&lt;br /&gt;
&lt;br /&gt;
== Arrays/Listen, Tupel, Dictionaries ==&lt;br /&gt;
&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind grundlegende Datenstrukturen, die du immer wieder brauchst. Eine Liste ist wie ein Behälter, in dem du verschiedene Werte speichern kannst – zum Beispiel Zahlen oder Wörter – und du kannst sie später einfach verändern, Elemente hinzufügen oder entfernen.&lt;br /&gt;
Ein Tupel funktioniert ähnlich, aber die Werte darin kannst du nach dem Erstellen nicht mehr verändern: Es ist quasi eine „feste“ Liste.&lt;br /&gt;
Dictionaries (Wörterbücher) sind besonders praktisch, wenn du Daten als Paare speichern willst, zum Beispiel Namen und dazugehörige Telefonnummern. Jedes Element besteht aus einem Schlüssel und einem Wert – so kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, also Schritt-für-Schritt-Anleitungen, um Probleme zu lösen. Ein Beispiel ist die lineare Suche: Du gehst eine Liste von vorne bis hinten durch, um herauszufinden, ob ein bestimmter Wert darin vorkommt.&lt;br /&gt;
Zum Sortieren von Listen gibt es viele Möglichkeiten – eine davon ist der sogenannte Bubble Sort. Dabei werden die Elemente immer wieder paarweise verglichen und getauscht, wenn sie in der falschen Reihenfolge stehen, bis die ganze Liste sortiert ist. Diese Techniken sind die Basis für viele Aufgaben – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Suchen und Sortieren (lineare Suche, Bubble Sort) ==&lt;br /&gt;
&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste steckt. Das funktioniert ganz einfach: Du gehst die Liste von vorne bis hinten durch und vergleichst jedes Element mit dem Wert, den du suchst. Passt es? Super, dann bist du fertig! Wenn nicht, schaust du einfach weiter, bis du am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
gesucht = 42 &lt;br /&gt;
liste = [17, 23, 42, 5, 8] &lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Die Zahl ist nicht in der Liste.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Sortieren gibt es verschiedene Algorithmen. Ein ganz einfacher ist der Bubble Sort. Dabei vergleichst du immer benachbarte Werte in der Liste und vertauschst sie, wenn sie in der falschen Reihenfolge stehen. Das machst du so lange, bis keine Werte mehr vertauscht werden müssen – dann ist die Liste sortiert.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
liste = [4, 2, 7, 1, 9] &lt;br /&gt;
n = len(liste)&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    for j in range(0, n - i - 1):&lt;br /&gt;
        if liste[j] &amp;gt; liste[j + 1]:&lt;br /&gt;
            liste[j], liste[j + 1] = liste[j + 1], liste[j]&lt;br /&gt;
&lt;br /&gt;
print(liste) # Ausgabe: [1, 2, 4, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Algorithmen helfen dir, Daten zu durchsuchen oder zu ordnen – egal, ob es um Zahlen, Wörter oder andere Werte geht. Gerade in Python kannst du viele dieser Dinge mit wenigen Zeilen Code ausprobieren und bekommst so schnell ein Gefühl dafür, wie Programme im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Rekursion ==&lt;br /&gt;
&lt;br /&gt;
Rekursion bedeutet, dass sich eine Funktion in ihrem eigenen Körper selbst aufruft. Das klingt vielleicht erst mal kompliziert, ist aber eigentlich ein elegantes Werkzeug, um Probleme zu lösen, die sich in kleinere Teilprobleme zerlegen lassen.&lt;br /&gt;
Ein klassisches Beispiel ist die Berechnung der Fakultät einer Zahl. Schauen wir uns das mal in Python an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
def fakultaet(n): &lt;br /&gt;
    if n == 0: &lt;br /&gt;
        return 1 &lt;br /&gt;
    else: &lt;br /&gt;
        return n * fakultaet(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(fakultaet(5)) # Ausgabe: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ruft sich die Funktion &amp;lt;code&amp;gt;fakultaet&amp;lt;/code&amp;gt; immer wieder selbst auf, bis die Bedingung &amp;lt;code&amp;gt;n == 0&amp;lt;/code&amp;gt; erfüllt ist. Das nennt man auch die Abbruchbedingung – sie verhindert, dass die Funktion endlos weiterläuft.&lt;br /&gt;
Rekursive Funktionen können viele Aufgaben lösen, zum Beispiel das Durchlaufen von Verzeichnissen, das Berechnen von Zahlenfolgen oder das Lösen von Rätseln wie dem berühmten Türme-von-Hanoi-Problem.&lt;br /&gt;
Wichtig ist bei der Rekursion immer, dass es eine klare Abbruchbedingung gibt, damit das Programm nicht in einer Endlosschleife festhängt. In Python sind rekursive Lösungen oft sehr kompakt und anschaulich, aber bei sehr tiefen Rekursionen kann der Speicher knapp werden. Deshalb sollte man Rekursion immer mit Bedacht wählen und überlegen, ob auch eine Schleife zum Ziel führt.&lt;br /&gt;
&lt;br /&gt;
== Komplexität (Big-O-Notation – optional, je nach Niveau) ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Programme schreibst, möchtest du oft wissen, wie schnell oder wie viel Speicher sie brauchen – besonders, wenn sie mit grossen Datenmengen arbeiten. Dafür gibt es die sogenannte „Big-O-Notation“. Sie hilft, grob einzuschätzen, wie sich die Laufzeit oder der Speicherverbrauch eines Programms verhält, wenn die Eingabe immer grösser wird.&lt;br /&gt;
Stell dir vor, du hast eine Liste von 100 Zahlen und möchtest jede Zahl einmal anschauen. In Python machst du das mit einer Schleife:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
for zahl in liste: &lt;br /&gt;
    print(zahl) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier läuft das Programm 100-mal – bei 1.000 Zahlen läuft es 1.000-mal. Wir sagen dann: Das hat eine Komplexität von O(n). Das „n“ steht für die Anzahl der Elemente. Je mehr Elemente, desto länger dauert’s.&lt;br /&gt;
Bei rekursiven Funktionen wie der Fakultät von oben ist die Komplexität O(n), weil für jede Zahl bis 0 ein eigener Funktionsaufruf gemacht wird.&lt;br /&gt;
Es gibt aber auch schnellere und langsamere Algorithmen, zum Beispiel:&lt;br /&gt;
* O(1): Dauert immer gleich lang, egal wie gross die Eingabe ist (z.B. Zugriff auf ein einzelnes Element in einer Liste: &amp;lt;code&amp;gt;liste[0]&amp;lt;/code&amp;gt;).&lt;br /&gt;
* O(n): Die Laufzeit wächst linear mit der Eingabemenge (z.B. durch eine Liste laufen).&lt;br /&gt;
* O(n²): Für jede Zahl wird noch einmal die ganze Liste durchlaufen, wie bei einer verschachtelten Schleife (Doppelschleife).&lt;br /&gt;
* O(log n): Eine Suche, die immer die Hälfte ausschliesst (z.B. binäre Suche), ist viel schneller als das Durchgehen aller Elemente.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir das, bessere und schnellere Programme zu schreiben. Du musst die Big-O-Notation nicht auswendig können, aber wenn du ein grundlegendes Verständnis davon hast, erkennst du, warum manche Lösungen bei kleinen Datenmengen gut und bei grossen langsam werden. In Python kannst du oft mit eingebauten Funktionen und cleveren Datenstrukturen schon viel erreichen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt die Big-O-Notation hauptsächlich?&lt;br /&gt;
(!Die Lesbarkeit des Codes)&lt;br /&gt;
(!Die Anzahl der Variablen im Programm)&lt;br /&gt;
(!Das Speicherformat einer Datei)&lt;br /&gt;
(Die Laufzeit oder den Ressourcenverbrauch eines Algorithmus in Abhängigkeit von der Eingabemenge)&lt;br /&gt;
&lt;br /&gt;
Welche Laufzeit hat ein Algorithmus mit O[n²]?&lt;br /&gt;
(!Die Laufzeit bleibt immer gleich, egal wie viele Elemente)&lt;br /&gt;
(!Die Laufzeit wächst exponentiell bei mehr Elementen)&lt;br /&gt;
(Für jedes Element wird die komplette Liste erneut durchlaufen)&lt;br /&gt;
(!Die Laufzeit halbiert sich bei doppelter Eingabegröße)&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil von Versionsverwaltungssystemen wie Git?&lt;br /&gt;
(!Sie machen den Code schneller)&lt;br /&gt;
(Änderungen am Code können nachverfolgt und ältere Versionen wiederhergestellt werden)&lt;br /&gt;
(!Sie übersetzen den Code in Maschinensprache)&lt;br /&gt;
(!Sie formatieren automatisch den Quelltext)&lt;br /&gt;
&lt;br /&gt;
Wie dokumentierst du in Python längere Erklärungen zu Funktionen am besten?&lt;br /&gt;
(!Mit einfachen Anführungszeichen)&lt;br /&gt;
(Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind)&lt;br /&gt;
(!Mit eckigen Klammern)&lt;br /&gt;
(!Mit dem Zeichen %)&lt;br /&gt;
&lt;br /&gt;
Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&lt;br /&gt;
(!Jeder arbeitet im selben Branch und überschreibt Änderungen anderer)&lt;br /&gt;
(!Änderungen werden per E-Mail verschickt)&lt;br /&gt;
(Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt)&lt;br /&gt;
(!Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen)&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147937</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147937"/>
		<updated>2026-01-11T21:24:25Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche der folgenden Fehlerarten tritt auf, wenn ein Programm zwar startet, aber während der Ausführung auf ein Problem stößt?&lt;br /&gt;
(!Syntaxfehler)&lt;br /&gt;
(Laufzeitfehler)&lt;br /&gt;
(!Logischer Fehler)&lt;br /&gt;
(!Tippfehler)&lt;br /&gt;
&lt;br /&gt;
Was ist ein Vorteil von Modulen in Python?&lt;br /&gt;
(!Sie machen Programme langsamer)&lt;br /&gt;
(Sie erlauben es, Funktionen und Code übersichtlich zu strukturieren und wiederzuverwenden)&lt;br /&gt;
(!Sie verhindern Fehler vollständig)&lt;br /&gt;
(!Sie ersetzen die Notwendigkeit von Datenstrukturen)&lt;br /&gt;
&lt;br /&gt;
Welcher Befehl wird empfohlen, um beim Debugging den Programmverlauf zu überprüfen?&lt;br /&gt;
(!input)&lt;br /&gt;
(print)&lt;br /&gt;
(!exit)&lt;br /&gt;
(!import)&lt;br /&gt;
&lt;br /&gt;
Was unterscheidet ein Tupel von einer Liste in Python?&lt;br /&gt;
(!Tupel können nach dem Erstellen verändert werden, Listen nicht)&lt;br /&gt;
(!Listen sind unveränderlich, Tupel nicht)&lt;br /&gt;
(Tupel sind unveränderlich, Listen nicht)&lt;br /&gt;
(!Es gibt keinen Unterschied)&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert die lineare Suche?&lt;br /&gt;
(!Die Liste wird nach Größe sortiert)&lt;br /&gt;
(Alle Elemente werden von vorne bis hinten durchgegangen und mit dem gesuchten Wert verglichen)&lt;br /&gt;
(!Die Suche wird mithilfe eines Wörterbuchs durchgeführt)&lt;br /&gt;
(!Die Elemente werden zufällig überprüft)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147936</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147936"/>
		<updated>2026-01-11T21:24:05Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Denkweisen und Konzepte der Programmierung =&lt;br /&gt;
&lt;br /&gt;
== Algorithmisches Denken und Problemlösungsstrategien ==&lt;br /&gt;
&lt;br /&gt;
Algorithmisches Denken bedeutet, ein Problem Schritt für Schritt zu lösen – ähnlich wie bei einer Bauanleitung oder einem Kochrezept.&lt;br /&gt;
&lt;br /&gt;
In der Programmierung überlegst du dir, wie du ein Ziel erreichen kannst, indem du einzelne, logisch aufeinanderfolgende Anweisungen formulierst.&lt;br /&gt;
&lt;br /&gt;
Ziel ist es, eine Lösung so klar zu beschreiben, dass ein Computer oder eine andere Person sie ganz genau nachvollziehen kann.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel: Stell dir vor, du möchtest ein Programm schreiben, das prüft, ob jemand volljährig ist.&lt;br /&gt;
&lt;br /&gt;
Du musst den Ablauf logisch planen. Zuerst fragst du nach dem Alter, dann vergleichst du es mit 18, und entscheidest, was ausgegeben werden soll – das ist schon algorithmisches Denken.&lt;br /&gt;
&lt;br /&gt;
Problemlösungsstrategien helfen dir dabei, auch komplexere Aufgaben zu meistern.&lt;br /&gt;
&lt;br /&gt;
Dazu gehört es, ein großes Problem in kleine Teilprobleme zu zerlegen, verschiedene Lösungswege abzuwägen und mögliche Fehlerquellen zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Häufig werden solche Schritte erst auf Papier geplant, bevor sie als Programm umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
So lernst du nach und nach, nicht nur Aufgaben zu lösen, sondern auch möglichst effiziente und fehlerfreie Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
Dieses Denken ist die Grundlage dafür, später eigene Programme zu schreiben und immer wieder neue Herausforderungen erfolgreich zu meistern.&lt;br /&gt;
&lt;br /&gt;
== Von der Idee zum Code: Problemanalyse und Lösungsentwurf ==&lt;br /&gt;
&lt;br /&gt;
Bevor du mit dem eigentlichen Programmieren startest, ist es wichtig, eine klare Vorstellung davon zu haben, was dein Programm eigentlich tun soll.&lt;br /&gt;
&lt;br /&gt;
Das beginnt mit der Problemanalyse.&lt;br /&gt;
&lt;br /&gt;
Du schaust dir genau an, welche Aufgabe gelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
Dafür kann es helfen, das Problem in kleinere, überschaubare Teile zu zerlegen.&lt;br /&gt;
&lt;br /&gt;
Du überlegst beispielsweise:&lt;br /&gt;
* Welche Informationen brauche ich?&lt;br /&gt;
* Welche Schritte müssen der Reihe nach abgearbeitet werden?&lt;br /&gt;
* Gibt es verschiedene Möglichkeiten, das Ziel zu erreichen?&lt;br /&gt;
&lt;br /&gt;
Sobald du das Problem verstanden hast, folgt der Lösungsentwurf.&lt;br /&gt;
&lt;br /&gt;
Dabei planst du, wie dein Programm grundsätzlich aufgebaut sein soll.&lt;br /&gt;
&lt;br /&gt;
Häufig nutzt man dafür einfache Hilfsmittel wie Flussdiagramme, die den Ablauf grafisch darstellen, oder Pseudocode, eine Art „Programmiersprache in Alltagssprache“.&lt;br /&gt;
&lt;br /&gt;
So kannst du ausprobieren und testen, ob deine Lösung logisch und vollständig ist, bevor du eine einzige Zeile Code schreibst.&lt;br /&gt;
&lt;br /&gt;
Dieser Planungsprozess hilft dir, Fehler frühzeitig zu erkennen und sorgt dafür, dass du später beim Programmieren gezielter und strukturierter arbeiten kannst.&lt;br /&gt;
&lt;br /&gt;
== Einführung in Flussdiagramme und Pseudocode ==&lt;br /&gt;
&lt;br /&gt;
Flussdiagramme und Pseudocode sind zwei praktische Werkzeuge, die dir beim Planen und Verstehen von Programmen helfen.&lt;br /&gt;
&lt;br /&gt;
Ein Flussdiagramm ist eine Art Zeichnung, mit der du den Ablauf eines Programms Schritt für Schritt darstellst.&lt;br /&gt;
&lt;br /&gt;
Du verwendest verschiedene Symbole:&lt;br /&gt;
* Ovale für den Start und das Ende&lt;br /&gt;
* Rechtecke für Anweisungen&lt;br /&gt;
* Rauten für Entscheidungen (zum Beispiel: „Ist die Zahl größer als 18?“)&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Schritte sind mit Pfeilen verbunden, so dass du leicht siehst, welcher Schritt als nächstes kommt.&lt;br /&gt;
&lt;br /&gt;
Das hilft dir, den Überblick zu behalten und logische Fehler früh zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Pseudocode dagegen ist wie eine Beschreibung des Programms in ganz normalen Worten, aber so aufgebaut, dass du daraus leicht richtigen Code machen kannst.&lt;br /&gt;
&lt;br /&gt;
Dabei schreibst du keine exakten Befehle einer Programmiersprache, sondern beschreibst die Abläufe so klar wie möglich – etwa so: „Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“&lt;br /&gt;
&lt;br /&gt;
Pseudocode hilft dir, den roten Faden zu behalten, ohne dich gleich mit der genauen Syntax von Python oder Java beschäftigen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Beides, Flussdiagramm und Pseudocode, sind besonders am Anfang nützlich, weil du damit deine Ideen durchdenken und strukturieren kannst, noch bevor du mit dem eigentlichen Programmieren loslegst.&lt;br /&gt;
&lt;br /&gt;
Damit bist du bestens vorbereitet auf die nächsten Themen, wie die verschiedenen Kontrollstrukturen in Programmen.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen: Sequenz, Verzweigung, Schleifen ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen bilden das Grundgerüst jeder Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie bestimmen, in welcher Reihenfolge Anweisungen im Programm ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich gibt es drei Arten von Kontrollstrukturen:&lt;br /&gt;
* die Sequenz (also das „der Reihe nach Durcharbeiten“),&lt;br /&gt;
* die Verzweigung (Entscheidungen wie if/else),&lt;br /&gt;
* die Schleifen (Wiederholungen wie for oder while).&lt;br /&gt;
&lt;br /&gt;
Bei der Sequenz werden die Befehle einfach Schritt für Schritt abgearbeitet – ganz ohne Umwege.&lt;br /&gt;
&lt;br /&gt;
Sobald das Programm aber an eine Stelle kommt, an der eine Entscheidung getroffen werden muss (zum Beispiel: „Ist das Alter größer als 18?“), kommt die Verzweigung ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Das Programm wählt dann abhängig von der Bedingung einen bestimmten Weg.&lt;br /&gt;
&lt;br /&gt;
Mit Schleifen kannst du erreichen, dass bestimmte Anweisungen mehrfach wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders praktisch, wenn Aufgaben immer wieder durchgeführt werden sollen, etwa beim Durchlaufen einer Liste von Werten.&lt;br /&gt;
&lt;br /&gt;
Durch das geschickte Zusammenspiel dieser Kontrollstrukturen kannst du auch schon mit einfachen Mitteln sehr flexible und vielseitige Programme schreiben – und hast das Handwerkszeug, um komplexere Themen wie Datenstrukturen und Algorithmen zu verstehen.&lt;br /&gt;
&lt;br /&gt;
= Quiz =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil eines Flussdiagramms beim Programmieren?&lt;br /&gt;
(!Es generiert automatisch den Programmcode.)&lt;br /&gt;
(!Es hilft dabei, den genauen Speicherbedarf zu berechnen.)&lt;br /&gt;
(Es stellt den Ablauf eines Programms grafisch dar und erleichtert das &lt;br /&gt;
Erkennen von Fehlern.)&lt;br /&gt;
(!Es ersetzt die Programmbeschreibung vollständig.)&lt;br /&gt;
&lt;br /&gt;
Welcher der folgenden Begriffe ist KEINE Kontrollstruktur?&lt;br /&gt;
(Variable)&lt;br /&gt;
(!Sequenz)&lt;br /&gt;
(!Verzweigung)&lt;br /&gt;
(!Schleife)&lt;br /&gt;
&lt;br /&gt;
Wie sieht ein Beispiel für Pseudocode aus?&lt;br /&gt;
(!x = 5 + 3)&lt;br /&gt;
(„Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“)&lt;br /&gt;
(!return x)&lt;br /&gt;
(!for i in liste: i += 1)&lt;br /&gt;
&lt;br /&gt;
Wie weist man in Python einer Variablen einen Wert zu?&lt;br /&gt;
(!variable == wert)&lt;br /&gt;
(!wert = variable)&lt;br /&gt;
(variable = wert)&lt;br /&gt;
(!set variable wert)&lt;br /&gt;
&lt;br /&gt;
Was macht der Befehl input() in Python?&lt;br /&gt;
(!Gibt einen Wert auf dem Bildschirm aus.)&lt;br /&gt;
(Fragt eine Eingabe von der*dem Benutzer*in ab.)&lt;br /&gt;
(!Vergleicht zwei Werte.)&lt;br /&gt;
(!Definiert eine neue Variable.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung&amp;diff=147934</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung&amp;diff=147934"/>
		<updated>2026-01-11T21:23:44Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung in die Softwareentwicklung =&lt;br /&gt;
&lt;br /&gt;
== Bedeutung und Ziele der Softwareentwicklung ==&lt;br /&gt;
Softwareentwicklung bedeutet, Programme und Anwendungen so zu entwerfen und zu bauen, dass sie bestimmte Aufgaben für Menschen oder andere Programme übernehmen.&lt;br /&gt;
&lt;br /&gt;
Das Ziel ist, nützliche, zuverlässige und einfach bedienbare Software zu erstellen – egal ob für den Computer, das Smartphone oder Maschinen in der Industrie.&lt;br /&gt;
&lt;br /&gt;
Dabei geht es nicht nur darum, Code zu schreiben, sondern auch darum, Probleme zu analysieren, Lösungen zu planen und mit anderen zusammenzuarbeiten.&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklung verbindet also technisches Wissen mit Teamarbeit und Kreativität, damit am Ende ein funktionierendes Produkt entsteht, das das Leben oder Arbeiten erleichtert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Softwareentwicklung umfasst mehr als Programmieren: Analyse, Planung und Zusammenarbeit sind ebenso wichtig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Überblick über Softwarearten ==&lt;br /&gt;
Es gibt verschiedene Arten von Software, die in unserem Alltag und in der Arbeitswelt eine wichtige Rolle spielen.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich unterscheidet man zwischen Systemsoftware, Anwendungssoftware sowie Web- und Mobile-Apps.&lt;br /&gt;
&lt;br /&gt;
=== Systemsoftware ===&lt;br /&gt;
Systemsoftware ist die Software, die dafür sorgt, dass ein Computer oder Smartphone überhaupt funktioniert.&lt;br /&gt;
&lt;br /&gt;
Ein bekanntes Beispiel ist das Betriebssystem wie Windows, macOS, Linux oder Android.&lt;br /&gt;
&lt;br /&gt;
Die Systemsoftware verwaltet die Hardware, startet Programme und stellt sicher, dass alles richtig zusammenarbeitet.&lt;br /&gt;
&lt;br /&gt;
Ohne Systemsoftware könnten keine anderen Programme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anwendungssoftware ===&lt;br /&gt;
Anwendungssoftware bezeichnet alle Programme, mit denen Nutzerinnen und Nutzer direkt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Dazu gehören zum Beispiel:&lt;br /&gt;
* Textverarbeitungen wie Word&lt;br /&gt;
* Tabellenkalkulationen wie Excel&lt;br /&gt;
* Grafikprogramme wie Photoshop&lt;br /&gt;
* Spiele, Musikplayer oder Chat-Programme&lt;br /&gt;
&lt;br /&gt;
Anwendungssoftware hilft dabei, bestimmte Aufgaben zu erledigen oder dient der Unterhaltung.&lt;br /&gt;
&lt;br /&gt;
=== Web- und Mobile-Apps ===&lt;br /&gt;
Viele Programme gibt es heute nicht mehr nur für den Computer, sondern auch als Anwendungen im Internet oder als Apps auf mobilen Geräten.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel ist WhatsApp als App auf dem Smartphone oder Google Docs, das direkt im Browser genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Web- und Mobile-Apps sind besonders praktisch, weil sie ortsunabhängig und oft auf verschiedenen Geräten genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Zusammenfassung&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Software sorgt in unterschiedlichen Formen dafür, dass digitale Geräte für Arbeit, Lernen und Freizeit genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Softwareentwicklungsprozess – Überblick ==&lt;br /&gt;
Damit aus einer Idee am Ende eine funktionierende Software wird, gibt es verschiedene Schritte, die im sogenannten Softwareentwicklungsprozess aufeinander folgen.&lt;br /&gt;
&lt;br /&gt;
=== Planung und Konzeption ===&lt;br /&gt;
Alles beginnt mit der Planung. Zuerst überlegen sich alle Beteiligten, welches Problem gelöst werden soll und was die neue Software genau können muss.&lt;br /&gt;
&lt;br /&gt;
In dieser Phase werden Anforderungen gesammelt und aufgeschrieben.&lt;br /&gt;
&lt;br /&gt;
Danach folgt die Konzeption. Dabei wird geplant, wie die Software aufgebaut sein soll, zum Beispiel welche Funktionen es geben wird und wie das Programm aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
=== Programmierung und Testen ===&lt;br /&gt;
Ist der Plan fertig, startet die eigentliche Programmierung.&lt;br /&gt;
&lt;br /&gt;
Die Entwicklerinnen und Entwickler schreiben den Code, testen Zwischenergebnisse und passen ihn immer wieder an.&lt;br /&gt;
&lt;br /&gt;
Parallel dazu prüfen Testerinnen und Tester die Software gezielt auf Fehler, damit am Ende alles zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Häufig wird die Software in mehreren Versionen entwickelt, sodass schon früh ausprobiert und verbessert werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Auslieferung und Wartung ===&lt;br /&gt;
Wenn alles funktioniert, wird die fertige Software ausgeliefert und installiert – entweder direkt auf den Geräten oder über das Internet.&lt;br /&gt;
&lt;br /&gt;
Aber damit ist der Prozess nicht abgeschlossen. Auch nach der Veröffentlichung kümmern sich die Beteiligten um Updates und Verbesserungen, damit die Software weiterhin sicher und nützlich bleibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ein strukturierter Entwicklungsprozess hilft dabei, aus einer Idee schrittweise eine zuverlässige Software zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rollen im Softwareentwicklungsprozess ==&lt;br /&gt;
Im Softwareentwicklungsprozess arbeiten viele verschiedene Personen zusammen, die jeweils unterschiedliche Aufgaben und Verantwortlichkeiten haben.&lt;br /&gt;
&lt;br /&gt;
Diese unterschiedlichen Aufgaben werden als Rollen bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklerinnen und Entwickler ===&lt;br /&gt;
Entwicklerinnen und Entwickler sind dafür zuständig, den Code der Software zu schreiben und technische Lösungen für die gestellten Aufgaben zu finden.&lt;br /&gt;
&lt;br /&gt;
Sie setzen die Ideen und Anforderungen praktisch um, programmieren die Funktionen und sorgen dafür, dass alles technisch funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Testerinnen und Tester ===&lt;br /&gt;
Testerinnen und Tester prüfen die Software auf Herz und Nieren.&lt;br /&gt;
&lt;br /&gt;
Sie suchen gezielt nach Fehlern, testen verschiedene Funktionen und melden Probleme, damit die Software am Ende stabil und zuverlässig läuft.&lt;br /&gt;
&lt;br /&gt;
=== Projektmanagerinnen und Projektmanager ===&lt;br /&gt;
Projektmanagerinnen und Projektmanager behalten den Überblick.&lt;br /&gt;
&lt;br /&gt;
Sie planen, wer was wann erledigt, achten auf den Zeitplan und sorgen dafür, dass das Team gut zusammenarbeitet.&lt;br /&gt;
&lt;br /&gt;
Außerdem vermitteln sie zwischen Kundinnen und Kunden und dem Entwicklungsteam.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Rollen ===&lt;br /&gt;
Neben diesen Hauptrollen gibt es häufig weitere Beteiligte, zum Beispiel:&lt;br /&gt;
* Designerinnen und Designer für das Aussehen und die Bedienbarkeit&lt;br /&gt;
* Support-Mitarbeitende für Fragen der Nutzerinnen und Nutzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Alle Rollen tragen gemeinsam dazu bei, dass eine Software den Erwartungen entspricht und gut genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist die erste Phase im Softwareentwicklungsprozess?&lt;br /&gt;
(!Programmierung)&lt;br /&gt;
(Planung)&lt;br /&gt;
(!Testen)&lt;br /&gt;
(!Installation)&lt;br /&gt;
&lt;br /&gt;
Welche Aufgabe haben Tester*innen im Softwareentwicklungsprozess?&lt;br /&gt;
(!Das Design der Benutzeroberfläche entwickeln)&lt;br /&gt;
(Die Software auf Fehler prüfen)&lt;br /&gt;
(!Die Codebasis verwalten)&lt;br /&gt;
(!Updates veröffentlichen)&lt;br /&gt;
&lt;br /&gt;
Welche Rolle sorgt dafür, dass das Team gut zusammenarbeitet und der &lt;br /&gt;
Zeitplan eingehalten wird?&lt;br /&gt;
(!Entwickler*innen)&lt;br /&gt;
(!Tester*innen)&lt;br /&gt;
(Projektmanager*innen)&lt;br /&gt;
(!Support-Mitarbeitende)&lt;br /&gt;
&lt;br /&gt;
Was bedeutet algorithmisches Denken?&lt;br /&gt;
(Ein Problem Schritt für Schritt lösen)&lt;br /&gt;
(!Einen Computer bauen)&lt;br /&gt;
(!Fehler im Code suchen)&lt;br /&gt;
(!Programme in Alltagssprache erklären)&lt;br /&gt;
&lt;br /&gt;
Warum werden vor dem Programmieren oft Flussdiagramme oder &lt;br /&gt;
Pseudocode verwendet?&lt;br /&gt;
(!Um das fertige Programm schneller ausführen zu können)&lt;br /&gt;
(Um die Lösung grafisch oder in Alltagssprache zu planen)&lt;br /&gt;
(!Weil der Computer es verlangt)&lt;br /&gt;
(!Um den Code zu verkürzen)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;br /&gt;
[[Kategorie:Berufsschule]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147933</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147933"/>
		<updated>2026-01-11T21:22:39Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 4. Datenstrukturen und einfache Algorithmen =&lt;br /&gt;
&lt;br /&gt;
== Arrays/Listen, Tupel, Dictionaries ==&lt;br /&gt;
&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind grundlegende Datenstrukturen, die du immer wieder brauchst. Eine Liste ist wie ein Behälter, in dem du verschiedene Werte speichern kannst – zum Beispiel Zahlen oder Wörter – und du kannst sie später einfach verändern, Elemente hinzufügen oder entfernen.&lt;br /&gt;
Ein Tupel funktioniert ähnlich, aber die Werte darin kannst du nach dem Erstellen nicht mehr verändern: Es ist quasi eine „feste“ Liste.&lt;br /&gt;
Dictionaries (Wörterbücher) sind besonders praktisch, wenn du Daten als Paare speichern willst, zum Beispiel Namen und dazugehörige Telefonnummern. Jedes Element besteht aus einem Schlüssel und einem Wert – so kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, also Schritt-für-Schritt-Anleitungen, um Probleme zu lösen. Ein Beispiel ist die lineare Suche: Du gehst eine Liste von vorne bis hinten durch, um herauszufinden, ob ein bestimmter Wert darin vorkommt.&lt;br /&gt;
Zum Sortieren von Listen gibt es viele Möglichkeiten – eine davon ist der sogenannte Bubble Sort. Dabei werden die Elemente immer wieder paarweise verglichen und getauscht, wenn sie in der falschen Reihenfolge stehen, bis die ganze Liste sortiert ist. Diese Techniken sind die Basis für viele Aufgaben – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Suchen und Sortieren (lineare Suche, Bubble Sort) ==&lt;br /&gt;
&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste steckt. Das funktioniert ganz einfach: Du gehst die Liste von vorne bis hinten durch und vergleichst jedes Element mit dem Wert, den du suchst. Passt es? Super, dann bist du fertig! Wenn nicht, schaust du einfach weiter, bis du am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
gesucht = 42 &lt;br /&gt;
liste = [17, 23, 42, 5, 8] &lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Die Zahl ist nicht in der Liste.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Sortieren gibt es verschiedene Algorithmen. Ein ganz einfacher ist der Bubble Sort. Dabei vergleichst du immer benachbarte Werte in der Liste und vertauschst sie, wenn sie in der falschen Reihenfolge stehen. Das machst du so lange, bis keine Werte mehr vertauscht werden müssen – dann ist die Liste sortiert.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
liste = [4, 2, 7, 1, 9] &lt;br /&gt;
n = len(liste)&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    for j in range(0, n - i - 1):&lt;br /&gt;
        if liste[j] &amp;gt; liste[j + 1]:&lt;br /&gt;
            liste[j], liste[j + 1] = liste[j + 1], liste[j]&lt;br /&gt;
&lt;br /&gt;
print(liste) # Ausgabe: [1, 2, 4, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Algorithmen helfen dir, Daten zu durchsuchen oder zu ordnen – egal, ob es um Zahlen, Wörter oder andere Werte geht. Gerade in Python kannst du viele dieser Dinge mit wenigen Zeilen Code ausprobieren und bekommst so schnell ein Gefühl dafür, wie Programme im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Rekursion ==&lt;br /&gt;
&lt;br /&gt;
Rekursion bedeutet, dass sich eine Funktion in ihrem eigenen Körper selbst aufruft. Das klingt vielleicht erst mal kompliziert, ist aber eigentlich ein elegantes Werkzeug, um Probleme zu lösen, die sich in kleinere Teilprobleme zerlegen lassen.&lt;br /&gt;
Ein klassisches Beispiel ist die Berechnung der Fakultät einer Zahl. Schauen wir uns das mal in Python an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
def fakultaet(n): &lt;br /&gt;
    if n == 0: &lt;br /&gt;
        return 1 &lt;br /&gt;
    else: &lt;br /&gt;
        return n * fakultaet(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(fakultaet(5)) # Ausgabe: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ruft sich die Funktion &amp;lt;code&amp;gt;fakultaet&amp;lt;/code&amp;gt; immer wieder selbst auf, bis die Bedingung &amp;lt;code&amp;gt;n == 0&amp;lt;/code&amp;gt; erfüllt ist. Das nennt man auch die Abbruchbedingung – sie verhindert, dass die Funktion endlos weiterläuft.&lt;br /&gt;
Rekursive Funktionen können viele Aufgaben lösen, zum Beispiel das Durchlaufen von Verzeichnissen, das Berechnen von Zahlenfolgen oder das Lösen von Rätseln wie dem berühmten Türme-von-Hanoi-Problem.&lt;br /&gt;
Wichtig ist bei der Rekursion immer, dass es eine klare Abbruchbedingung gibt, damit das Programm nicht in einer Endlosschleife festhängt. In Python sind rekursive Lösungen oft sehr kompakt und anschaulich, aber bei sehr tiefen Rekursionen kann der Speicher knapp werden. Deshalb sollte man Rekursion immer mit Bedacht wählen und überlegen, ob auch eine Schleife zum Ziel führt.&lt;br /&gt;
&lt;br /&gt;
== Komplexität (Big-O-Notation – optional, je nach Niveau) ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Programme schreibst, möchtest du oft wissen, wie schnell oder wie viel Speicher sie brauchen – besonders, wenn sie mit grossen Datenmengen arbeiten. Dafür gibt es die sogenannte „Big-O-Notation“. Sie hilft, grob einzuschätzen, wie sich die Laufzeit oder der Speicherverbrauch eines Programms verhält, wenn die Eingabe immer grösser wird.&lt;br /&gt;
Stell dir vor, du hast eine Liste von 100 Zahlen und möchtest jede Zahl einmal anschauen. In Python machst du das mit einer Schleife:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
for zahl in liste: &lt;br /&gt;
    print(zahl) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier läuft das Programm 100-mal – bei 1.000 Zahlen läuft es 1.000-mal. Wir sagen dann: Das hat eine Komplexität von O(n). Das „n“ steht für die Anzahl der Elemente. Je mehr Elemente, desto länger dauert’s.&lt;br /&gt;
Bei rekursiven Funktionen wie der Fakultät von oben ist die Komplexität O(n), weil für jede Zahl bis 0 ein eigener Funktionsaufruf gemacht wird.&lt;br /&gt;
Es gibt aber auch schnellere und langsamere Algorithmen, zum Beispiel:&lt;br /&gt;
* O(1): Dauert immer gleich lang, egal wie gross die Eingabe ist (z.B. Zugriff auf ein einzelnes Element in einer Liste: &amp;lt;code&amp;gt;liste[0]&amp;lt;/code&amp;gt;).&lt;br /&gt;
* O(n): Die Laufzeit wächst linear mit der Eingabemenge (z.B. durch eine Liste laufen).&lt;br /&gt;
* O(n²): Für jede Zahl wird noch einmal die ganze Liste durchlaufen, wie bei einer verschachtelten Schleife (Doppelschleife).&lt;br /&gt;
* O(log n): Eine Suche, die immer die Hälfte ausschliesst (z.B. binäre Suche), ist viel schneller als das Durchgehen aller Elemente.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir das, bessere und schnellere Programme zu schreiben. Du musst die Big-O-Notation nicht auswendig können, aber wenn du ein grundlegendes Verständnis davon hast, erkennst du, warum manche Lösungen bei kleinen Datenmengen gut und bei grossen langsam werden. In Python kannst du oft mit eingebauten Funktionen und cleveren Datenstrukturen schon viel erreichen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt die Big-O-Notation hauptsächlich?&lt;br /&gt;
(!Die Lesbarkeit des Codes)&lt;br /&gt;
(!Die Anzahl der Variablen im Programm)&lt;br /&gt;
(!Das Speicherformat einer Datei)&lt;br /&gt;
(Die Laufzeit oder den Ressourcenverbrauch eines Algorithmus in Abhängigkeit von der Eingabemenge)&lt;br /&gt;
&lt;br /&gt;
Welche Laufzeit hat ein Algorithmus mit O[n²]?&lt;br /&gt;
(!Die Laufzeit bleibt immer gleich, egal wie viele Elemente)&lt;br /&gt;
(!Die Laufzeit wächst exponentiell bei mehr Elementen)&lt;br /&gt;
(Für jedes Element wird die komplette Liste erneut durchlaufen)&lt;br /&gt;
(!Die Laufzeit halbiert sich bei doppelter Eingabegröße)&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil von Versionsverwaltungssystemen wie Git?&lt;br /&gt;
(!Sie machen den Code schneller)&lt;br /&gt;
(Änderungen am Code können nachverfolgt und ältere Versionen wiederhergestellt werden)&lt;br /&gt;
(!Sie übersetzen den Code in Maschinensprache)&lt;br /&gt;
(!Sie formatieren automatisch den Quelltext)&lt;br /&gt;
&lt;br /&gt;
Wie dokumentierst du in Python längere Erklärungen zu Funktionen am besten?&lt;br /&gt;
(!Mit einfachen Anführungszeichen)&lt;br /&gt;
(Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind)&lt;br /&gt;
(!Mit eckigen Klammern)&lt;br /&gt;
(!Mit dem Zeichen %)&lt;br /&gt;
&lt;br /&gt;
Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&lt;br /&gt;
(!Jeder arbeitet im selben Branch und überschreibt Änderungen anderer)&lt;br /&gt;
(!Änderungen werden per E-Mail verschickt)&lt;br /&gt;
(Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt)&lt;br /&gt;
(!Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen)&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147932</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147932"/>
		<updated>2026-01-11T21:22:14Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche der folgenden Fehlerarten tritt auf, wenn ein Programm zwar startet, aber während der Ausführung auf ein Problem stößt?&lt;br /&gt;
(!Syntaxfehler)&lt;br /&gt;
(Laufzeitfehler)&lt;br /&gt;
(!Logischer Fehler)&lt;br /&gt;
(!Tippfehler)&lt;br /&gt;
&lt;br /&gt;
Was ist ein Vorteil von Modulen in Python?&lt;br /&gt;
(!Sie machen Programme langsamer)&lt;br /&gt;
(Sie erlauben es, Funktionen und Code übersichtlich zu strukturieren und wiederzuverwenden)&lt;br /&gt;
(!Sie verhindern Fehler vollständig)&lt;br /&gt;
(!Sie ersetzen die Notwendigkeit von Datenstrukturen)&lt;br /&gt;
&lt;br /&gt;
Welcher Befehl wird empfohlen, um beim Debugging den Programmverlauf zu überprüfen?&lt;br /&gt;
(!input)&lt;br /&gt;
(print)&lt;br /&gt;
(!exit)&lt;br /&gt;
(!import)&lt;br /&gt;
&lt;br /&gt;
Was unterscheidet ein Tupel von einer Liste in Python?&lt;br /&gt;
(!Tupel können nach dem Erstellen verändert werden, Listen nicht)&lt;br /&gt;
(!Listen sind unveränderlich, Tupel nicht)&lt;br /&gt;
(Tupel sind unveränderlich, Listen nicht)&lt;br /&gt;
(!Es gibt keinen Unterschied)&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert die lineare Suche?&lt;br /&gt;
(!Die Liste wird nach Größe sortiert)&lt;br /&gt;
(Alle Elemente werden von vorne bis hinten durchgegangen und mit dem gesuchten Wert verglichen)&lt;br /&gt;
(!Die Suche wird mithilfe eines Wörterbuchs durchgeführt)&lt;br /&gt;
(!Die Elemente werden zufällig überprüft)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147931</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147931"/>
		<updated>2026-01-11T21:21:46Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Denkweisen und Konzepte der Programmierung =&lt;br /&gt;
&lt;br /&gt;
== Algorithmisches Denken und Problemlösungsstrategien ==&lt;br /&gt;
&lt;br /&gt;
Algorithmisches Denken bedeutet, ein Problem Schritt für Schritt zu lösen – ähnlich wie bei einer Bauanleitung oder einem Kochrezept.&lt;br /&gt;
&lt;br /&gt;
In der Programmierung überlegst du dir, wie du ein Ziel erreichen kannst, indem du einzelne, logisch aufeinanderfolgende Anweisungen formulierst.&lt;br /&gt;
&lt;br /&gt;
Ziel ist es, eine Lösung so klar zu beschreiben, dass ein Computer oder eine andere Person sie ganz genau nachvollziehen kann.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel: Stell dir vor, du möchtest ein Programm schreiben, das prüft, ob jemand volljährig ist.&lt;br /&gt;
&lt;br /&gt;
Du musst den Ablauf logisch planen. Zuerst fragst du nach dem Alter, dann vergleichst du es mit 18, und entscheidest, was ausgegeben werden soll – das ist schon algorithmisches Denken.&lt;br /&gt;
&lt;br /&gt;
Problemlösungsstrategien helfen dir dabei, auch komplexere Aufgaben zu meistern.&lt;br /&gt;
&lt;br /&gt;
Dazu gehört es, ein großes Problem in kleine Teilprobleme zu zerlegen, verschiedene Lösungswege abzuwägen und mögliche Fehlerquellen zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Häufig werden solche Schritte erst auf Papier geplant, bevor sie als Programm umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
So lernst du nach und nach, nicht nur Aufgaben zu lösen, sondern auch möglichst effiziente und fehlerfreie Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
Dieses Denken ist die Grundlage dafür, später eigene Programme zu schreiben und immer wieder neue Herausforderungen erfolgreich zu meistern.&lt;br /&gt;
&lt;br /&gt;
== Von der Idee zum Code: Problemanalyse und Lösungsentwurf ==&lt;br /&gt;
&lt;br /&gt;
Bevor du mit dem eigentlichen Programmieren startest, ist es wichtig, eine klare Vorstellung davon zu haben, was dein Programm eigentlich tun soll.&lt;br /&gt;
&lt;br /&gt;
Das beginnt mit der Problemanalyse.&lt;br /&gt;
&lt;br /&gt;
Du schaust dir genau an, welche Aufgabe gelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
Dafür kann es helfen, das Problem in kleinere, überschaubare Teile zu zerlegen.&lt;br /&gt;
&lt;br /&gt;
Du überlegst beispielsweise:&lt;br /&gt;
* Welche Informationen brauche ich?&lt;br /&gt;
* Welche Schritte müssen der Reihe nach abgearbeitet werden?&lt;br /&gt;
* Gibt es verschiedene Möglichkeiten, das Ziel zu erreichen?&lt;br /&gt;
&lt;br /&gt;
Sobald du das Problem verstanden hast, folgt der Lösungsentwurf.&lt;br /&gt;
&lt;br /&gt;
Dabei planst du, wie dein Programm grundsätzlich aufgebaut sein soll.&lt;br /&gt;
&lt;br /&gt;
Häufig nutzt man dafür einfache Hilfsmittel wie Flussdiagramme, die den Ablauf grafisch darstellen, oder Pseudocode, eine Art „Programmiersprache in Alltagssprache“.&lt;br /&gt;
&lt;br /&gt;
So kannst du ausprobieren und testen, ob deine Lösung logisch und vollständig ist, bevor du eine einzige Zeile Code schreibst.&lt;br /&gt;
&lt;br /&gt;
Dieser Planungsprozess hilft dir, Fehler frühzeitig zu erkennen und sorgt dafür, dass du später beim Programmieren gezielter und strukturierter arbeiten kannst.&lt;br /&gt;
&lt;br /&gt;
== Einführung in Flussdiagramme und Pseudocode ==&lt;br /&gt;
&lt;br /&gt;
Flussdiagramme und Pseudocode sind zwei praktische Werkzeuge, die dir beim Planen und Verstehen von Programmen helfen.&lt;br /&gt;
&lt;br /&gt;
Ein Flussdiagramm ist eine Art Zeichnung, mit der du den Ablauf eines Programms Schritt für Schritt darstellst.&lt;br /&gt;
&lt;br /&gt;
Du verwendest verschiedene Symbole:&lt;br /&gt;
* Ovale für den Start und das Ende&lt;br /&gt;
* Rechtecke für Anweisungen&lt;br /&gt;
* Rauten für Entscheidungen (zum Beispiel: „Ist die Zahl größer als 18?“)&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Schritte sind mit Pfeilen verbunden, so dass du leicht siehst, welcher Schritt als nächstes kommt.&lt;br /&gt;
&lt;br /&gt;
Das hilft dir, den Überblick zu behalten und logische Fehler früh zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Pseudocode dagegen ist wie eine Beschreibung des Programms in ganz normalen Worten, aber so aufgebaut, dass du daraus leicht richtigen Code machen kannst.&lt;br /&gt;
&lt;br /&gt;
Dabei schreibst du keine exakten Befehle einer Programmiersprache, sondern beschreibst die Abläufe so klar wie möglich – etwa so: „Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“&lt;br /&gt;
&lt;br /&gt;
Pseudocode hilft dir, den roten Faden zu behalten, ohne dich gleich mit der genauen Syntax von Python oder Java beschäftigen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Beides, Flussdiagramm und Pseudocode, sind besonders am Anfang nützlich, weil du damit deine Ideen durchdenken und strukturieren kannst, noch bevor du mit dem eigentlichen Programmieren loslegst.&lt;br /&gt;
&lt;br /&gt;
Damit bist du bestens vorbereitet auf die nächsten Themen, wie die verschiedenen Kontrollstrukturen in Programmen.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen: Sequenz, Verzweigung, Schleifen ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen bilden das Grundgerüst jeder Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie bestimmen, in welcher Reihenfolge Anweisungen im Programm ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich gibt es drei Arten von Kontrollstrukturen:&lt;br /&gt;
* die Sequenz (also das „der Reihe nach Durcharbeiten“),&lt;br /&gt;
* die Verzweigung (Entscheidungen wie if/else),&lt;br /&gt;
* die Schleifen (Wiederholungen wie for oder while).&lt;br /&gt;
&lt;br /&gt;
Bei der Sequenz werden die Befehle einfach Schritt für Schritt abgearbeitet – ganz ohne Umwege.&lt;br /&gt;
&lt;br /&gt;
Sobald das Programm aber an eine Stelle kommt, an der eine Entscheidung getroffen werden muss (zum Beispiel: „Ist das Alter größer als 18?“), kommt die Verzweigung ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Das Programm wählt dann abhängig von der Bedingung einen bestimmten Weg.&lt;br /&gt;
&lt;br /&gt;
Mit Schleifen kannst du erreichen, dass bestimmte Anweisungen mehrfach wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders praktisch, wenn Aufgaben immer wieder durchgeführt werden sollen, etwa beim Durchlaufen einer Liste von Werten.&lt;br /&gt;
&lt;br /&gt;
Durch das geschickte Zusammenspiel dieser Kontrollstrukturen kannst du auch schon mit einfachen Mitteln sehr flexible und vielseitige Programme schreiben – und hast das Handwerkszeug, um komplexere Themen wie Datenstrukturen und Algorithmen zu verstehen.&lt;br /&gt;
&lt;br /&gt;
= Quiz =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil eines Flussdiagramms beim Programmieren?&lt;br /&gt;
(!Es generiert automatisch den Programmcode.)&lt;br /&gt;
(!Es hilft dabei, den genauen Speicherbedarf zu berechnen.)&lt;br /&gt;
(Es stellt den Ablauf eines Programms grafisch dar und erleichtert das &lt;br /&gt;
Erkennen von Fehlern.)&lt;br /&gt;
(!Es ersetzt die Programmbeschreibung vollständig.)&lt;br /&gt;
&lt;br /&gt;
Welcher der folgenden Begriffe ist KEINE Kontrollstruktur?&lt;br /&gt;
(Variable)&lt;br /&gt;
(!Sequenz)&lt;br /&gt;
(!Verzweigung)&lt;br /&gt;
(!Schleife)&lt;br /&gt;
&lt;br /&gt;
Wie sieht ein Beispiel für Pseudocode aus?&lt;br /&gt;
(!x = 5 + 3)&lt;br /&gt;
(„Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“)&lt;br /&gt;
(!return x)&lt;br /&gt;
(!for i in liste: i += 1)&lt;br /&gt;
&lt;br /&gt;
Wie weist man in Python einer Variablen einen Wert zu?&lt;br /&gt;
(!variable == wert)&lt;br /&gt;
(!wert = variable)&lt;br /&gt;
(variable = wert)&lt;br /&gt;
(!set variable wert)&lt;br /&gt;
&lt;br /&gt;
Was macht der Befehl input() in Python?&lt;br /&gt;
(!Gibt einen Wert auf dem Bildschirm aus.)&lt;br /&gt;
(Fragt eine Eingabe von der*dem Benutzer*in ab.)&lt;br /&gt;
(!Vergleicht zwei Werte.)&lt;br /&gt;
(!Definiert eine neue Variable.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung&amp;diff=147930</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einf%C3%BChrung&amp;diff=147930"/>
		<updated>2026-01-11T21:20:59Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung in die Softwareentwicklung =&lt;br /&gt;
&lt;br /&gt;
== Bedeutung und Ziele der Softwareentwicklung ==&lt;br /&gt;
Softwareentwicklung bedeutet, Programme und Anwendungen so zu entwerfen und zu bauen, dass sie bestimmte Aufgaben für Menschen oder andere Programme übernehmen.&lt;br /&gt;
&lt;br /&gt;
Das Ziel ist, nützliche, zuverlässige und einfach bedienbare Software zu erstellen – egal ob für den Computer, das Smartphone oder Maschinen in der Industrie.&lt;br /&gt;
&lt;br /&gt;
Dabei geht es nicht nur darum, Code zu schreiben, sondern auch darum, Probleme zu analysieren, Lösungen zu planen und mit anderen zusammenzuarbeiten.&lt;br /&gt;
&lt;br /&gt;
Softwareentwicklung verbindet also technisches Wissen mit Teamarbeit und Kreativität, damit am Ende ein funktionierendes Produkt entsteht, das das Leben oder Arbeiten erleichtert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Softwareentwicklung umfasst mehr als Programmieren: Analyse, Planung und Zusammenarbeit sind ebenso wichtig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Überblick über Softwarearten ==&lt;br /&gt;
Es gibt verschiedene Arten von Software, die in unserem Alltag und in der Arbeitswelt eine wichtige Rolle spielen.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich unterscheidet man zwischen Systemsoftware, Anwendungssoftware sowie Web- und Mobile-Apps.&lt;br /&gt;
&lt;br /&gt;
=== Systemsoftware ===&lt;br /&gt;
Systemsoftware ist die Software, die dafür sorgt, dass ein Computer oder Smartphone überhaupt funktioniert.&lt;br /&gt;
&lt;br /&gt;
Ein bekanntes Beispiel ist das Betriebssystem wie Windows, macOS, Linux oder Android.&lt;br /&gt;
&lt;br /&gt;
Die Systemsoftware verwaltet die Hardware, startet Programme und stellt sicher, dass alles richtig zusammenarbeitet.&lt;br /&gt;
&lt;br /&gt;
Ohne Systemsoftware könnten keine anderen Programme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anwendungssoftware ===&lt;br /&gt;
Anwendungssoftware bezeichnet alle Programme, mit denen Nutzerinnen und Nutzer direkt arbeiten.&lt;br /&gt;
&lt;br /&gt;
Dazu gehören zum Beispiel:&lt;br /&gt;
* Textverarbeitungen wie Word&lt;br /&gt;
* Tabellenkalkulationen wie Excel&lt;br /&gt;
* Grafikprogramme wie Photoshop&lt;br /&gt;
* Spiele, Musikplayer oder Chat-Programme&lt;br /&gt;
&lt;br /&gt;
Anwendungssoftware hilft dabei, bestimmte Aufgaben zu erledigen oder dient der Unterhaltung.&lt;br /&gt;
&lt;br /&gt;
=== Web- und Mobile-Apps ===&lt;br /&gt;
Viele Programme gibt es heute nicht mehr nur für den Computer, sondern auch als Anwendungen im Internet oder als Apps auf mobilen Geräten.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel ist WhatsApp als App auf dem Smartphone oder Google Docs, das direkt im Browser genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Web- und Mobile-Apps sind besonders praktisch, weil sie ortsunabhängig und oft auf verschiedenen Geräten genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Zusammenfassung&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Software sorgt in unterschiedlichen Formen dafür, dass digitale Geräte für Arbeit, Lernen und Freizeit genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Softwareentwicklungsprozess – Überblick ==&lt;br /&gt;
Damit aus einer Idee am Ende eine funktionierende Software wird, gibt es verschiedene Schritte, die im sogenannten Softwareentwicklungsprozess aufeinander folgen.&lt;br /&gt;
&lt;br /&gt;
=== Planung und Konzeption ===&lt;br /&gt;
Alles beginnt mit der Planung. Zuerst überlegen sich alle Beteiligten, welches Problem gelöst werden soll und was die neue Software genau können muss.&lt;br /&gt;
&lt;br /&gt;
In dieser Phase werden Anforderungen gesammelt und aufgeschrieben.&lt;br /&gt;
&lt;br /&gt;
Danach folgt die Konzeption. Dabei wird geplant, wie die Software aufgebaut sein soll, zum Beispiel welche Funktionen es geben wird und wie das Programm aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
=== Programmierung und Testen ===&lt;br /&gt;
Ist der Plan fertig, startet die eigentliche Programmierung.&lt;br /&gt;
&lt;br /&gt;
Die Entwicklerinnen und Entwickler schreiben den Code, testen Zwischenergebnisse und passen ihn immer wieder an.&lt;br /&gt;
&lt;br /&gt;
Parallel dazu prüfen Testerinnen und Tester die Software gezielt auf Fehler, damit am Ende alles zuverlässig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Häufig wird die Software in mehreren Versionen entwickelt, sodass schon früh ausprobiert und verbessert werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Auslieferung und Wartung ===&lt;br /&gt;
Wenn alles funktioniert, wird die fertige Software ausgeliefert und installiert – entweder direkt auf den Geräten oder über das Internet.&lt;br /&gt;
&lt;br /&gt;
Aber damit ist der Prozess nicht abgeschlossen. Auch nach der Veröffentlichung kümmern sich die Beteiligten um Updates und Verbesserungen, damit die Software weiterhin sicher und nützlich bleibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ein strukturierter Entwicklungsprozess hilft dabei, aus einer Idee schrittweise eine zuverlässige Software zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rollen im Softwareentwicklungsprozess ==&lt;br /&gt;
Im Softwareentwicklungsprozess arbeiten viele verschiedene Personen zusammen, die jeweils unterschiedliche Aufgaben und Verantwortlichkeiten haben.&lt;br /&gt;
&lt;br /&gt;
Diese unterschiedlichen Aufgaben werden als Rollen bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklerinnen und Entwickler ===&lt;br /&gt;
Entwicklerinnen und Entwickler sind dafür zuständig, den Code der Software zu schreiben und technische Lösungen für die gestellten Aufgaben zu finden.&lt;br /&gt;
&lt;br /&gt;
Sie setzen die Ideen und Anforderungen praktisch um, programmieren die Funktionen und sorgen dafür, dass alles technisch funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Testerinnen und Tester ===&lt;br /&gt;
Testerinnen und Tester prüfen die Software auf Herz und Nieren.&lt;br /&gt;
&lt;br /&gt;
Sie suchen gezielt nach Fehlern, testen verschiedene Funktionen und melden Probleme, damit die Software am Ende stabil und zuverlässig läuft.&lt;br /&gt;
&lt;br /&gt;
=== Projektmanagerinnen und Projektmanager ===&lt;br /&gt;
Projektmanagerinnen und Projektmanager behalten den Überblick.&lt;br /&gt;
&lt;br /&gt;
Sie planen, wer was wann erledigt, achten auf den Zeitplan und sorgen dafür, dass das Team gut zusammenarbeitet.&lt;br /&gt;
&lt;br /&gt;
Außerdem vermitteln sie zwischen Kundinnen und Kunden und dem Entwicklungsteam.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Rollen ===&lt;br /&gt;
Neben diesen Hauptrollen gibt es häufig weitere Beteiligte, zum Beispiel:&lt;br /&gt;
* Designerinnen und Designer für das Aussehen und die Bedienbarkeit&lt;br /&gt;
* Support-Mitarbeitende für Fragen der Nutzerinnen und Nutzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Merke&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Alle Rollen tragen gemeinsam dazu bei, dass eine Software den Erwartungen entspricht und gut genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist die erste Phase im Softwareentwicklungsprozess?&lt;br /&gt;
(!Programmierung)&lt;br /&gt;
(Planung)&lt;br /&gt;
(!Testen)&lt;br /&gt;
(!Installation)&lt;br /&gt;
&lt;br /&gt;
Welche Aufgabe haben Tester*innen im Softwareentwicklungsprozess?&lt;br /&gt;
(!Das Design der Benutzeroberfläche entwickeln)&lt;br /&gt;
(Die Software auf Fehler prüfen)&lt;br /&gt;
(!Die Codebasis verwalten)&lt;br /&gt;
(!Updates veröffentlichen)&lt;br /&gt;
&lt;br /&gt;
Welche Rolle sorgt dafür, dass das Team gut zusammenarbeitet und der &lt;br /&gt;
Zeitplan eingehalten wird?&lt;br /&gt;
(!Entwickler*innen)&lt;br /&gt;
(!Tester*innen)&lt;br /&gt;
(Projektmanager*innen)&lt;br /&gt;
(!Support-Mitarbeitende)&lt;br /&gt;
&lt;br /&gt;
Was bedeutet algorithmisches Denken?&lt;br /&gt;
(Ein Problem Schritt für Schritt lösen)&lt;br /&gt;
(!Einen Computer bauen)&lt;br /&gt;
(!Fehler im Code suchen)&lt;br /&gt;
(!Programme in Alltagssprache erklären)&lt;br /&gt;
&lt;br /&gt;
Warum werden vor dem Programmieren oft Flussdiagramme oder &lt;br /&gt;
Pseudocode verwendet?&lt;br /&gt;
(!Um das fertige Programm schneller ausführen zu können)&lt;br /&gt;
(Um die Lösung grafisch oder in Alltagssprache zu planen)&lt;br /&gt;
(!Weil der Computer es verlangt)&lt;br /&gt;
(!Um den Code zu verkürzen)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
__INDEXIEREN__&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147929</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147929"/>
		<updated>2026-01-11T21:19:59Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
&lt;br /&gt;
MD5 in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klartext_passwort = &amp;quot;MeinSicheresPW!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klartext_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung während des Speicherns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;br /&gt;
[[Kategorie:Python]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
__INDEXIEREN__&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147920</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147920"/>
		<updated>2026-01-09T19:29:41Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 4. Datenstrukturen und einfache Algorithmen =&lt;br /&gt;
&lt;br /&gt;
== Arrays/Listen, Tupel, Dictionaries ==&lt;br /&gt;
&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind grundlegende Datenstrukturen, die du immer wieder brauchst. Eine Liste ist wie ein Behälter, in dem du verschiedene Werte speichern kannst – zum Beispiel Zahlen oder Wörter – und du kannst sie später einfach verändern, Elemente hinzufügen oder entfernen.&lt;br /&gt;
Ein Tupel funktioniert ähnlich, aber die Werte darin kannst du nach dem Erstellen nicht mehr verändern: Es ist quasi eine „feste“ Liste.&lt;br /&gt;
Dictionaries (Wörterbücher) sind besonders praktisch, wenn du Daten als Paare speichern willst, zum Beispiel Namen und dazugehörige Telefonnummern. Jedes Element besteht aus einem Schlüssel und einem Wert – so kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, also Schritt-für-Schritt-Anleitungen, um Probleme zu lösen. Ein Beispiel ist die lineare Suche: Du gehst eine Liste von vorne bis hinten durch, um herauszufinden, ob ein bestimmter Wert darin vorkommt.&lt;br /&gt;
Zum Sortieren von Listen gibt es viele Möglichkeiten – eine davon ist der sogenannte Bubble Sort. Dabei werden die Elemente immer wieder paarweise verglichen und getauscht, wenn sie in der falschen Reihenfolge stehen, bis die ganze Liste sortiert ist. Diese Techniken sind die Basis für viele Aufgaben – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Suchen und Sortieren (lineare Suche, Bubble Sort) ==&lt;br /&gt;
&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste steckt. Das funktioniert ganz einfach: Du gehst die Liste von vorne bis hinten durch und vergleichst jedes Element mit dem Wert, den du suchst. Passt es? Super, dann bist du fertig! Wenn nicht, schaust du einfach weiter, bis du am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
gesucht = 42 &lt;br /&gt;
liste = [17, 23, 42, 5, 8] &lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Die Zahl ist nicht in der Liste.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Sortieren gibt es verschiedene Algorithmen. Ein ganz einfacher ist der Bubble Sort. Dabei vergleichst du immer benachbarte Werte in der Liste und vertauschst sie, wenn sie in der falschen Reihenfolge stehen. Das machst du so lange, bis keine Werte mehr vertauscht werden müssen – dann ist die Liste sortiert.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
liste = [4, 2, 7, 1, 9] &lt;br /&gt;
n = len(liste)&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    for j in range(0, n - i - 1):&lt;br /&gt;
        if liste[j] &amp;gt; liste[j + 1]:&lt;br /&gt;
            liste[j], liste[j + 1] = liste[j + 1], liste[j]&lt;br /&gt;
&lt;br /&gt;
print(liste) # Ausgabe: [1, 2, 4, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Algorithmen helfen dir, Daten zu durchsuchen oder zu ordnen – egal, ob es um Zahlen, Wörter oder andere Werte geht. Gerade in Python kannst du viele dieser Dinge mit wenigen Zeilen Code ausprobieren und bekommst so schnell ein Gefühl dafür, wie Programme im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Rekursion ==&lt;br /&gt;
&lt;br /&gt;
Rekursion bedeutet, dass sich eine Funktion in ihrem eigenen Körper selbst aufruft. Das klingt vielleicht erst mal kompliziert, ist aber eigentlich ein elegantes Werkzeug, um Probleme zu lösen, die sich in kleinere Teilprobleme zerlegen lassen.&lt;br /&gt;
Ein klassisches Beispiel ist die Berechnung der Fakultät einer Zahl. Schauen wir uns das mal in Python an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
def fakultaet(n): &lt;br /&gt;
    if n == 0: &lt;br /&gt;
        return 1 &lt;br /&gt;
    else: &lt;br /&gt;
        return n * fakultaet(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(fakultaet(5)) # Ausgabe: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ruft sich die Funktion &amp;lt;code&amp;gt;fakultaet&amp;lt;/code&amp;gt; immer wieder selbst auf, bis die Bedingung &amp;lt;code&amp;gt;n == 0&amp;lt;/code&amp;gt; erfüllt ist. Das nennt man auch die Abbruchbedingung – sie verhindert, dass die Funktion endlos weiterläuft.&lt;br /&gt;
Rekursive Funktionen können viele Aufgaben lösen, zum Beispiel das Durchlaufen von Verzeichnissen, das Berechnen von Zahlenfolgen oder das Lösen von Rätseln wie dem berühmten Türme-von-Hanoi-Problem.&lt;br /&gt;
Wichtig ist bei der Rekursion immer, dass es eine klare Abbruchbedingung gibt, damit das Programm nicht in einer Endlosschleife festhängt. In Python sind rekursive Lösungen oft sehr kompakt und anschaulich, aber bei sehr tiefen Rekursionen kann der Speicher knapp werden. Deshalb sollte man Rekursion immer mit Bedacht wählen und überlegen, ob auch eine Schleife zum Ziel führt.&lt;br /&gt;
&lt;br /&gt;
== Komplexität (Big-O-Notation – optional, je nach Niveau) ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Programme schreibst, möchtest du oft wissen, wie schnell oder wie viel Speicher sie brauchen – besonders, wenn sie mit grossen Datenmengen arbeiten. Dafür gibt es die sogenannte „Big-O-Notation“. Sie hilft, grob einzuschätzen, wie sich die Laufzeit oder der Speicherverbrauch eines Programms verhält, wenn die Eingabe immer grösser wird.&lt;br /&gt;
Stell dir vor, du hast eine Liste von 100 Zahlen und möchtest jede Zahl einmal anschauen. In Python machst du das mit einer Schleife:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
for zahl in liste: &lt;br /&gt;
    print(zahl) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier läuft das Programm 100-mal – bei 1.000 Zahlen läuft es 1.000-mal. Wir sagen dann: Das hat eine Komplexität von O(n). Das „n“ steht für die Anzahl der Elemente. Je mehr Elemente, desto länger dauert’s.&lt;br /&gt;
Bei rekursiven Funktionen wie der Fakultät von oben ist die Komplexität O(n), weil für jede Zahl bis 0 ein eigener Funktionsaufruf gemacht wird.&lt;br /&gt;
Es gibt aber auch schnellere und langsamere Algorithmen, zum Beispiel:&lt;br /&gt;
* O(1): Dauert immer gleich lang, egal wie gross die Eingabe ist (z.B. Zugriff auf ein einzelnes Element in einer Liste: &amp;lt;code&amp;gt;liste[0]&amp;lt;/code&amp;gt;).&lt;br /&gt;
* O(n): Die Laufzeit wächst linear mit der Eingabemenge (z.B. durch eine Liste laufen).&lt;br /&gt;
* O(n²): Für jede Zahl wird noch einmal die ganze Liste durchlaufen, wie bei einer verschachtelten Schleife (Doppelschleife).&lt;br /&gt;
* O(log n): Eine Suche, die immer die Hälfte ausschliesst (z.B. binäre Suche), ist viel schneller als das Durchgehen aller Elemente.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir das, bessere und schnellere Programme zu schreiben. Du musst die Big-O-Notation nicht auswendig können, aber wenn du ein grundlegendes Verständnis davon hast, erkennst du, warum manche Lösungen bei kleinen Datenmengen gut und bei grossen langsam werden. In Python kannst du oft mit eingebauten Funktionen und cleveren Datenstrukturen schon viel erreichen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt die Big-O-Notation hauptsächlich?&lt;br /&gt;
(!Die Lesbarkeit des Codes)&lt;br /&gt;
(!Die Anzahl der Variablen im Programm)&lt;br /&gt;
(!Das Speicherformat einer Datei)&lt;br /&gt;
(Die Laufzeit oder den Ressourcenverbrauch eines Algorithmus in Abhängigkeit von der Eingabemenge)&lt;br /&gt;
&lt;br /&gt;
Welche Laufzeit hat ein Algorithmus mit O[n²]?&lt;br /&gt;
(!Die Laufzeit bleibt immer gleich, egal wie viele Elemente)&lt;br /&gt;
(!Die Laufzeit wächst exponentiell bei mehr Elementen)&lt;br /&gt;
(Für jedes Element wird die komplette Liste erneut durchlaufen)&lt;br /&gt;
(!Die Laufzeit halbiert sich bei doppelter Eingabegröße)&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil von Versionsverwaltungssystemen wie Git?&lt;br /&gt;
(!Sie machen den Code schneller)&lt;br /&gt;
(Änderungen am Code können nachverfolgt und ältere Versionen wiederhergestellt werden)&lt;br /&gt;
(!Sie übersetzen den Code in Maschinensprache)&lt;br /&gt;
(!Sie formatieren automatisch den Quelltext)&lt;br /&gt;
&lt;br /&gt;
Wie dokumentierst du in Python längere Erklärungen zu Funktionen am besten?&lt;br /&gt;
(!Mit einfachen Anführungszeichen)&lt;br /&gt;
(Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind)&lt;br /&gt;
(!Mit eckigen Klammern)&lt;br /&gt;
(!Mit dem Zeichen %)&lt;br /&gt;
&lt;br /&gt;
Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&lt;br /&gt;
(!Jeder arbeitet im selben Branch und überschreibt Änderungen anderer)&lt;br /&gt;
(!Änderungen werden per E-Mail verschickt)&lt;br /&gt;
(Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt)&lt;br /&gt;
(!Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen)&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147919</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147919"/>
		<updated>2026-01-09T19:26:38Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Quiz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 4. Datenstrukturen und einfache Algorithmen =&lt;br /&gt;
&lt;br /&gt;
== Arrays/Listen, Tupel, Dictionaries ==&lt;br /&gt;
&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind grundlegende Datenstrukturen, die du immer wieder brauchst. Eine Liste ist wie ein Behälter, in dem du verschiedene Werte speichern kannst – zum Beispiel Zahlen oder Wörter – und du kannst sie später einfach verändern, Elemente hinzufügen oder entfernen.&lt;br /&gt;
Ein Tupel funktioniert ähnlich, aber die Werte darin kannst du nach dem Erstellen nicht mehr verändern: Es ist quasi eine „feste“ Liste.&lt;br /&gt;
Dictionaries (Wörterbücher) sind besonders praktisch, wenn du Daten als Paare speichern willst, zum Beispiel Namen und dazugehörige Telefonnummern. Jedes Element besteht aus einem Schlüssel und einem Wert – so kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, also Schritt-für-Schritt-Anleitungen, um Probleme zu lösen. Ein Beispiel ist die lineare Suche: Du gehst eine Liste von vorne bis hinten durch, um herauszufinden, ob ein bestimmter Wert darin vorkommt.&lt;br /&gt;
Zum Sortieren von Listen gibt es viele Möglichkeiten – eine davon ist der sogenannte Bubble Sort. Dabei werden die Elemente immer wieder paarweise verglichen und getauscht, wenn sie in der falschen Reihenfolge stehen, bis die ganze Liste sortiert ist. Diese Techniken sind die Basis für viele Aufgaben – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Suchen und Sortieren (lineare Suche, Bubble Sort) ==&lt;br /&gt;
&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste steckt. Das funktioniert ganz einfach: Du gehst die Liste von vorne bis hinten durch und vergleichst jedes Element mit dem Wert, den du suchst. Passt es? Super, dann bist du fertig! Wenn nicht, schaust du einfach weiter, bis du am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
gesucht = 42 &lt;br /&gt;
liste = [17, 23, 42, 5, 8] &lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Die Zahl ist nicht in der Liste.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Sortieren gibt es verschiedene Algorithmen. Ein ganz einfacher ist der Bubble Sort. Dabei vergleichst du immer benachbarte Werte in der Liste und vertauschst sie, wenn sie in der falschen Reihenfolge stehen. Das machst du so lange, bis keine Werte mehr vertauscht werden müssen – dann ist die Liste sortiert.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
liste = [4, 2, 7, 1, 9] &lt;br /&gt;
n = len(liste)&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    for j in range(0, n - i - 1):&lt;br /&gt;
        if liste[j] &amp;gt; liste[j + 1]:&lt;br /&gt;
            liste[j], liste[j + 1] = liste[j + 1], liste[j]&lt;br /&gt;
&lt;br /&gt;
print(liste) # Ausgabe: [1, 2, 4, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Algorithmen helfen dir, Daten zu durchsuchen oder zu ordnen – egal, ob es um Zahlen, Wörter oder andere Werte geht. Gerade in Python kannst du viele dieser Dinge mit wenigen Zeilen Code ausprobieren und bekommst so schnell ein Gefühl dafür, wie Programme im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Rekursion ==&lt;br /&gt;
&lt;br /&gt;
Rekursion bedeutet, dass sich eine Funktion in ihrem eigenen Körper selbst aufruft. Das klingt vielleicht erst mal kompliziert, ist aber eigentlich ein elegantes Werkzeug, um Probleme zu lösen, die sich in kleinere Teilprobleme zerlegen lassen.&lt;br /&gt;
Ein klassisches Beispiel ist die Berechnung der Fakultät einer Zahl. Schauen wir uns das mal in Python an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
def fakultaet(n): &lt;br /&gt;
    if n == 0: &lt;br /&gt;
        return 1 &lt;br /&gt;
    else: &lt;br /&gt;
        return n * fakultaet(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(fakultaet(5)) # Ausgabe: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ruft sich die Funktion &amp;lt;code&amp;gt;fakultaet&amp;lt;/code&amp;gt; immer wieder selbst auf, bis die Bedingung &amp;lt;code&amp;gt;n == 0&amp;lt;/code&amp;gt; erfüllt ist. Das nennt man auch die Abbruchbedingung – sie verhindert, dass die Funktion endlos weiterläuft.&lt;br /&gt;
Rekursive Funktionen können viele Aufgaben lösen, zum Beispiel das Durchlaufen von Verzeichnissen, das Berechnen von Zahlenfolgen oder das Lösen von Rätseln wie dem berühmten Türme-von-Hanoi-Problem.&lt;br /&gt;
Wichtig ist bei der Rekursion immer, dass es eine klare Abbruchbedingung gibt, damit das Programm nicht in einer Endlosschleife festhängt. In Python sind rekursive Lösungen oft sehr kompakt und anschaulich, aber bei sehr tiefen Rekursionen kann der Speicher knapp werden. Deshalb sollte man Rekursion immer mit Bedacht wählen und überlegen, ob auch eine Schleife zum Ziel führt.&lt;br /&gt;
&lt;br /&gt;
== Komplexität (Big-O-Notation – optional, je nach Niveau) ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Programme schreibst, möchtest du oft wissen, wie schnell oder wie viel Speicher sie brauchen – besonders, wenn sie mit grossen Datenmengen arbeiten. Dafür gibt es die sogenannte „Big-O-Notation“. Sie hilft, grob einzuschätzen, wie sich die Laufzeit oder der Speicherverbrauch eines Programms verhält, wenn die Eingabe immer grösser wird.&lt;br /&gt;
Stell dir vor, du hast eine Liste von 100 Zahlen und möchtest jede Zahl einmal anschauen. In Python machst du das mit einer Schleife:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
for zahl in liste: &lt;br /&gt;
    print(zahl) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier läuft das Programm 100-mal – bei 1.000 Zahlen läuft es 1.000-mal. Wir sagen dann: Das hat eine Komplexität von O(n). Das „n“ steht für die Anzahl der Elemente. Je mehr Elemente, desto länger dauert’s.&lt;br /&gt;
Bei rekursiven Funktionen wie der Fakultät von oben ist die Komplexität O(n), weil für jede Zahl bis 0 ein eigener Funktionsaufruf gemacht wird.&lt;br /&gt;
Es gibt aber auch schnellere und langsamere Algorithmen, zum Beispiel:&lt;br /&gt;
* O(1): Dauert immer gleich lang, egal wie gross die Eingabe ist (z.B. Zugriff auf ein einzelnes Element in einer Liste: &amp;lt;code&amp;gt;liste[0]&amp;lt;/code&amp;gt;).&lt;br /&gt;
* O(n): Die Laufzeit wächst linear mit der Eingabemenge (z.B. durch eine Liste laufen).&lt;br /&gt;
* O(n²): Für jede Zahl wird noch einmal die ganze Liste durchlaufen, wie bei einer verschachtelten Schleife (Doppelschleife).&lt;br /&gt;
* O(log n): Eine Suche, die immer die Hälfte ausschliesst (z.B. binäre Suche), ist viel schneller als das Durchgehen aller Elemente.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir das, bessere und schnellere Programme zu schreiben. Du musst die Big-O-Notation nicht auswendig können, aber wenn du ein grundlegendes Verständnis davon hast, erkennst du, warum manche Lösungen bei kleinen Datenmengen gut und bei grossen langsam werden. In Python kannst du oft mit eingebauten Funktionen und cleveren Datenstrukturen schon viel erreichen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was beschreibt die Big-O-Notation hauptsächlich?&lt;br /&gt;
(!Die Lesbarkeit des Codes)&lt;br /&gt;
(!Die Anzahl der Variablen im Programm)&lt;br /&gt;
(!Das Speicherformat einer Datei)&lt;br /&gt;
(Die Laufzeit oder den Ressourcenverbrauch eines Algorithmus in Abhängigkeit von der Eingabemenge)&lt;br /&gt;
&lt;br /&gt;
Welche Laufzeit hat ein Algorithmus mit O(n²)?&lt;br /&gt;
(!Die Laufzeit bleibt immer gleich, egal wie viele Elemente)&lt;br /&gt;
(!Die Laufzeit wächst exponentiell bei mehr Elementen)&lt;br /&gt;
(Für jedes Element wird die komplette Liste erneut durchlaufen)&lt;br /&gt;
(!Die Laufzeit halbiert sich bei doppelter Eingabegröße)&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil von Versionsverwaltungssystemen wie Git?&lt;br /&gt;
(!Sie machen den Code schneller)&lt;br /&gt;
(Änderungen am Code können nachverfolgt und ältere Versionen wiederhergestellt werden)&lt;br /&gt;
(!Sie übersetzen den Code in Maschinensprache)&lt;br /&gt;
(!Sie formatieren automatisch den Quelltext)&lt;br /&gt;
&lt;br /&gt;
Wie dokumentierst du in Python längere Erklärungen zu Funktionen am besten?&lt;br /&gt;
(!Mit einfachen Anführungszeichen)&lt;br /&gt;
(Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind)&lt;br /&gt;
(!Mit eckigen Klammern)&lt;br /&gt;
(!Mit dem Zeichen %)&lt;br /&gt;
&lt;br /&gt;
Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&lt;br /&gt;
(!Jeder arbeitet im selben Branch und überschreibt Änderungen anderer)&lt;br /&gt;
(!Änderungen werden per E-Mail verschickt)&lt;br /&gt;
(Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt)&lt;br /&gt;
(!Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen)&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147918</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147918"/>
		<updated>2026-01-09T19:20:49Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Formatierungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 4. Datenstrukturen und einfache Algorithmen =&lt;br /&gt;
&lt;br /&gt;
== Arrays/Listen, Tupel, Dictionaries ==&lt;br /&gt;
&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind grundlegende Datenstrukturen, die du immer wieder brauchst. Eine Liste ist wie ein Behälter, in dem du verschiedene Werte speichern kannst – zum Beispiel Zahlen oder Wörter – und du kannst sie später einfach verändern, Elemente hinzufügen oder entfernen.&lt;br /&gt;
Ein Tupel funktioniert ähnlich, aber die Werte darin kannst du nach dem Erstellen nicht mehr verändern: Es ist quasi eine „feste“ Liste.&lt;br /&gt;
Dictionaries (Wörterbücher) sind besonders praktisch, wenn du Daten als Paare speichern willst, zum Beispiel Namen und dazugehörige Telefonnummern. Jedes Element besteht aus einem Schlüssel und einem Wert – so kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, also Schritt-für-Schritt-Anleitungen, um Probleme zu lösen. Ein Beispiel ist die lineare Suche: Du gehst eine Liste von vorne bis hinten durch, um herauszufinden, ob ein bestimmter Wert darin vorkommt.&lt;br /&gt;
Zum Sortieren von Listen gibt es viele Möglichkeiten – eine davon ist der sogenannte Bubble Sort. Dabei werden die Elemente immer wieder paarweise verglichen und getauscht, wenn sie in der falschen Reihenfolge stehen, bis die ganze Liste sortiert ist. Diese Techniken sind die Basis für viele Aufgaben – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Suchen und Sortieren (lineare Suche, Bubble Sort) ==&lt;br /&gt;
&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste steckt. Das funktioniert ganz einfach: Du gehst die Liste von vorne bis hinten durch und vergleichst jedes Element mit dem Wert, den du suchst. Passt es? Super, dann bist du fertig! Wenn nicht, schaust du einfach weiter, bis du am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
gesucht = 42 &lt;br /&gt;
liste = [17, 23, 42, 5, 8] &lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Die Zahl ist nicht in der Liste.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Sortieren gibt es verschiedene Algorithmen. Ein ganz einfacher ist der Bubble Sort. Dabei vergleichst du immer benachbarte Werte in der Liste und vertauschst sie, wenn sie in der falschen Reihenfolge stehen. Das machst du so lange, bis keine Werte mehr vertauscht werden müssen – dann ist die Liste sortiert.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
liste = [4, 2, 7, 1, 9] &lt;br /&gt;
n = len(liste)&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    for j in range(0, n - i - 1):&lt;br /&gt;
        if liste[j] &amp;gt; liste[j + 1]:&lt;br /&gt;
            liste[j], liste[j + 1] = liste[j + 1], liste[j]&lt;br /&gt;
&lt;br /&gt;
print(liste) # Ausgabe: [1, 2, 4, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Algorithmen helfen dir, Daten zu durchsuchen oder zu ordnen – egal, ob es um Zahlen, Wörter oder andere Werte geht. Gerade in Python kannst du viele dieser Dinge mit wenigen Zeilen Code ausprobieren und bekommst so schnell ein Gefühl dafür, wie Programme im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Rekursion ==&lt;br /&gt;
&lt;br /&gt;
Rekursion bedeutet, dass sich eine Funktion in ihrem eigenen Körper selbst aufruft. Das klingt vielleicht erst mal kompliziert, ist aber eigentlich ein elegantes Werkzeug, um Probleme zu lösen, die sich in kleinere Teilprobleme zerlegen lassen.&lt;br /&gt;
Ein klassisches Beispiel ist die Berechnung der Fakultät einer Zahl. Schauen wir uns das mal in Python an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
def fakultaet(n): &lt;br /&gt;
    if n == 0: &lt;br /&gt;
        return 1 &lt;br /&gt;
    else: &lt;br /&gt;
        return n * fakultaet(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(fakultaet(5)) # Ausgabe: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ruft sich die Funktion &amp;lt;code&amp;gt;fakultaet&amp;lt;/code&amp;gt; immer wieder selbst auf, bis die Bedingung &amp;lt;code&amp;gt;n == 0&amp;lt;/code&amp;gt; erfüllt ist. Das nennt man auch die Abbruchbedingung – sie verhindert, dass die Funktion endlos weiterläuft.&lt;br /&gt;
Rekursive Funktionen können viele Aufgaben lösen, zum Beispiel das Durchlaufen von Verzeichnissen, das Berechnen von Zahlenfolgen oder das Lösen von Rätseln wie dem berühmten Türme-von-Hanoi-Problem.&lt;br /&gt;
Wichtig ist bei der Rekursion immer, dass es eine klare Abbruchbedingung gibt, damit das Programm nicht in einer Endlosschleife festhängt. In Python sind rekursive Lösungen oft sehr kompakt und anschaulich, aber bei sehr tiefen Rekursionen kann der Speicher knapp werden. Deshalb sollte man Rekursion immer mit Bedacht wählen und überlegen, ob auch eine Schleife zum Ziel führt.&lt;br /&gt;
&lt;br /&gt;
== Komplexität (Big-O-Notation – optional, je nach Niveau) ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Programme schreibst, möchtest du oft wissen, wie schnell oder wie viel Speicher sie brauchen – besonders, wenn sie mit grossen Datenmengen arbeiten. Dafür gibt es die sogenannte „Big-O-Notation“. Sie hilft, grob einzuschätzen, wie sich die Laufzeit oder der Speicherverbrauch eines Programms verhält, wenn die Eingabe immer grösser wird.&lt;br /&gt;
Stell dir vor, du hast eine Liste von 100 Zahlen und möchtest jede Zahl einmal anschauen. In Python machst du das mit einer Schleife:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
for zahl in liste: &lt;br /&gt;
    print(zahl) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier läuft das Programm 100-mal – bei 1.000 Zahlen läuft es 1.000-mal. Wir sagen dann: Das hat eine Komplexität von O(n). Das „n“ steht für die Anzahl der Elemente. Je mehr Elemente, desto länger dauert’s.&lt;br /&gt;
Bei rekursiven Funktionen wie der Fakultät von oben ist die Komplexität O(n), weil für jede Zahl bis 0 ein eigener Funktionsaufruf gemacht wird.&lt;br /&gt;
Es gibt aber auch schnellere und langsamere Algorithmen, zum Beispiel:&lt;br /&gt;
* O(1): Dauert immer gleich lang, egal wie gross die Eingabe ist (z.B. Zugriff auf ein einzelnes Element in einer Liste: &amp;lt;code&amp;gt;liste[0]&amp;lt;/code&amp;gt;).&lt;br /&gt;
* O(n): Die Laufzeit wächst linear mit der Eingabemenge (z.B. durch eine Liste laufen).&lt;br /&gt;
* O(n²): Für jede Zahl wird noch einmal die ganze Liste durchlaufen, wie bei einer verschachtelten Schleife (Doppelschleife).&lt;br /&gt;
* O(log n): Eine Suche, die immer die Hälfte ausschliesst (z.B. binäre Suche), ist viel schneller als das Durchgehen aller Elemente.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir das, bessere und schnellere Programme zu schreiben. Du musst die Big-O-Notation nicht auswendig können, aber wenn du ein grundlegendes Verständnis davon hast, erkennst du, warum manche Lösungen bei kleinen Datenmengen gut und bei grossen langsam werden. In Python kannst du oft mit eingebauten Funktionen und cleveren Datenstrukturen schon viel erreichen.&lt;br /&gt;
&lt;br /&gt;
== Multiple-Choice-Fragen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was beschreibt die Big-O-Notation hauptsächlich?&#039;&#039;&#039;&lt;br /&gt;
** a) Die Lesbarkeit des Codes&lt;br /&gt;
** b) Die Anzahl der Variablen im Programm&lt;br /&gt;
** c) Das Speicherformat einer Datei&lt;br /&gt;
** d) Die Laufzeit oder den Ressourcenverbrauch eines Algorithmus in Abhängigkeit von der Eingabemenge&lt;br /&gt;
&#039;&#039;&#039;Welche Laufzeit hat ein Algorithmus mit O(n²)?&#039;&#039;&#039;&lt;br /&gt;
** a) Die Laufzeit bleibt immer gleich, egal wie viele Elemente&lt;br /&gt;
** b) Die Laufzeit wächst exponentiell bei mehr Elementen&lt;br /&gt;
** c) Für jedes Element wird die komplette Liste erneut durchlaufen&lt;br /&gt;
** d) Die Laufzeit halbiert sich bei doppelter Eingabegröße&lt;br /&gt;
&#039;&#039;&#039;Was ist der Hauptvorteil von Versionsverwaltungssystemen wie Git?&#039;&#039;&#039;&lt;br /&gt;
** a) Sie machen den Code schneller&lt;br /&gt;
** b) Änderungen am Code können nachverfolgt und ältere Versionen wiederhergestellt werden&lt;br /&gt;
** c) Sie übersetzen den Code in Maschinensprache&lt;br /&gt;
** d) Sie formatieren automatisch den Quelltext&lt;br /&gt;
&#039;&#039;&#039;Wie dokumentierst du in Python längere Erklärungen zu Funktionen am besten?&#039;&#039;&#039;&lt;br /&gt;
** a) Mit einfachen Anführungszeichen&lt;br /&gt;
** b) Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind&lt;br /&gt;
** c) Mit eckigen Klammern&lt;br /&gt;
** d) Mit dem Zeichen %&lt;br /&gt;
&#039;&#039;&#039;Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&#039;&#039;&#039;&lt;br /&gt;
** a) Jeder arbeitet im selben Branch und überschreibt Änderungen anderer&lt;br /&gt;
** b) Änderungen werden per E-Mail verschickt&lt;br /&gt;
** c) Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt&lt;br /&gt;
** d) Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147917</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147917"/>
		<updated>2026-01-09T18:58:43Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche der folgenden Fehlerarten tritt auf, wenn ein Programm zwar startet, aber während der Ausführung auf ein Problem stößt?&lt;br /&gt;
(!Syntaxfehler)&lt;br /&gt;
(Laufzeitfehler)&lt;br /&gt;
(!Logischer Fehler)&lt;br /&gt;
(!Tippfehler)&lt;br /&gt;
&lt;br /&gt;
Was ist ein Vorteil von Modulen in Python?&lt;br /&gt;
(!Sie machen Programme langsamer)&lt;br /&gt;
(Sie erlauben es, Funktionen und Code übersichtlich zu strukturieren und wiederzuverwenden)&lt;br /&gt;
(!Sie verhindern Fehler vollständig)&lt;br /&gt;
(!Sie ersetzen die Notwendigkeit von Datenstrukturen)&lt;br /&gt;
&lt;br /&gt;
Welcher Befehl wird empfohlen, um beim Debugging den Programmverlauf zu überprüfen?&lt;br /&gt;
(!input)&lt;br /&gt;
(print)&lt;br /&gt;
(!exit)&lt;br /&gt;
(!import)&lt;br /&gt;
&lt;br /&gt;
Was unterscheidet ein Tupel von einer Liste in Python?&lt;br /&gt;
(!Tupel können nach dem Erstellen verändert werden, Listen nicht)&lt;br /&gt;
(!Listen sind unveränderlich, Tupel nicht)&lt;br /&gt;
(Tupel sind unveränderlich, Listen nicht)&lt;br /&gt;
(!Es gibt keinen Unterschied)&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert die lineare Suche?&lt;br /&gt;
(!Die Liste wird nach Größe sortiert)&lt;br /&gt;
(Alle Elemente werden von vorne bis hinten durchgegangen und mit dem gesuchten Wert verglichen)&lt;br /&gt;
(!Die Suche wird mithilfe eines Wörterbuchs durchgeführt)&lt;br /&gt;
(!Die Elemente werden zufällig überprüft)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147916</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147916"/>
		<updated>2026-01-09T18:56:43Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
Welche der folgenden Fehlerarten tritt auf, wenn ein Programm zwar startet, aber während der Ausführung auf ein Problem stößt?&lt;br /&gt;
&lt;br /&gt;
(!Syntaxfehler)&lt;br /&gt;
(Laufzeitfehler)&lt;br /&gt;
(!Logischer Fehler)&lt;br /&gt;
(!Tippfehler)&lt;br /&gt;
&lt;br /&gt;
Was ist ein Vorteil von Modulen in Python?&lt;br /&gt;
&lt;br /&gt;
(!Sie machen Programme langsamer)&lt;br /&gt;
(Sie erlauben es, Funktionen und Code übersichtlich zu strukturieren und wiederzuverwenden)&lt;br /&gt;
(!Sie verhindern Fehler vollständig)&lt;br /&gt;
(!Sie ersetzen die Notwendigkeit von Datenstrukturen)&lt;br /&gt;
&lt;br /&gt;
Welcher Befehl wird empfohlen, um beim Debugging den Programmverlauf zu überprüfen?&lt;br /&gt;
&lt;br /&gt;
(!input)&lt;br /&gt;
(print)&lt;br /&gt;
(!exit)&lt;br /&gt;
(!import)&lt;br /&gt;
&lt;br /&gt;
Was unterscheidet ein Tupel von einer Liste in Python?&lt;br /&gt;
&lt;br /&gt;
(!Tupel können nach dem Erstellen verändert werden, Listen nicht)&lt;br /&gt;
(!Listen sind unveränderlich, Tupel nicht)&lt;br /&gt;
(Tupel sind unveränderlich, Listen nicht)&lt;br /&gt;
(!Es gibt keinen Unterschied)&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert die lineare Suche?&lt;br /&gt;
&lt;br /&gt;
(!Die Liste wird nach Größe sortiert)&lt;br /&gt;
(Alle Elemente werden von vorne bis hinten durchgegangen und mit dem gesuchten Wert verglichen)&lt;br /&gt;
(!Die Suche wird mithilfe eines Wörterbuchs durchgeführt)&lt;br /&gt;
(!Die Elemente werden zufällig überprüft)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147915</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147915"/>
		<updated>2026-01-09T18:49:38Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Quiz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
Welche der folgenden Fehlerarten tritt auf, wenn ein Programm zwar startet, aber &lt;br /&gt;
&lt;br /&gt;
während der Ausführung auf ein Problem stößt?&lt;br /&gt;
&lt;br /&gt;
o A) Syntaxfehler&lt;br /&gt;
&lt;br /&gt;
o B) Laufzeitfehler&lt;br /&gt;
&lt;br /&gt;
o C) Logischer Fehler&lt;br /&gt;
&lt;br /&gt;
o D) Tippfehler&lt;br /&gt;
&lt;br /&gt;
• Was ist ein Vorteil von Modulen in Python?&lt;br /&gt;
&lt;br /&gt;
o Sie machen Programme langsamer&lt;br /&gt;
&lt;br /&gt;
o Sie erlauben es, Funktionen und Code übersichtlich zu strukturieren und &lt;br /&gt;
&lt;br /&gt;
wiederzuverwenden&lt;br /&gt;
&lt;br /&gt;
o Sie verhindern Fehler vollständig&lt;br /&gt;
&lt;br /&gt;
o Sie ersetzen die Notwendigkeit von Datenstrukturen&lt;br /&gt;
&lt;br /&gt;
• Welcher Befehl wird empfohlen, um beim Debugging den Programmverlauf zu &lt;br /&gt;
&lt;br /&gt;
überprüfen?&lt;br /&gt;
&lt;br /&gt;
o input()&lt;br /&gt;
&lt;br /&gt;
o print()&lt;br /&gt;
&lt;br /&gt;
o exit()&lt;br /&gt;
&lt;br /&gt;
o import()&lt;br /&gt;
&lt;br /&gt;
• Was unterscheidet ein Tupel von einer Liste in Python?&lt;br /&gt;
&lt;br /&gt;
o Tupel können nach dem Erstellen verändert werden, Listen nicht&lt;br /&gt;
&lt;br /&gt;
o Listen sind unveränderlich, Tupel nicht&lt;br /&gt;
&lt;br /&gt;
o Tupel sind unveränderlich, Listen nicht&lt;br /&gt;
&lt;br /&gt;
o Es gibt keinen Unterschied&lt;br /&gt;
&lt;br /&gt;
• Wie funktioniert die lineare Suche?&lt;br /&gt;
&lt;br /&gt;
o Die Liste wird nach Größe sortiert&lt;br /&gt;
&lt;br /&gt;
o Alle Elemente werden von vorne bis hinten durchgegangen und mit dem &lt;br /&gt;
&lt;br /&gt;
gesuchten Wert verglichen&lt;br /&gt;
&lt;br /&gt;
o Die Suche wird mithilfe eines Wörterbuchs durchgeführt&lt;br /&gt;
&lt;br /&gt;
o Die Elemente werden zufällig überprüf&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147914</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147914"/>
		<updated>2026-01-09T18:40:36Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen]]&lt;br /&gt;
&lt;br /&gt;
* Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/&lt;br /&gt;
* Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
* [[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147902</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen_und_einfache_Algorithmen&amp;diff=147902"/>
		<updated>2026-01-08T11:32:22Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Rohfassung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Datenstrukturen und einfache Algorithmen=&lt;br /&gt;
==Arrays/Listen, Tupel, Dictionaries==&lt;br /&gt;
Listen (in Python auch Arrays genannt), Tupel und Dictionaries sind wichtige Datenstrukturen, mit denen du mehrere Werte gleichzeitig speichern und verarbeiten kannst.&lt;br /&gt;
&lt;br /&gt;
Listen sind besonders flexibel. Du kannst Werte hinzufügen, entfernen oder ändern. Sie eignen sich gut, wenn sich die Anzahl der gespeicherten Elemente verändern kann.&lt;br /&gt;
&lt;br /&gt;
Tupel ähneln Listen, sind aber unveränderlich. Das bedeutet, dass ihre Inhalte nach dem Erstellen nicht mehr geändert werden können. Sie werden oft genutzt, wenn Daten zusammengehören und unverändert bleiben sollen.&lt;br /&gt;
&lt;br /&gt;
Dictionaries bestehen aus sogenannten Schlüssel-Wert-Paaren. Jedem Schlüssel ist genau ein Wert zugeordnet. Das ist besonders praktisch, wenn du Informationen schnell über einen Namen oder eine Bezeichnung abrufen möchtest.&lt;br /&gt;
&lt;br /&gt;
So kannst du blitzschnell nachschauen, was zu welchem Schlüssel gehört.&lt;br /&gt;
&lt;br /&gt;
Wenn du mit diesen Daten arbeitest, brauchst du manchmal einfache Algorithmen, um sie zu durchsuchen oder zu sortieren – und in Python kannst du sie mit ein paar Zeilen Code ausprobieren!&lt;br /&gt;
==Suchen und Sortieren (lineare Suche, Bubble Sort)==&lt;br /&gt;
Suchen und Sortieren sind grundlegende Techniken, die dir im Programmieren immer wieder begegnen – gerade auch in Python.&lt;br /&gt;
&lt;br /&gt;
Die lineare Suche nutzt du, wenn du herausfinden willst, ob ein bestimmter Wert in einer Liste enthalten ist. Dabei gehst du die Liste Element für Element durch, bis du den gesuchten Wert findest oder am Ende angekommen bist.&lt;br /&gt;
&lt;br /&gt;
In Python sieht das zum Beispiel so aus:&amp;lt;syntaxhighlight python=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
gesucht = 42&lt;br /&gt;
liste = [17, 23, 42, 5, 8]&lt;br /&gt;
gefunden = False&lt;br /&gt;
&lt;br /&gt;
for zahl in liste:&lt;br /&gt;
    if zahl == gesucht:&lt;br /&gt;
        gefunden = True&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
if gefunden:&lt;br /&gt;
    print(&amp;quot;Die Zahl wurde gefunden!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Auch Sortierverfahren spielen eine wichtige Rolle. Ein bekanntes, aber eher einfaches Sortierverfahren ist der sogenannte Bubble Sort.&lt;br /&gt;
&lt;br /&gt;
Dabei werden benachbarte Elemente miteinander verglichen und vertauscht, wenn sie in der falschen Reihenfolge stehen. Dieser Vorgang wird so lange wiederholt, bis die Liste vollständig sortiert ist.&lt;br /&gt;
&lt;br /&gt;
Auch wenn Bubble Sort nicht besonders effizient ist, eignet er sich gut, um das Grundprinzip des Sortierens zu verstehen.&lt;br /&gt;
&lt;br /&gt;
In der Praxis hilft dir dieses Wissen, bessere und schnellere Programme zu schreiben, denn viele Probleme lassen sich mit den richtigen Algorithmen und cleveren Datenstrukturen schon viel einfacher lösen.&lt;br /&gt;
==Wiederholungs- und Übungsfragen==&lt;br /&gt;
b) Mit Docstrings, die durch dreifache Anführungszeichen gekennzeichnet sind  c) Mit eckigen Klammern  d) Mit dem Zeichen %&lt;br /&gt;
&lt;br /&gt;
Was beschreibt ein typischer Workflow bei der Arbeit mit Git in einem Team?&lt;br /&gt;
&lt;br /&gt;
a) Jeder arbeitet im selben Branch und überschreibt Änderungen anderer  b) Änderungen werden per E-Mail verschickt  c) Änderungen werden in einem eigenen Branch vorgenommen und später mit dem Hauptzweig zusammengeführt  d) Alle machen ihre Änderungen direkt im Hauptzweig, ohne Absprachen&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147901</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147901"/>
		<updated>2026-01-08T11:31:12Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: weiteres Kapitel ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Datenstrukturen und einfache Algorithmen]]&lt;br /&gt;
Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/&lt;br /&gt;
Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147900</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147900"/>
		<updated>2026-01-08T11:15:28Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: initiale Fassung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147899</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen&amp;diff=147899"/>
		<updated>2026-01-08T11:10:08Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Rohfassung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmiergrundlagen =&lt;br /&gt;
&lt;br /&gt;
== Datentypen und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Wenn du mit dem Programmieren startest, begegnen dir viele neue Begriffe. Aber keine Sorge: Mit ein paar Grundlagen und der Programmiersprache Python schaffst du den Einstieg ganz leicht!&lt;br /&gt;
&lt;br /&gt;
In Python ist alles darauf ausgelegt, möglichst einfach und verständlich zu sein. Das beginnt schon bei den sogenannten Datentypen.&lt;br /&gt;
&lt;br /&gt;
Ein Datentyp beschreibt, welche Art von Wert eine Variable annehmen kann – zum Beispiel Zahlen (wie 7 oder 3.14), Text (also Zeichenketten wie &amp;quot;Hallo Welt&amp;quot;) oder Wahrheitswerte (True oder False).&lt;br /&gt;
&lt;br /&gt;
Variablen wiederum sind wie kleine Behälter, in denen du solche Werte abspeichern kannst.&lt;br /&gt;
&lt;br /&gt;
In Python musst du übrigens nicht vorher angeben, welchen Typ eine Variable hat. Du schreibst einfach:&lt;br /&gt;
&lt;br /&gt;
x = 5&lt;br /&gt;
&lt;br /&gt;
name = &amp;quot;Anna&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ist_alt_genug = True&lt;br /&gt;
&lt;br /&gt;
Du siehst: Das geht ganz unkompliziert!&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren arbeitest du häufig mit sogenannten Operatoren, um Werte zu berechnen oder miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kannst du mit +, -, * und / rechnen oder mit == prüfen, ob zwei Werte gleich sind.&lt;br /&gt;
&lt;br /&gt;
Auch das funktioniert in Python sehr intuitiv – probiere es einfach in einem sogenannten Python-Interpreter aus, um direkt zu sehen, was passiert.&lt;br /&gt;
&lt;br /&gt;
Ein- und Ausgaben erlauben es dir, mit dem Programm zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Eingaben vom Benutzer abfragen, und mit print() gibst du etwas auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo,&amp;quot;, name)&lt;br /&gt;
&lt;br /&gt;
So einfach kannst du ein kleines, interaktives Programm schreiben!&lt;br /&gt;
&lt;br /&gt;
Jetzt hast du die wichtigsten Grundlagen kennengelernt.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Abschnitt lernst du, wie man mit Operatoren arbeitet, Eingaben und Ausgaben programmiert und wie Kontrollstrukturen in Python konkret aussehen.&lt;br /&gt;
&lt;br /&gt;
So kannst du schon bald eigene Programme schreiben und nach und nach deine Kenntnisse erweitern!&lt;br /&gt;
&lt;br /&gt;
== Operatoren und Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Wenn du in Python programmierst, begegnen dir ständig sogenannte Operatoren und Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
Doch was bedeutet das eigentlich?&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck ist im Grunde alles, was einen Wert erzeugt, zum Beispiel eine einfache Rechnung wie 3 + 5 oder das Vergleichen von zwei Zahlen, etwa 10 &amp;gt; 7.&lt;br /&gt;
&lt;br /&gt;
Du kombinierst also Werte (wie Zahlen oder Variablen) mit Operatoren, damit das Programm etwas berechnen oder überprüfen kann.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Operatoren sind:&lt;br /&gt;
&lt;br /&gt;
=== Rechenoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Mit + addierst du, mit - subtrahierst du, * steht für multiplizieren und / zum Teilen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
ergebnis = 7 * 4&lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Damit prüfst du, ob zwei Werte gleich oder unterschiedlich sind.&lt;br /&gt;
&lt;br /&gt;
== bedeutet „ist gleich“, != „ist ungleich“.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
if alter == 18:&lt;br /&gt;
&lt;br /&gt;
=== Größer und kleiner ===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;gt;= und &amp;lt;= vergleichst du, ob Werte größer oder kleiner (oder gleich groß) sind.&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
&lt;br /&gt;
and, or und not helfen dir, mehrere Bedingungen zu verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
if ist_alt_genug and name == &amp;quot;Anna&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Mit diesen Operatoren kannst du schon viele Aufgaben lösen: vom Berechnen von Preisen über das Prüfen von Passwörtern bis zum Auswerten von Quizfragen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist vor allem, dass du verstehst, wie du Werte miteinander vergleichen oder berechnen kannst – das ist die Grundlage für viele Programme.&lt;br /&gt;
&lt;br /&gt;
Im nächsten Kapitel schaust du dir an, wie man Daten einliest und ausgibt und welche Kontrollstrukturen Python für dich bereithält.&lt;br /&gt;
&lt;br /&gt;
== Ein- und Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Um mit einem Programm zu „kommunizieren“, also Eingaben (Input) zu verarbeiten und Ausgaben (Output) anzuzeigen, stellt dir Python einfache, aber sehr mächtige Werkzeuge zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Am häufigsten nutzt du dafür die Funktionen input() und print().&lt;br /&gt;
&lt;br /&gt;
Mit input() kannst du Benutzerinnen und Benutzer nach Informationen fragen.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
name = input(&amp;quot;Wie heißt du? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Das Programm wartet dann, bis jemand etwas eingibt, und speichert diese Eingabe in der Variable name.&lt;br /&gt;
&lt;br /&gt;
Mit print() gibst du Werte, Texte, Rechenergebnisse oder ganze Nachrichten auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Hallo, &amp;quot; + name)&lt;br /&gt;
&lt;br /&gt;
Du kannst input() und print() beliebig kombinieren, um Programme interaktiv zu gestalten – etwa für kleine Frage-Antwort-Spiele, die Abfrage von Zahlen für Berechnungen oder das Anzeigen von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Typisch für Python ist, dass diese Befehle sehr leicht zu verstehen sind und wenig Zusatzaufwand benötigen.&lt;br /&gt;
&lt;br /&gt;
Selbst komplexere Aufgaben wie das Formatieren von Ausgaben kannst du mit wenigen Handgriffen erledigen, zum Beispiel mit:&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;Du bist {alter} Jahre alt.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
wobei alter eine Variable ist.&lt;br /&gt;
&lt;br /&gt;
Mit Input- und Output-Funktionen legst du den Grundstein dafür, dass deine Programme nicht nur rechnen, sondern auch mit den Menschen am Computer direkt zusammenarbeiten können.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen (if, while, for) ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen sind das Herzstück jeder Programmiersprache – auch bei Python.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir dabei, den Ablauf deines Programms zu steuern, also beispielsweise Entscheidungen zu treffen oder bestimmte Anweisungen mehrfach auszuführen.&lt;br /&gt;
&lt;br /&gt;
Mit einer if-Anweisung kannst du Bedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
Das Programm entscheidet dann, was passieren soll – je nachdem, ob eine bestimmte Aussage wahr oder falsch ist.&lt;br /&gt;
&lt;br /&gt;
So kannst du zum Beispiel festlegen, dass eine Nachricht nur dann ausgegeben wird, wenn eine Zahl größer als 10 ist.&lt;br /&gt;
&lt;br /&gt;
Die while-Schleife hilft dir, Anweisungen so lange zu wiederholen, bis eine bestimmte Bedingung nicht mehr erfüllt ist.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel wäre, dass ein Programm so lange nach dem Passwort fragt, bis das richtige eingegeben wurde.&lt;br /&gt;
&lt;br /&gt;
Mit der for-Schleife kannst du eine Aufgabe für jedes Element in einer Liste oder für eine bestimmte Anzahl an Wiederholungen automatisch abarbeiten lassen.&lt;br /&gt;
&lt;br /&gt;
Das brauchst du zum Beispiel, um alle Namen aus einer Liste zu begrüßen oder Zahlen von 1 bis 10 nacheinander auszugeben.&lt;br /&gt;
&lt;br /&gt;
Auch wenn das im ersten Moment kompliziert klingt: In Python sind diese Strukturen besonders leicht verständlich und übersichtlich geschrieben.&lt;br /&gt;
&lt;br /&gt;
Dadurch kannst du schon mit wenig Code sehr mächtige Abläufe gestalten – und deine Programme erledigen genau das, was du willst!&lt;br /&gt;
&lt;br /&gt;
== Funktionen und Modularisierung ==&lt;br /&gt;
&lt;br /&gt;
Funktionen sind Abschnitte deines Programms, denen du einen eigenen Namen gibst.&lt;br /&gt;
&lt;br /&gt;
Sie helfen dir, deinen Code übersichtlich zu halten und wiederzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Stell dir eine Funktion wie eine kleine Maschine vor: Du gibst ihr etwas (Argumente), sie erledigt eine bestimmte Aufgabe und gibt dir das Ergebnis zurück.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
def begruessung(name):&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Hallo, {name}!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Wenn du begruessung(&amp;quot;Alex&amp;quot;) aufrufst, erscheint „Hallo, Alex!“ auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
So kannst du oft gebrauchte Abläufe – wie Rechnungen, Begrüßungen oder Prüfungen – einmal als Funktion schreiben und dann beliebig oft im Programm nutzen.&lt;br /&gt;
&lt;br /&gt;
Gerade bei längeren Programmen wird Modularisierung wichtig.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass du deinen Code in einzelne Bausteine aufteilst, zum Beispiel durch mehrere Funktionen oder sogar eigene Dateien (Module).&lt;br /&gt;
&lt;br /&gt;
Dadurch wird dein Programm nicht nur lesbarer, sondern auch leichter zu testen und zu erweitern.&lt;br /&gt;
&lt;br /&gt;
Du kannst zum Beispiel eine Datei für Mathefunktionen und eine andere für Benutzereingaben anlegen.&lt;br /&gt;
&lt;br /&gt;
In Python ist das besonders einfach.&lt;br /&gt;
&lt;br /&gt;
Du kannst eigene Module schreiben und mit import in anderen Programmen verwenden.&lt;br /&gt;
&lt;br /&gt;
Auch viele nützliche Module wie math oder random sind schon in Python eingebaut.&lt;br /&gt;
&lt;br /&gt;
Mit import math kannst du zum Beispiel mathematische Funktionen direkt nutzen.&lt;br /&gt;
&lt;br /&gt;
Mit Funktionen und Modularisierung bist du bestens gerüstet, um auch größere Projekte übersichtlich und clever zu strukturieren – ganz nach dem Motto: Teile und herrsche!&lt;br /&gt;
&lt;br /&gt;
== Fehlerarten und Debugging ==&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in Python wirst du früher oder später auf Fehler stoßen – das ist ganz normal und gehört zum Lernprozess!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, die verschiedenen Arten von Fehlern zu kennen, damit du sie schnell beheben kannst.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Hauptarten von Fehlern:&lt;br /&gt;
&lt;br /&gt;
=== Syntaxfehler ===&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht vertippt oder etwas vergessen, zum Beispiel eine Klammer oder einen Doppelpunkt.&lt;br /&gt;
&lt;br /&gt;
Python versteht dann nicht, was du gemeint hast, und zeigt eine Fehlermeldung direkt beim Ausführen an.&lt;br /&gt;
&lt;br /&gt;
=== Laufzeitfehler ===&lt;br /&gt;
&lt;br /&gt;
Diese entstehen, wenn dein Programm zwar fehlerfrei startet, aber während der Ausführung auf ein Problem stößt – zum Beispiel, wenn du versuchst, durch Null zu teilen oder auf ein Element in einer Liste zuzugreifen, das es gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
&lt;br /&gt;
Dein Programm läuft zwar ohne eine Fehlermeldung, aber das Ergebnis ist nicht das, was du erwartet hast.&lt;br /&gt;
&lt;br /&gt;
Hier hast du dich vielleicht in einer Rechnung vertan oder die falsche Bedingung verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Fehlerart nennt man auch semantische Fehler.&lt;br /&gt;
&lt;br /&gt;
Um Fehler zu finden und zu beheben, spricht man von Debugging.&lt;br /&gt;
&lt;br /&gt;
In Python kannst du dafür Ausgaben mit print() einbauen, um zu sehen, was im Programm passiert.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wird es mit einem Debugger, der in vielen Entwicklungsumgebungen eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
Damit kannst du das Programm Schritt für Schritt durchgehen, Variablen beobachten und gezielt nach Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Ein Tipp: Lass dich von Fehlern nicht entmutigen!&lt;br /&gt;
&lt;br /&gt;
Fehler sind beim Programmieren ganz normal und helfen dir dabei, ein besseres Verständnis für die Funktionsweise von Python zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Mit etwas Übung werden dir die Fehlermeldungen immer vertrauter, und du bist schneller im Finden und Beheben von Problemen.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147898</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147898"/>
		<updated>2026-01-08T10:53:18Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoice-Fragen:&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147897</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147897"/>
		<updated>2026-01-08T10:52:46Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
Unterlagen zum Selbststudium nebst Lernkontrolle anhand von MultipleChoiceßFragen:&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147896</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147896"/>
		<updated>2026-01-07T20:36:03Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
&lt;br /&gt;
MD5 in Python:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klartext_passwort = &amp;quot;MeinSicheresPW!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klartext_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung während des Speicherns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
;Lernziel&lt;br /&gt;
:Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147895</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147895"/>
		<updated>2026-01-07T20:24:32Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
&lt;br /&gt;
MD5 in Python&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147894</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147894"/>
		<updated>2026-01-07T20:21:11Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def teil1_neuer_(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{code|lang=python|import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
MD5 in Python&lt;br /&gt;
{{code|lang=python|import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
 &lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{code|lang=python|def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147893</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147893"/>
		<updated>2026-01-07T20:17:39Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
def teil1_neuer_(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{code|lang=python|import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
MD5 in Python&lt;br /&gt;
{{code|lang=python|import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
 &lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{code|lang=python|def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147892</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147892"/>
		<updated>2026-01-07T20:12:15Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{code|lang=python|def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{code|lang=python|import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
MD5 in Python&lt;br /&gt;
{{code|lang=python|import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
 &lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{code|lang=python|def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147891</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147891"/>
		<updated>2026-01-07T20:07:53Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:=&lt;br /&gt;
=Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{{def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
}}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
&lt;br /&gt;
{{{import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
MD5 in Python&lt;br /&gt;
{{{import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
 &lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{{def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147890</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Python/%C3%9Cbungen/Passwortverwaltung&amp;diff=147890"/>
		<updated>2026-01-07T20:06:20Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: initiale Fassung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Python-Übungsaufgabe:&lt;br /&gt;
Verwaltung von Benutzernamen und Passwörtern=&lt;br /&gt;
&lt;br /&gt;
==Teil 1: Manuelle Eingabe und Dateispeicherung==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler lernen, wie man Benutzernamen und Passwörter per Konsole abfragt, in einer Datei speichert und grundlegende Dateizugriffe in Python nutzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Hinweise zu Dateizugriffen&lt;br /&gt;
* Beim Lesen/Schreiben von Dateien sollte stets ein Context Manager (with open(...) as f:) verwendet werden.&lt;br /&gt;
* Verwende den Modus &amp;quot;a&amp;quot; (append) zum Hinzufügen neuer Einträge, ohne vorhandene zu überschreiben.&lt;br /&gt;
* Achte auf Zeichencodierung (z. B. encoding=&amp;quot;utf-8&amp;quot;), um Umlaute oder Sonderzeichen korrekt abzulegen.&lt;br /&gt;
* Sensible Daten niemals in öffentlich einsehbaren Dateien ablegen.&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{{def teil1_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    passwort = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{passwort}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:&lt;br /&gt;
        file.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Eintrag gespeichert.&amp;quot;)&lt;br /&gt;
}}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 2: Passwortregeln prüfen==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler implementieren eine Funktion, die Passwörter gegen aktuelle Sicherheitsstandards validiert.&lt;br /&gt;
&lt;br /&gt;
Vorgeschlagene Regeln&lt;br /&gt;
* Mindestens 12 Zeichen Länge&lt;br /&gt;
* Mindestens ein Großbuchstabe&lt;br /&gt;
* Mindestens ein Kleinbuchstabe&lt;br /&gt;
* Mindestens eine Ziffer&lt;br /&gt;
* Mindestens ein Sonderzeichen (!@#$%^&amp;amp;*()_+-=[]{};:,.&amp;lt;&amp;gt;/?)&lt;br /&gt;
* Keine Leerzeichen&lt;br /&gt;
* Keine Wiederholungen (z. B. “aaa”, “111”)&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{{import re&lt;br /&gt;
&lt;br /&gt;
def pruefe_passwort(pw):&lt;br /&gt;
    if len(pw) &amp;lt; 12:&lt;br /&gt;
        return False, &amp;quot;Passwort zu kurz (mind. 12 Zeichen).&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[A-Z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Großbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[a-z]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Kleinbuchstabe fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[0-9]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens eine Ziffer fehlt.&amp;quot;&lt;br /&gt;
    if not re.search(r&amp;quot;[!@#$%^&amp;amp;*()_+\-=\[\]{};:,.&amp;lt;&amp;gt;/?]&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Mindestens ein Sonderzeichen fehlt.&amp;quot;&lt;br /&gt;
    if &amp;quot; &amp;quot; in pw:&lt;br /&gt;
        return False, &amp;quot;Passwort darf keine Leerzeichen enthalten.&amp;quot;&lt;br /&gt;
    if re.search(r&amp;quot;(.)\1\1&amp;quot;, pw):&lt;br /&gt;
        return False, &amp;quot;Drei gleiche Zeichen hintereinander sind nicht erlaubt.&amp;quot;&lt;br /&gt;
    return True, &amp;quot;Passwort erfüllt alle Regeln.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# Integrierte Nutzung im Hauptprogramm&lt;br /&gt;
pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
ok, meldung = pruefe_passwort(pw)&lt;br /&gt;
print(meldung)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 3: Hash-Verfahren und MD5==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler verstehen, was Hash-Funktionen sind und wie man MD5 in Python anwendet.&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu Hash-Verfahren&lt;br /&gt;
* Hash-Funktionen wandeln Eingaben beliebiger Länge in eine fixe Bitfolge um.&lt;br /&gt;
* Sie sind Einbahn: aus dem Hash kann man normalerweise nicht das Originalpasswort rekonstruieren.&lt;br /&gt;
* Kollisionen (zwei Eingaben mit demselben Hash) sind unerwünscht, treten aber teilweise auf.&lt;br /&gt;
* Für echte Anwendungen werden heute stärkere Verfahren (z. B. SHA-256, bcrypt) empfohlen.&lt;br /&gt;
MD5 in Python&lt;br /&gt;
{{{import hashlib&lt;br /&gt;
def md5_hash(pw):&lt;br /&gt;
    hasher = hashlib.md5()&lt;br /&gt;
    hasher.update(pw.encode(&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    return hasher.hexdigest()&lt;br /&gt;
 &lt;br /&gt;
# Beispiel:&lt;br /&gt;
klare_passwort = &amp;quot;MeinSicheres!123&amp;quot;&lt;br /&gt;
hash_wert = md5_hash(klare_passwort)&lt;br /&gt;
print(&amp;quot;MD5-Hash:&amp;quot;, hash_wert)&lt;br /&gt;
Anwendung im Speichern&lt;br /&gt;
 &lt;br /&gt;
def teil3_neuer_eintrag(dateipfad):&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    pw = input(&amp;quot;Passwort wählen: &amp;quot;)&lt;br /&gt;
    hashed = md5_hash(pw)&lt;br /&gt;
    eintrag = f&amp;quot;{benutzer}:{hashed}\n&amp;quot;&lt;br /&gt;
    with open(dateipfad, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        f.write(eintrag)&lt;br /&gt;
    print(&amp;quot;Benutzer und Hash gespeichert.&amp;quot;)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Teil 4: Passwortprüfung bei bestehendem Benutzer==&lt;br /&gt;
Lernziel&lt;br /&gt;
Schüler erweitern ihr Programm um eine Login-Funktion: Eingabe von Benutzername und Passwort wird gegen die gespeicherten MD5-Hashes geprüft.&lt;br /&gt;
&lt;br /&gt;
Beispielcode&lt;br /&gt;
{{{def lade_passwortdatei(dateipfad):&lt;br /&gt;
    daten = {}&lt;br /&gt;
    with open(dateipfad, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
        for zeile in f:&lt;br /&gt;
            name, hashwert = zeile.strip().split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
            daten[name] = hashwert&lt;br /&gt;
    return daten&lt;br /&gt;
 &lt;br /&gt;
def login_pruefung(dateipfad):&lt;br /&gt;
    daten = lade_passwortdatei(dateipfad)&lt;br /&gt;
    benutzer = input(&amp;quot;Benutzername: &amp;quot;)&lt;br /&gt;
    if benutzer not in daten:&lt;br /&gt;
        print(&amp;quot;Benutzer nicht gefunden.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
 &lt;br /&gt;
    pw = input(&amp;quot;Passwort: &amp;quot;)&lt;br /&gt;
    if md5_hash(pw) == daten[benutzer]:&lt;br /&gt;
        print(&amp;quot;Login erfolgreich.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Falsches Passwort.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
# Beispielaufruf&lt;br /&gt;
login_pruefung(&amp;quot;passwoerter.txt&amp;quot;)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterführende Anregungen&lt;br /&gt;
* Salted Hashes einführen: Für jeden Benutzer einen zufälligen Salt vor dem Hashen nutzen.&lt;br /&gt;
* Bessere Algorithmen einsetzen: z. B. hashlib.sha256, bcrypt oder scrypt.&lt;br /&gt;
* Verwaltung in einer SQLite-Datenbank statt in einer Textdatei.&lt;br /&gt;
* Zwei-Faktor-Authentifizierung (2FA) simulieren.&lt;br /&gt;
* Passwort-Blacklist implementieren, um häufige Passwörter zu verbieten.&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147889</id>
		<title>Benutzer:Kwschneider</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider&amp;diff=147889"/>
		<updated>2026-01-07T19:57:50Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: Sektion Übungen mit Python ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe nach einer handwerklichen Ausbildung Ingenieurinformatik studiert. Neben meiner Arbeit als Ingenieur bin ich ehrenamtlich Prüfer für IT-Ausbildungsberufe bei der Industrie- und Handelskammer. Ich bin Dozent an einer technischen Hochschule und unterrichte seit Herbst 2025 als Lehrer an einer Berufsschule. Schwerpunkt sind hier Grundlagen der Softwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grundlagen der Softwareentwicklung=&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Einführung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung]]&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Programmiergrundlagen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Übungsbeispiele Python=&lt;br /&gt;
[[Benutzer:Kwschneider/Softwareentwicklung/Python/Übungen/Passwortverwaltung]]&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147888</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147888"/>
		<updated>2026-01-07T19:53:40Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Denkweisen und Konzepte der Programmierung =&lt;br /&gt;
&lt;br /&gt;
== Algorithmisches Denken und Problemlösungsstrategien ==&lt;br /&gt;
&lt;br /&gt;
Algorithmisches Denken bedeutet, ein Problem Schritt für Schritt zu lösen – ähnlich wie bei einer Bauanleitung oder einem Kochrezept.&lt;br /&gt;
&lt;br /&gt;
In der Programmierung überlegst du dir, wie du ein Ziel erreichen kannst, indem du einzelne, logisch aufeinanderfolgende Anweisungen formulierst.&lt;br /&gt;
&lt;br /&gt;
Ziel ist es, eine Lösung so klar zu beschreiben, dass ein Computer oder eine andere Person sie ganz genau nachvollziehen kann.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel: Stell dir vor, du möchtest ein Programm schreiben, das prüft, ob jemand volljährig ist.&lt;br /&gt;
&lt;br /&gt;
Du musst den Ablauf logisch planen. Zuerst fragst du nach dem Alter, dann vergleichst du es mit 18, und entscheidest, was ausgegeben werden soll – das ist schon algorithmisches Denken.&lt;br /&gt;
&lt;br /&gt;
Problemlösungsstrategien helfen dir dabei, auch komplexere Aufgaben zu meistern.&lt;br /&gt;
&lt;br /&gt;
Dazu gehört es, ein großes Problem in kleine Teilprobleme zu zerlegen, verschiedene Lösungswege abzuwägen und mögliche Fehlerquellen zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Häufig werden solche Schritte erst auf Papier geplant, bevor sie als Programm umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
So lernst du nach und nach, nicht nur Aufgaben zu lösen, sondern auch möglichst effiziente und fehlerfreie Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
Dieses Denken ist die Grundlage dafür, später eigene Programme zu schreiben und immer wieder neue Herausforderungen erfolgreich zu meistern.&lt;br /&gt;
&lt;br /&gt;
== Von der Idee zum Code: Problemanalyse und Lösungsentwurf ==&lt;br /&gt;
&lt;br /&gt;
Bevor du mit dem eigentlichen Programmieren startest, ist es wichtig, eine klare Vorstellung davon zu haben, was dein Programm eigentlich tun soll.&lt;br /&gt;
&lt;br /&gt;
Das beginnt mit der Problemanalyse.&lt;br /&gt;
&lt;br /&gt;
Du schaust dir genau an, welche Aufgabe gelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
Dafür kann es helfen, das Problem in kleinere, überschaubare Teile zu zerlegen.&lt;br /&gt;
&lt;br /&gt;
Du überlegst beispielsweise:&lt;br /&gt;
* Welche Informationen brauche ich?&lt;br /&gt;
* Welche Schritte müssen der Reihe nach abgearbeitet werden?&lt;br /&gt;
* Gibt es verschiedene Möglichkeiten, das Ziel zu erreichen?&lt;br /&gt;
&lt;br /&gt;
Sobald du das Problem verstanden hast, folgt der Lösungsentwurf.&lt;br /&gt;
&lt;br /&gt;
Dabei planst du, wie dein Programm grundsätzlich aufgebaut sein soll.&lt;br /&gt;
&lt;br /&gt;
Häufig nutzt man dafür einfache Hilfsmittel wie Flussdiagramme, die den Ablauf grafisch darstellen, oder Pseudocode, eine Art „Programmiersprache in Alltagssprache“.&lt;br /&gt;
&lt;br /&gt;
So kannst du ausprobieren und testen, ob deine Lösung logisch und vollständig ist, bevor du eine einzige Zeile Code schreibst.&lt;br /&gt;
&lt;br /&gt;
Dieser Planungsprozess hilft dir, Fehler frühzeitig zu erkennen und sorgt dafür, dass du später beim Programmieren gezielter und strukturierter arbeiten kannst.&lt;br /&gt;
&lt;br /&gt;
== Einführung in Flussdiagramme und Pseudocode ==&lt;br /&gt;
&lt;br /&gt;
Flussdiagramme und Pseudocode sind zwei praktische Werkzeuge, die dir beim Planen und Verstehen von Programmen helfen.&lt;br /&gt;
&lt;br /&gt;
Ein Flussdiagramm ist eine Art Zeichnung, mit der du den Ablauf eines Programms Schritt für Schritt darstellst.&lt;br /&gt;
&lt;br /&gt;
Du verwendest verschiedene Symbole:&lt;br /&gt;
* Ovale für den Start und das Ende&lt;br /&gt;
* Rechtecke für Anweisungen&lt;br /&gt;
* Rauten für Entscheidungen (zum Beispiel: „Ist die Zahl größer als 18?“)&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Schritte sind mit Pfeilen verbunden, so dass du leicht siehst, welcher Schritt als nächstes kommt.&lt;br /&gt;
&lt;br /&gt;
Das hilft dir, den Überblick zu behalten und logische Fehler früh zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Pseudocode dagegen ist wie eine Beschreibung des Programms in ganz normalen Worten, aber so aufgebaut, dass du daraus leicht richtigen Code machen kannst.&lt;br /&gt;
&lt;br /&gt;
Dabei schreibst du keine exakten Befehle einer Programmiersprache, sondern beschreibst die Abläufe so klar wie möglich – etwa so: „Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“&lt;br /&gt;
&lt;br /&gt;
Pseudocode hilft dir, den roten Faden zu behalten, ohne dich gleich mit der genauen Syntax von Python oder Java beschäftigen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Beides, Flussdiagramm und Pseudocode, sind besonders am Anfang nützlich, weil du damit deine Ideen durchdenken und strukturieren kannst, noch bevor du mit dem eigentlichen Programmieren loslegst.&lt;br /&gt;
&lt;br /&gt;
Damit bist du bestens vorbereitet auf die nächsten Themen, wie die verschiedenen Kontrollstrukturen in Programmen.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen: Sequenz, Verzweigung, Schleifen ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen bilden das Grundgerüst jeder Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie bestimmen, in welcher Reihenfolge Anweisungen im Programm ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich gibt es drei Arten von Kontrollstrukturen:&lt;br /&gt;
* die Sequenz (also das „der Reihe nach Durcharbeiten“),&lt;br /&gt;
* die Verzweigung (Entscheidungen wie if/else),&lt;br /&gt;
* die Schleifen (Wiederholungen wie for oder while).&lt;br /&gt;
&lt;br /&gt;
Bei der Sequenz werden die Befehle einfach Schritt für Schritt abgearbeitet – ganz ohne Umwege.&lt;br /&gt;
&lt;br /&gt;
Sobald das Programm aber an eine Stelle kommt, an der eine Entscheidung getroffen werden muss (zum Beispiel: „Ist das Alter größer als 18?“), kommt die Verzweigung ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Das Programm wählt dann abhängig von der Bedingung einen bestimmten Weg.&lt;br /&gt;
&lt;br /&gt;
Mit Schleifen kannst du erreichen, dass bestimmte Anweisungen mehrfach wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders praktisch, wenn Aufgaben immer wieder durchgeführt werden sollen, etwa beim Durchlaufen einer Liste von Werten.&lt;br /&gt;
&lt;br /&gt;
Durch das geschickte Zusammenspiel dieser Kontrollstrukturen kannst du auch schon mit einfachen Mitteln sehr flexible und vielseitige Programme schreiben – und hast das Handwerkszeug, um komplexere Themen wie Datenstrukturen und Algorithmen zu verstehen.&lt;br /&gt;
&lt;br /&gt;
= Quiz =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil eines Flussdiagramms beim Programmieren?&lt;br /&gt;
(!Es generiert automatisch den Programmcode.)&lt;br /&gt;
(!Es hilft dabei, den genauen Speicherbedarf zu berechnen.)&lt;br /&gt;
(Es stellt den Ablauf eines Programms grafisch dar und erleichtert das &lt;br /&gt;
Erkennen von Fehlern.)&lt;br /&gt;
(!Es ersetzt die Programmbeschreibung vollständig.)&lt;br /&gt;
&lt;br /&gt;
Welcher der folgenden Begriffe ist KEINE Kontrollstruktur?&lt;br /&gt;
(Variable)&lt;br /&gt;
(!Sequenz)&lt;br /&gt;
(!Verzweigung)&lt;br /&gt;
(!Schleife)&lt;br /&gt;
&lt;br /&gt;
Wie sieht ein Beispiel für Pseudocode aus?&lt;br /&gt;
(!x = 5 + 3)&lt;br /&gt;
(„Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“)&lt;br /&gt;
(!return x)&lt;br /&gt;
(!for i in liste: i += 1)&lt;br /&gt;
&lt;br /&gt;
Wie weist man in Python einer Variablen einen Wert zu?&lt;br /&gt;
(!variable == wert)&lt;br /&gt;
(!wert = variable)&lt;br /&gt;
(variable = wert)&lt;br /&gt;
(!set variable wert)&lt;br /&gt;
&lt;br /&gt;
Was macht der Befehl input() in Python?&lt;br /&gt;
(!Gibt einen Wert auf dem Bildschirm aus.)&lt;br /&gt;
(Fragt eine Eingabe von der*dem Benutzer*in ab.)&lt;br /&gt;
(!Vergleicht zwei Werte.)&lt;br /&gt;
(!Definiert eine neue Variable.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
	<entry>
		<id>http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147887</id>
		<title>Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen und Konzepte der Programmierung</title>
		<link rel="alternate" type="text/html" href="http://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Kwschneider/Softwareentwicklung/Grundlagen/Denkweisen_und_Konzepte_der_Programmierung&amp;diff=147887"/>
		<updated>2026-01-07T19:49:50Z</updated>

		<summary type="html">&lt;p&gt;Kwschneider: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Denkweisen und Konzepte der Programmierung =&lt;br /&gt;
&lt;br /&gt;
== Algorithmisches Denken und Problemlösungsstrategien ==&lt;br /&gt;
&lt;br /&gt;
Algorithmisches Denken bedeutet, ein Problem Schritt für Schritt zu lösen – ähnlich wie bei einer Bauanleitung oder einem Kochrezept.&lt;br /&gt;
&lt;br /&gt;
In der Programmierung überlegst du dir, wie du ein Ziel erreichen kannst, indem du einzelne, logisch aufeinanderfolgende Anweisungen formulierst.&lt;br /&gt;
&lt;br /&gt;
Ziel ist es, eine Lösung so klar zu beschreiben, dass ein Computer oder eine andere Person sie ganz genau nachvollziehen kann.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel: Stell dir vor, du möchtest ein Programm schreiben, das prüft, ob jemand volljährig ist.&lt;br /&gt;
&lt;br /&gt;
Du musst den Ablauf logisch planen. Zuerst fragst du nach dem Alter, dann vergleichst du es mit 18, und entscheidest, was ausgegeben werden soll – das ist schon algorithmisches Denken.&lt;br /&gt;
&lt;br /&gt;
Problemlösungsstrategien helfen dir dabei, auch komplexere Aufgaben zu meistern.&lt;br /&gt;
&lt;br /&gt;
Dazu gehört es, ein großes Problem in kleine Teilprobleme zu zerlegen, verschiedene Lösungswege abzuwägen und mögliche Fehlerquellen zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Häufig werden solche Schritte erst auf Papier geplant, bevor sie als Programm umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
So lernst du nach und nach, nicht nur Aufgaben zu lösen, sondern auch möglichst effiziente und fehlerfreie Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
Dieses Denken ist die Grundlage dafür, später eigene Programme zu schreiben und immer wieder neue Herausforderungen erfolgreich zu meistern.&lt;br /&gt;
&lt;br /&gt;
== Von der Idee zum Code: Problemanalyse und Lösungsentwurf ==&lt;br /&gt;
&lt;br /&gt;
Bevor du mit dem eigentlichen Programmieren startest, ist es wichtig, eine klare Vorstellung davon zu haben, was dein Programm eigentlich tun soll.&lt;br /&gt;
&lt;br /&gt;
Das beginnt mit der Problemanalyse.&lt;br /&gt;
&lt;br /&gt;
Du schaust dir genau an, welche Aufgabe gelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
Dafür kann es helfen, das Problem in kleinere, überschaubare Teile zu zerlegen.&lt;br /&gt;
&lt;br /&gt;
Du überlegst beispielsweise:&lt;br /&gt;
* Welche Informationen brauche ich?&lt;br /&gt;
* Welche Schritte müssen der Reihe nach abgearbeitet werden?&lt;br /&gt;
* Gibt es verschiedene Möglichkeiten, das Ziel zu erreichen?&lt;br /&gt;
&lt;br /&gt;
Sobald du das Problem verstanden hast, folgt der Lösungsentwurf.&lt;br /&gt;
&lt;br /&gt;
Dabei planst du, wie dein Programm grundsätzlich aufgebaut sein soll.&lt;br /&gt;
&lt;br /&gt;
Häufig nutzt man dafür einfache Hilfsmittel wie Flussdiagramme, die den Ablauf grafisch darstellen, oder Pseudocode, eine Art „Programmiersprache in Alltagssprache“.&lt;br /&gt;
&lt;br /&gt;
So kannst du ausprobieren und testen, ob deine Lösung logisch und vollständig ist, bevor du eine einzige Zeile Code schreibst.&lt;br /&gt;
&lt;br /&gt;
Dieser Planungsprozess hilft dir, Fehler frühzeitig zu erkennen und sorgt dafür, dass du später beim Programmieren gezielter und strukturierter arbeiten kannst.&lt;br /&gt;
&lt;br /&gt;
== Einführung in Flussdiagramme und Pseudocode ==&lt;br /&gt;
&lt;br /&gt;
Flussdiagramme und Pseudocode sind zwei praktische Werkzeuge, die dir beim Planen und Verstehen von Programmen helfen.&lt;br /&gt;
&lt;br /&gt;
Ein Flussdiagramm ist eine Art Zeichnung, mit der du den Ablauf eines Programms Schritt für Schritt darstellst.&lt;br /&gt;
&lt;br /&gt;
Du verwendest verschiedene Symbole:&lt;br /&gt;
* Ovale für den Start und das Ende&lt;br /&gt;
* Rechtecke für Anweisungen&lt;br /&gt;
* Rauten für Entscheidungen (zum Beispiel: „Ist die Zahl größer als 18?“)&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Schritte sind mit Pfeilen verbunden, so dass du leicht siehst, welcher Schritt als nächstes kommt.&lt;br /&gt;
&lt;br /&gt;
Das hilft dir, den Überblick zu behalten und logische Fehler früh zu erkennen.&lt;br /&gt;
&lt;br /&gt;
Pseudocode dagegen ist wie eine Beschreibung des Programms in ganz normalen Worten, aber so aufgebaut, dass du daraus leicht richtigen Code machen kannst.&lt;br /&gt;
&lt;br /&gt;
Dabei schreibst du keine exakten Befehle einer Programmiersprache, sondern beschreibst die Abläufe so klar wie möglich – etwa so: „Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“&lt;br /&gt;
&lt;br /&gt;
Pseudocode hilft dir, den roten Faden zu behalten, ohne dich gleich mit der genauen Syntax von Python oder Java beschäftigen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Beides, Flussdiagramm und Pseudocode, sind besonders am Anfang nützlich, weil du damit deine Ideen durchdenken und strukturieren kannst, noch bevor du mit dem eigentlichen Programmieren loslegst.&lt;br /&gt;
&lt;br /&gt;
Damit bist du bestens vorbereitet auf die nächsten Themen, wie die verschiedenen Kontrollstrukturen in Programmen.&lt;br /&gt;
&lt;br /&gt;
== Kontrollstrukturen: Sequenz, Verzweigung, Schleifen ==&lt;br /&gt;
&lt;br /&gt;
Kontrollstrukturen bilden das Grundgerüst jeder Programmiersprache.&lt;br /&gt;
&lt;br /&gt;
Sie bestimmen, in welcher Reihenfolge Anweisungen im Programm ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich gibt es drei Arten von Kontrollstrukturen:&lt;br /&gt;
* die Sequenz (also das „der Reihe nach Durcharbeiten“),&lt;br /&gt;
* die Verzweigung (Entscheidungen wie if/else),&lt;br /&gt;
* die Schleifen (Wiederholungen wie for oder while).&lt;br /&gt;
&lt;br /&gt;
Bei der Sequenz werden die Befehle einfach Schritt für Schritt abgearbeitet – ganz ohne Umwege.&lt;br /&gt;
&lt;br /&gt;
Sobald das Programm aber an eine Stelle kommt, an der eine Entscheidung getroffen werden muss (zum Beispiel: „Ist das Alter größer als 18?“), kommt die Verzweigung ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Das Programm wählt dann abhängig von der Bedingung einen bestimmten Weg.&lt;br /&gt;
&lt;br /&gt;
Mit Schleifen kannst du erreichen, dass bestimmte Anweisungen mehrfach wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders praktisch, wenn Aufgaben immer wieder durchgeführt werden sollen, etwa beim Durchlaufen einer Liste von Werten.&lt;br /&gt;
&lt;br /&gt;
Durch das geschickte Zusammenspiel dieser Kontrollstrukturen kannst du auch schon mit einfachen Mitteln sehr flexible und vielseitige Programme schreiben – und hast das Handwerkszeug, um komplexere Themen wie Datenstrukturen und Algorithmen zu verstehen.&lt;br /&gt;
&lt;br /&gt;
= Quiz =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;multiplechoice-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was ist der Hauptvorteil eines Flussdiagramms beim Programmieren?&lt;br /&gt;
(!Es generiert automatisch den Programmcode.)&lt;br /&gt;
(!Es hilft dabei, den genauen Speicherbedarf zu berechnen.)&lt;br /&gt;
(Es stellt den Ablauf eines Programms grafisch dar und erleichtert das &lt;br /&gt;
Erkennen von Fehlern.)&lt;br /&gt;
(!Es ersetzt die Programmbeschreibung vollständig.)&lt;br /&gt;
&lt;br /&gt;
Welcher der folgenden Begriffe ist KEINE Kontrollstruktur?&lt;br /&gt;
(Variable)&lt;br /&gt;
(!Sequenz)&lt;br /&gt;
(!Verzweigung)&lt;br /&gt;
(!Schleife)&lt;br /&gt;
&lt;br /&gt;
Wie sieht ein Beispiel für Pseudocode aus?&lt;br /&gt;
(!x = 5 + 3)&lt;br /&gt;
(„Frage das Alter ab, vergleiche es mit 18, gib das Ergebnis aus.“)&lt;br /&gt;
(!print(&amp;quot;Hallo Welt&amp;quot;))&lt;br /&gt;
(!for i in range(5): print(i))&lt;br /&gt;
&lt;br /&gt;
Wie weist man in Python einer Variablen einen Wert zu?&lt;br /&gt;
(!variable == wert)&lt;br /&gt;
(!wert = variable)&lt;br /&gt;
(variable = wert)&lt;br /&gt;
(!set variable wert)&lt;br /&gt;
&lt;br /&gt;
Was macht der Befehl input() in Python?&lt;br /&gt;
(!Gibt einen Wert auf dem Bildschirm aus.)&lt;br /&gt;
(Fragt eine Eingabe von der*dem Benutzer*in ab.)&lt;br /&gt;
(!Vergleicht zwei Werte.)&lt;br /&gt;
(!Definiert eine neue Variable.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kwschneider</name></author>
	</entry>
</feed>