Wir erstellen ein Addon (simples Tutorial von Anfang bis Ende)

  • Ich möchte mich hier jetzt einmal für die tolle Hilfe bedanken.Die Hilfsbereitschaft hier in diesem "Kurs"Forum möchte ich hervorheben,denn man merkt,dass es doch viele gibt,die einem helfen wenn man Probleme hat die Aufgaben zu lösen.Und oft sind es eben nur Kleinigkeiten,wie z.B. eine fehlende .py Endung,die dann zum grossen Problem wird.
    Weiter so Jungs dann packen wir das alle

  • Ich denke Jan kann sich so auch etwas mehr auf die Ausarbeitung der neuen Themen konzentrieren.
    Viele Fragen lösen wir ja gemeinsam ;)

    Und der Kurs teilt sein wissen ja ordentlich.
    Ich persönlich vergesse immer noch das .py beim speichern dazu zu schreiben im Notepad++

    Darum ist es mir gleich aufgefallen bei Renes Foto.

    So gehe den Anfang noch mal von vorne los. Damit String variablen und Co. in Fleisch und Blut übergehen.

  • An Alle

    Um die Dateitypen in Windows anzuzeigen.
    Muß man das erst im Explorer einstellen.
    Dazu geht man im Explorer auf Organisieren>Ordneroptionen-Ansicht
    Und nimmt dann den Haken Bei Erweiterung bekannter Dateitypen ausblenden raus.
    Dann übernehmen und speichern.
    Schon kann man die Endungen der Dateien im Explorer sehen.

    Im Notepad++

    Wenn man eine Datei als Python Datei speichern will , im Speicher Fenster den Dateityp Python auswählen und dann die Datei benennen und speichern.
    Dann ist es auch eine Python Datei mit der Endung.py


    Gruß Jan

  • [h1]Datentypen[/h1]


    Integer f=1Ganzzahl
    Float f=0.1
    String s='hallo'
    Liste l=[1, 2, 3]
    Tuple t=(1, 2, 3)
    Menge z=set([1, 1, 2, 2, 3])) --> set([1, 2, 3])
    Dictionary d={1: 'eins', 2: 'zwei', 3: 'drei'}
    Gleitkommazahl
    Zeichenkette
    Veränderbare Liste
    Unveränderbare Liste
    Menge (ohne Dopplungen)
    Auch Hash oder assoziatives Array genannt.


    Im letzten Teil des Kurses haben wir die Dateitypen Integer und String etwas näher kennengelernt
    Heute in diesem Teil geht es um Die Dateitypen Liste und Tupel.
    Wie ihr oben in der Dateitypenübersicht seht kann man Liste als Veränderbare Liste sehen und Tupel
    als Unveränderbare Liste

    [h1]Die Liste:[/h1]

    In einer Liste kann eine Folge beliebiger Objekte gespeichert werden, also zum Beispiel Strings, Integers, Float-Zahlen aber auch Listen .
    Eine Liste kann jederzeit während des Programmablaufs wieder geändert werden

    Eine Leere Liste wird mit Name der Liste=[]erstellt.

    Beispiel:
    mylist=[]


    Allgemeine Syntax einer Liste:
    Systax: Namen der Liste[Objekt,Objekt]

    Der Index einer Liste beginnt bei 0:
    Tiere=['Affe','Tiger','Kuh']
    Index 0 1 2

    so das:

    print Tiere[0] # Affe ausdruckt

    negativer Index ist auch vorhanden um auch Listenteile von Rechts nach Links zu erreichen:

    Tiere=['Affe','Tiger','Kuh']
    Index -3 -2 -1
    so das print liste[-1] Kuh ergibt.

    [h1]Befehle zur Manipulation von Listen.[/h1]

    Name der Liste.append[Objekt] fügt ein neues Element der Liste zu

    Beispiel :

    Tiere['Affe','Tiger','Kuh']erstellt eine Liste mit den Namen Tiere die die Objekte Affe,Tiger,Kuh enthält
    Tiere.append('Rind')fügt ein neues String Objekt mit den Namen Rind der Liste zu
    Tiere.append(1)fügt eine neue Integer 1 der Liste zu
    Tiere.append(2.5)fügt eine Float(Gleitkommazahl der Liste zu)


    Die Anzahl der Objekte die in einer Liste vorhanden sind bekommt man mit der Funktion len()

    len(Name der Liste)

    Beispiel:

    Tiere=['Affe','Tiger','Kuh']
    print len(Tiere)

    Ein Objekt entfernt man aus einer Liste mit:
    Listen Name.remove(Objekt)

    Beispiel:
    Tiere=['Affe','Tiger','Kuh']
    Tiere.remove("Affe")

    Man kann auch mit den Namen eines Objektes innerhalb der Liste Suchen.
    Wobei anhand des Objektes der Index dieses Objektes ausgeworfen wird.
    Syntax:

    Listen Name.index(Objekt)

    Beispiel:
    Tiere=['Affe','Tiger','Kuh']
    Tiere.index("Tiger")

    Man kann auch ein Objekt mit einen anderen Ersetzen:
    Syntax:
    Listen Name[index des Objektes das ersetzt werden soll]=Neues Objekt

    Beispiel:
    Tiere=['Affe','Tiger','Kuh']
    Tiere[0]='Vogel'

    Einsetzen eines Objektes an bestimmter Position:
    Syntax:
    Listen Name.insert(index wo eingefügt werden soll,einzufügendes Objekt)
    Bitte beachten das der index bei 0 anfängt!!

    Beispiel:
    Tiere=['Affe','Tiger','Kuh']
    Tiere.insert(2, 'Maus')

    Teile einer Liste erfassen:
    Syntax Listen Name[Anfang:Ende]

    Beispiel:
    Tiere=['Affe','Tiger','Kuh']
    print Tiere[0:2]


    [h1]Die range()-Funktion:[/h1]

    Da mit der Range Funktion Listen von Zahlen erstellt werden können ,werden wir sie auch in diesen Thema kurz behandeln.
    Die Range Funktion kann mit einem oder meheren Argumenten benutzt werden :

    Beispiel mit einen Argument:
    Syntax:
    range(integer)

    print range(10) Bitte beachten 10 bedeutet die Zahlen von 0 - 9 da von 0 gezählt wird
    >>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    Beispiel mit 2 Argumenten:
    Syntax
    range(Anfang,Ende)

    print range(4,11)
    >>[4, 5, 6, 7, 8, 9, 10]

    Beispiel mit 3 Argumenten:
    Syntax:
    range(Anfang,Ende,Schrittweite)

    print range(5,21,5)
    >>[5, 10, 15, 20]

    [h1]Erstellen einer Liste aus einen String mittels split:[/h1]

    Da man ganz einfach auch eine Liste aus einen String mittels split erstellen kann
    will ich Euch das hier vorstellen:

    satz='Aller Anfang ist schwer'
    print satz.split()
    >>>['Aller', 'Anfang', 'ist', 'schwer']

    Natürlich ist es auch möglich auszuwählen was das Argument sein soll mit dem split ausgeführt werden soll.

    satz='Aller Anfang ist schwer'
    print satz.split('Anfang')
    >>>['Aller ', ' ist schwer']

    um sich nur einen bestimmten Teil des gesplitteten anzeigen zu lassen schreibt man den Wert in [] dahinter (denkt dran Python zählt ab 0):

    satz='Aller Anfang ist schwer'
    print satz.split('Anfang')[0]
    >>>Aller

    satz='Aller Anfang ist schwer'
    print satz.split('Anfang')[1]
    >>>ist schwer

    [h1]Das Tupel:[/h1]

    Bis jetzt haben wir zwei zusammengesetzte Datentypen kennengelernt: Strings, die aus Zeichen zusammengesetzt sind; und Listen, die aus Elementen von beliebigem Typ aufgebaut sind. Einer der Unterschiede zwischen diesen beiden war der, dass die Elemente einer Liste geändert werden können, die Zeichen eines Strings aber nicht. Mit anderen Worten: Strings sind unveränderbar und Listen sind veränderbar.
    Es gibt in Python noch einen weiteren Datentyp, Tupel genannt, der dem Typ Liste ähnlich ist, aber unveränderbar. Syntaktisch ist ein Tupel eine Komma-separierte Liste von Werten:

    tuple = 'a', 'b', 'c', 'd', 'e'

    obwohl es nicht unbedingt notwendig ist, ist es üblich Tupel in runde Klammern einzuschließen:

    tuple = ('a', 'b', 'c', 'd', 'e')

    Um ein Tupel mit nur einem Element zu erzeugen, muss man das letzte Komma anfügen:

    t1 = ('a',)
    print type(t1) wir prüfen ob der typ tupel ist
    >>><type 'tuple'>


    Ohne das Komma behandelt Python ('a') als einen String in runden Klammern.

    t2 = ('a')
    print type(t2)
    >>><type 'str'>

    Abgesehen von Syntax-Fragen sind die Operationen mit Tupeln dieselben wie die Operationen mit Listen.

    tuple = ('a', 'b', 'c', 'd', 'e')
    print tuple[0]
    >>>a

    Und der Abschnitt-Operator wählt einen Bereich von Elementen aus:

    tuple = ('a', 'b', 'c', 'd', 'e')
    print tuple[1:3]
    >>>('b', 'c')

    Wenn man aber versucht, ein Element des Tupels zu ändern, erhält man eine Fehlermeldung:

    tuple = ('a', 'b', 'c', 'd', 'e')
    tuple[0] = 'A'
    >>>TypeError: 'tuple' object does not support item assignment

    Auch wenn man die Elemente eines Tupels nicht ändern kann, kann man es doch durch ein anderes Tupel ersetzen:

    tuple = ('a', 'b', 'c', 'd', 'e')
    tuple = ('A',) + tuple[1:]
    print tuple
    >>>('A', 'b', 'c', 'd', 'e'


    So das soll es für heute gewesen sein:

    Nach durcharbeiten dieses Themas sollte Ihre folgende Aufgaben durchführen bzw.Fragen beantworten können:

    Was ist eine Liste?
    Wie erstellt man eine Liste?
    -Erstelle eine Liste mit den Listnamen Vornamen das folgende Objekte enthält:
    Paul,Petra,Klaus,Bernd
    -Füge das Neue Objekt Jochen zur Liste hinzu
    -Suche nach dem Objekt Petra
    -Entferne das Objekt Paul
    -zähle die Anzahl der Listen Objekte
    -drucke das erste Objekt der liste aus
    -drucke das letzte Objekt der Liste aus der Liste aus
    -drucke nur das 2 und 3 Objekt der Liste aus


    Wie bestimmt man den typ des Wertes einer Variable oder eines Tuples?
    Was ist der Unterschied von Tuple zur Liste?
    Was sind die Gemeinsamkeiten von String und Tuple?
    Was macht die Range Funktion?
    Welche 3 Möglichkeiten gibt es um die Range Funktion anzusprechen?
    Erstelle ein Range der Integer 1-100.
    Erstelle aus den String 'wir haben keine Lust mehr eine Liste'
    Spreche nur das erste Objekt der Liste an und drucke es mit dem Print Befehl aus

  • Hoffe das ich diesmal das richtige Maß gefunden Habe.

    Klar wieder Grundlagen , aber das ist alles nur ein kleiner teil von Python und die Grundlagen brauchen wir um später auch zu Verstehen was wir tun um die bestmögliche Lösung eines Problems zu finden.

    Das mit den Listen macht schon Spaß .
    Ihr müßt wie gesagt alles mit Leben füllen.


    Gruß Jan

  • Hallo zusammen,

    ich muss nochmal zurück kommen auf Lexion 3. Ich bekomme das irgendwie nicht hin mit diesen Bsp. von Funktionen. Was ist meinm Code den falsch?

    Code
    a='Horst'
    b='Hans'
    def mixName(a,b)
        temp='%s %s' % (a,b)
        return temp
     print mixName(a,b)

    Ich bekomme immer einen Fehler!!

    NPP_EXEC: "Run Python"
    CD: C:\Users\Andy\Documents\Python Projekte
    Current directory: C:\Users\Andy\Documents\Python Projekte
    C:\Python27\Python "mixName.py"
    Process started >>>
    File "mixName.py", line 3
    def mixName(a,b)
    ^
    SyntaxError: invalid syntax
    <<< Process finished. (Exit code 1)
    ================ READY ================

    Ich habe mal meine Datei mit als Anhang gesendet, konnte nur als ZIP Datei schicken.

    Alles weitere muss ich mir zwar weiter verinnerlichen, aber soweit hat das jetzt auch funktioniert, auch mit dem Import.

    Dateien

    Gruß Andy

    Meine Systeme
    Win7 PC mit Kodi 15.2 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (Wohnzimer)
    Fire TV Stick mit Kodi 15.2 Isengard (Schlafzimmer)
    Ipad 3 IOS 9.0.2 mit Kodi 15.2 Isengard

  • @AR2015

    hast Du den Doppelpunkt gesetzt?

    def mixName(a,b):

    Die Python Datei heißt nicht mixName.py

    Innerhalb der Test.py z.B erstellst Du alles
    wie im Quellcode und läßt die Test.py ausführen.

    def leitet eine Funktion ein.

    Syntax für eine Funktion ist:

    def Name der Funktion(Wert): wenn mehr als ein Wert durch Komma getrennt

    Was eine Funktion ist mußt du verinnerlichen .
    Denn wenn Du ein Addon schreibst mußt Du auch selbst Definitionen definieren .
    Und das mit eigenen Code.
    Mit deiner Eigenen Lösung für ein Problem.

    Ich weiß das der Weg dort hin noch ein Stück ist aber es war so erklärt!

    Gut das Du Deine Fragen stellst!

    Python
    a='Horst'
    b='Hans'
    
    
    def mixName(a,b):
        temp='%s %s' % (a,b)
        return temp
    
    
    print mixName(a,b)

    Gruß Jan

  • den : habe ich vergessen, jetzt abe ich den gesetzt:

    Code
    a='Horst'
    b='Hans'
    
    
    def mixName(a,b):
        temp='%s %s' % (a,b)
        return temp
     print mixName(a,b)

    und komme folgenden Fehler:
    NPP_EXEC: "Run Python"
    CD: C:\Users\Andy\Documents\Python Projekte
    Current directory: C:\Users\Andy\Documents\Python Projekte
    C:\Python27\Python "mixName.py"
    Process started >>>
    File "mixName.py", line 7
    print mixName(a,b)
    ^
    IndentationError: unindent does not match any outer indentation level
    <<< Process finished. (Exit code 1)
    ================ READY ================

    Was soolte denn eigentlich da stehen??? Wenn das Ergebnis kommt?

    Gruß Andy

    Meine Systeme
    Win7 PC mit Kodi 15.2 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (Wohnzimer)
    Fire TV Stick mit Kodi 15.2 Isengard (Schlafzimmer)
    Ipad 3 IOS 9.0.2 mit Kodi 15.2 Isengard

  • Die Einrückung von print mixName(a,b)
    ist nicht korrekt.
    IndentationError: unindent does not match any outer indentation level

    Die Fehler Meldung weißt auch darauf hin.


    Kopiere meinen Quellcode und füge ihn ein .
    Dann funktioniert es

    Wenn eine Funktion beendet ist was sie mit return temp ist.

    Mußt Du Wieder am Anfang der Zeile anfangen zu schreiben.
    Das ist bei Dir aber nicht so.
    Denn Du hast ein Leerzeichen vor dem print Befehl.


    und Bitte lese auch Das und führe es im Explorer aus.

  • @Jan
    Die Aufbereitung des 4.Themas war die beste finde ich.Hoffe Du gönnst uns nun ein paar Tage Pause um das Fragen-Programm abzuarbeiten :thumbup: .

    Gibt es am Ende des Kurses vielleicht ein 'Hand Out' also die Unterlagen in Form eines PDF Dokuments mit den FAQ's??

    Dann könnte man alles auf einen Blick immer Griffbereit nachlesen (wäre bestimmt ne feine Sache)

    Heute hatte ich mal keine Probleme mit den Übungen, alles gut gegangen :rolleyes:

    Muss morgen Abend mal Pause machen und kann nur kurz reinschauen (Martins-Fest im KiGA)

    Grüsse Rene

  • Die Einrückung von print mixName(a,b)
    ist nicht korrekt.
    IndentationError: unindent does not match any outer indentation level

    das habe ich gerade auch erkannt in dem Beispiel von @Dima Danke dafür. Die Printanweisung war mit der def Anweisung verknüpft und deswegen kam der Fehler. Code angepasst und siehe da "Hans Wurst" kam heraus.
    Das mit dem Explorer habe ich gelesen und soweit angepasst. Funktioniert jedoch nicht so. Die dateiendungen werden zwar angezeigt im Explorer, aber wenn die Datei abspeichere Bsp Dateiname und in der Liste PhytonFile auswähler. wird die neu erstellte Datei im obem im Reiter nicht mit **py ausgeben. Speichere ich die Datei mit Dateiname.py ab funktioniert alles Prima. Werde ich jetzt so weiter beibehalten.

    Als Beispiel dieses Foto. einmal MixName1.py abgespeichert, und das andere MixName12 und PhytonFile in der Liste ausgewählt.

    Externer Inhalt fs5.directupload.net
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Danke an jeden der hier einen so hilft. @skatulskijean Super Lexionen.. Einfach Super unD danke für Eure Geduld mit mir :)

    Gruß Andy

    Meine Systeme
    Win7 PC mit Kodi 15.2 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (PC Zimmer)
    Apple TV1 Betriebssystem OpenELEC, Kodi 15.1 Isengard (Wohnzimer)
    Fire TV Stick mit Kodi 15.2 Isengard (Schlafzimmer)
    Ipad 3 IOS 9.0.2 mit Kodi 15.2 Isengard

  • Ein Indent ist ein Einzug, also die Einrückung von Text ab Beginn einer Zeile. Ein 'Indentation Error' weist auf eine fehlerhafte Einrückung hin. Bei Python ist das extrem wichtig, da Code, der an der gleichen Einrückung steht, auch im Programmverlauf auf der selben 'Ebene' liegt. So werden z.B. Programmblöcke in Verzweigungen (If/elif/else) eingerückt, um sie als solche zu kennzeichnen. Darunter liegender Code wird ausgerückt (liegt also wieder dichter am linken Rand), wenn er eben nicht mehr zu dem Programmblock der if/elif/else-Geschichte gehört. Indents gehören zur Syntax von Python. In anderen Programmiersprachen benutzt man z.B. geschweifte Klammern


    Code
    if (bedingung == wahr) {
        Programmblock 
    }

    um solche Blöcke zu kennzeichnen. Aber auch hier benutzt man das Stilmittel der Einrückung, um z.B. den Code für den Menschen (dem Programmierer) besser lesbar zu machen - auch wenn das bei PHP z.B. nicht unbedingt erforderlich ist. In Python benutzt man eben die Einrückung (den Indent) als Bestandteil der Syntax. Was bei einem Fluch ist, ist den anderen halt ein Segen ;). So ist das mit den unterschiedlichen Sprachen.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Das mit dem Einrücken ist gewöhnungsbedürftig, aber in C++ vergißt man auch gerne mal ein ';'. Zum Glück werden die Abschließenden-} da von der IDE erzeugt.

    Es gibt auch für Python exzellente IDEs. Notepad++ ist zwar universell, zählt aber nicht zu einer für Python optimalen IDE. Für die ersten Schritte ist das aber ok.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Das mit dem Einrücken ist gewöhnungsbedürftig, aber in C++ vergißt man auch gerne mal ein ';'. Zum Glück werden die Abschließenden-} da von der IDE erzeugt.

    Daran gewöhnt man sich schnell.
    Bei verschiedenen Sprachen die man benutzt kann man mal so imGedanken einen Fehler machen.
    Aber das Einrücken bringt auch eine klare Struktur.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!