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

  • Zitat von skatulskijean

    Wieso bekomme ich nur 1 und nicht 1,6666
    Es gab doch keine Definition das er mir das print als Ganzzahl geben soll.


    Da wir wie von mit im Thema geschrieben nur ganz Zahlen behandelt haben

    Ja das haben wir aber Python hatte doch keine Definition zu Art der Ausgabe und das Tutorial kannte es erst recht nicht.


    Zitat von skatulskijean

    a="Hans"
    print a[-1]
    Wie kann man ein sH erzeugen?
    Habe verschiedenes versucht bekomme es aber nicht hin.


    Steht im Tutorial .
    Bitte lies noch einmal nach!

    Bitte glaube mir das habe ich gestern sehr ausführlich gemacht und werde mich heute noch mal hinsetzen und üben aber ich komm nicht darauf da wir immer nur einen Buchstaben im Beispiel hatten.


    Zitat von skatulskijean

    Wieso muss ich print mixName (a,b) schreiben der Name ist doch nur mixName und (a,b) sind die Variablen mit den er Arbeiten soll.


    Wir wollen das Ergebnis mit den Werten von a, b haben und dazu muß in
    dem Aufruf der Funktion schon stehen was oder mit welchen Werten sie es
    tun soll.
    Das ist eine immer widerkehrende Sache und Du wirst sie später verstehen.

    Entschuldigung! :) Ich versuche nur zu Verstehen ob es vielleicht noch einen anderen Sinn hat das wir die Variablen dazu schreiben müssen.
    Ich frage mich nun was ich jetzt auch Testen werde was wen ich print mixName (a) mache einen Sinn muss das ja haben!


    Zitat von skatulskijean

    Wieso kann ich nicht das komplette Modul importieren?
    import tools.helper


    Kannst Du doch ,
    Da wir aber davon gesprochen haben das wir den Import genau so später brauchen und
    der Import vom kompletten Modul und der Import eines Teiles eines Modul schon angesprochen wurde
    ist es hier so.

    Habe ich versucht und es geht nicht was ist falsch an import tools.helper


    Zitat von skatulskijean

    Dima es ist gut das Du fragst aber bestimmte Sachen sind in einer Programmiersprache klar definiert und das muß man dann schon so hinehmen.

    Ja ist mir klar! Und ich versuche es zu verstehen dazu Frage ich.
    Zudem hinterfrage ich immer alles im Legen damit ich es eben Verstehe und nicht immer abkupfere.
    Aussagen wie: Es ist halt so!
    Wen du es nicht verstehst dann lerne das Auswendig.
    So wurde es mir halt gezeigt.
    O Je da musst du aber einen Professor fragen.
    Haben mich in der Schule und in der Ausbildung aufgeregt. Auf der Arbeit habe ich dann zum teil begreifen können wieso so viele da nicht mehr Fragen.
    Hoffe hier wert ich weiter Fragen dürfen auch wen einiger Fragen wohl seltsam vorkommen.

    Ich bin auch dafür sich mehr Zeit zu nähmen dann hast du es auch nicht so Stressig hier!

  • Ja das haben wir aber Python hatte doch keine Definition zu Art der Ausgabe und das Tutorial kannte es erst recht nicht.

    Soweit ich das verstanden habe, erfolgt die Deklaration des Typs, durch den nachgestellten Wert. Weißt du also, dass du die Variablen später für Gleitkomma-Arithmetik brauchst, weist du ihnen einfach einen Gleitkomma- Wert zu.
    Folgendes Beispiel:

    Python
    a = 1.0
    b = 2
    c = a/b
    print c
    
    
    //Ausgabe: 0.5


    Ohne die vorherige Deklaration als Gleitkomma- Zahl wird sie als Integer definiert. Und da wird halt die Nachkomma- Stelle einfach abgeschnitten. Also in deinem Beispiel 1, statt 1.6666

    Bitte glaube mir das habe ich gestern sehr ausführlich gemacht und werde mich heute noch mal hinsetzen und üben aber ich komm nicht darauf da wir immer nur einen Buchstaben im Beispiel hatten.

    Ich weiß nicht, ob das der schönste Weg ist, aber du kannst die print- Anweisungen einfach verknüpfen.

    Beispiel:

    Python
    a = 'Hans'
    print a[-1],a[0]

    Das ergibt dann "s h".

    Aussagen wie: Es ist halt so!

    Das ist in Programmier- Sprachen, wie in jeder anderen Sprache auch. Manche Vokabeln muss man einfach lernen, ohne, dass man sie herleiten kann. Und hier ist Python, was ich bis jetzt mitbekommen habe, noch sehr angenehm. Keine ständigen Fehler, wegen fehlender Klammern und Semikolons.
    Oder wann hast du dich das letzte Mal gefragt, warum in der deutschen Sprache ein "Stuhl" so heißt, wie er heißt ? ;)

    lg fuenfzigccm

  • @fuenfzigccm

    Danke für Deine Ausführung
    und beides ist richtig.

    @Dima

    Ich kann mit Euch keinen kompletten Python Kurs machen.
    Sonst kommen wir in Monaten noch nicht dazu ein eigenes Addon zu schreiben.
    Denn Python komplett zu lernen ,und das hier, sprengt den Kurs komplett .

    So behandel ich erst einmal nur das nötigste.
    Das nach meiner Meinung für das erste zur Erstellung eines Addons reicht.

    Soweit ich gesehen habe gibt es kein Addon Tutorial was das so macht.
    Nein der ,der ein Addon schreiben will wird angewiesen sich erst einmal mit der Sprache zu beschäftigen.
    Da derjenige in diesem Moment gar nicht wissen kann was er als Grundlage braucht ist er oft überfordert und gibt auf.
    Ich hier versuche Euch das wesentliche herauszufiltern.
    Was auch nicht immer so einfach ist,da man erst dann merkt was man eigentlich alles zu diesen Thema
    im laufe der Zeit erlernt hat.


    Alle Themen sind niemals komplett angesprochen sondern nur das am häufigsten verwendete.
    Und nicht so wie in einen online Pythonkurs.
    Denn dort sind sofort Sachen ersichtlich die man nicht versteht.

    Aber dennoch ist es so das Du die Sachen nicht komplett liest .
    So ist angegeben was genau if,elif,else bedeuten und so ist auch als Beispiel vorhanden wie der Index eines Strings aussieht , sogar wie man den ersten Buchstaben erreicht .

    Zum Import .
    Wenn du einen normalen import des helper von tools machst.

    Kann der Import die Variablen mit ihren Werten nicht erfassen .
    der im Tutorial verwendete Import kann das aber.
    So das wir im weiteren Verlauf ohne Probleme
    feste Variablen und Funktionen aus helpers in der Test.py verwenden können .

    Die Unterschiedliche Syntax ist auch zu erkennen!


    Gruß Jan

  • Puh, das nicht ganz einfach. Also hab alles hinbekommen und per trial and error auch paar lustige Sachen probiert. Aber es ist wirklich viel, wenn man Anfänger ist. Es ist zwar alles in allem insgesamt nachvollziehbar, aber besonders bei den letzten Themen (ab Funktionen) hält sich mein weiteres Verständnis noch begrenzt, aber das erschließt sich dann vielleicht auch, wenn man weitermacht.

    Hab nochmal ne Frage hierzu:

    a = "Hans" weist der Variable a den String Hans zu
    i= len(a) - 1 weist der Variable i die Funktion len mit den Wert a zu ( das -1 ist wichtig da  wir herkömmlich mit 1 anfangen zu zählen
    aber der index unseres strings wie gelernt mit 0 beginnt)

    Das mit dem Index habe ich verstanden, also wenn ich ein "H" ausgegeben haben möchte, schreibe ich print a[0]. Das klappt auch.

    Bei i= len(a) - 1 verstehe ich aber nicht die Begründung in der Klammer. print i soll mir doch letztlich die Länge des Strings (=4) ausgeben, oder? Wenn man mit 0 beginnt, dann hätte ich bei der Begründung aber mit i= len(a) + 1 gerechnet. Aber wie dem auch sei, ich bekomme bei print i als Ergebnis 3 angezeigt. Das erschließt sich mir insgesamt nicht :D

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

  • Die Syntax ist folgende:

    def Funktion Name(zu benutzende übergebende Variablen - bei meheren durch , getrennt):

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

    - erstellt die Funktion mixName(a,b)
    - return temp hält das Ergebnis von Temp zur Weiter verarbeitung in neuer Funktion oder Befehl


    Wenn die Syntax def Funktion Name(a,b) ist, dann frag ich mich in diesem Beispiel gerade, ob mixName die Funktion oder der Name ist. Was soll diese Funktion eigentlich tun?

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

  • @marriol123343: mixName ist der Name der Funktion. Durch diesen Namen und die Übergabe der Parameter kannst du sie aufrufen und den Return- Wert auslesen.
    In diesem Beispiel tut sie nichts anderes, als die beiden übergebenen Strings a und b zusammenzuführen und mit dem return- Statement auszugeben.
    Du gibst der Funktion also die beiden einzelnen Namen und sie liefert dir den kompletten Namen zurück.

    Warum bei der len()- Funktion die "-1" dahintersteht, erschließt sich mir tatsächlich auch nicht. Möchtest du die komplette Länge des Strings "Hans" haben (der ja offensichtlich 4 ist), reicht es len(a) zu schreiben.
    Vermutlich hat sich hier bisschen die Idee einen einzelnen Character des Strings auszulesen mit seiner Länge vermischt.
    also:

    a='Hans'
    print len(a) // Ausgabe: 4
    print a[1] // Ausgabe: a und nicht wie erwartet H, da bei 0 angefangen wird zu zählen.

    lg fuenfzigccm

  • @marriol123343
    @fuenfzigccm


    Ja , ich glaube ich muß noch etwas besser erklären!

    Werde es ab dem nächsten Teil noch besser machen.

    Im Prinzip geht es in den vorherigen Teil darum folgendes zu wissen:

    Was ist eine Variable?

    Was bedeutet Syntax?

    Was macht der import Befehl?

    Wie deklariert man einen String als Wert in einer Variable?

    Was ist eine Funktion?

    Was ist if ,elif,else?

    Wie verkette ich einen String ?

    Wie benutze ich die Format Anweisung zum Verketten eines Strings?

    Wie erreiche ich Teile eines Strings?

    Was gibt mir die Länge eines Strings aus?

    Wie rechne ich mit ganzen Zahlen?

    Kann ich eigene Module erstellen?

    Wie macht man das?

    Welche 3 verschiedenen Arten des Import's wurden angesprochen?

    Wie ist das Schlüsselwort eine Funktion?

    Wie ist eine Funktion aufgebaut?


    Wer das für sich beantworten kann hat es verstanden!!!!


    Gruß Jan

  • @skatulskijean Ja, alles super! Als ich gerade festgestellt habe, dass ich anstatt "mixName" auch "Blumentopf" schreiben kann, ging mir ein Licht auf :D Ich dachte erst, das sei auch so eine integrierte Funktion, die iwas besonderes macht.

    Würde mal kühn behaupten, dass es von meiner Seite aus weitergehen kann. Man kann ja auch immer alles nochmal nachlesen, das setzt sich natürlich nicht alles innerhalb von 24h und 2 mal lesen. Das ist klar^^

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

  • @skatulskijean Ja, alles super! Als ich gerade festgestellt habe, dass ich anstatt "mixName" auch "Blumentopf" schreiben kann, ging mir ein Licht auf :D Ich dachte erst, das sei auch so eine integrierte Funktion, die iwas besonderes macht.

    Würde mal kühn behaupten, dass es von meiner Seite aus weitergehen kann. Man kann ja auch immer alles nochmal nachlesen, das setzt sich natürlich nicht alles innerhalb von 24h und 2 mal lesen. Das ist klar^^

    Na ja , ich mache Morgen weiter und werde nicht soviel reinpacken!

    hast Du die Funktion am Ende des 3 Teils nachvollziehen können?

    Ja , eine Funktion definiert man selbst , also gibt man Ihr auch den Namen der für einen selbst für diese Funktion in Frage kommt.

    Man spart sich Code da man solch eine Funktion dann einsetzt wenn der Inhalt der Funktion innerhalb eines Programms immer wieder gesetzt werden müßte.

    Z.B

    Wenn ich innerhalb eines Addons auf eine Website zugreifen muß schreibe ich das in eine Funktion ,
    so brauche ich den Code nicht 4 oder 5 mal wiederholen.
    Sondern Ich rufe statt dessen die Funktion auf und Übergebe ihr die url.


    Wenn du den Wert der Variable url mit einer Website gefüllt hast

    bekommst Du die Source der Website aufgerufen.

    Der script führt die index(url) aus
    und ruft mit html=getUrl(url)
    die Funktion getUrl(url) auf und übergibt den durch return gehaltenen Wert
    mit print html drucke ich die Source aus

    Innerhalb eines Addons ändern sich die url's auf die zugegriffen werden muß.
    Doch so sind diese 2 Funktionen für alle url's zu nutzen.

    Mit urllib2 ist besser nachzuvollziehen da in Python als Modul vorhanden

    Zeigt den Quelltext der url auf der wir uns momentan befinden.

    Also später schönes Baukastenprinzip

    Wenn wir im nächsten Thema sind kommen wir zu so etwas !!

    Jetzt brauchen wir REGEX um die Passagen zu parsen die für uns relevant sind!

    Wenn Ihr das mal kopiert und ausführt seht ihr wie gesagt den html Code der Seite auf der wir uns befinden und auch das was ich jetzt hier geschrieben habe.


    Wie gesagt gerne mal ausprobieren.

  • @skatulskijean

    Code
    def playVideo(id):
        if xbox:
            url = "plugin://video/YouTube/path=/root/video&action=play_video&videoid=" + id 
        else:
            url = "plugin://plugin.video.youtube/path=/root/video&action=play_video&videoid=" + id

    Du meinst diese? Naja ich bin noch dabei :D Also ich verstehe, dass hier eine Funktion playVideo definiert wird und if und else kann ich grundsätzlich auch nachvollziehen und hinten wird dann die id drangehängt, ok... aber den Teil "/path=/root/video&action=play_video&videoid=" verstehe ich noch nicht so wirklich.

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

  • @skatulskijean

    Du meinst diese? Naja ich bin noch dabei :D Also ich verstehe, dass hier eine Funktion playVideo definiert wird und if und else kann ich grundsätzlich auch nachvollziehen und hinten wird dann die id drangehängt, ok... aber den Teil "/path=/root/video&action=play_video&videoid=" verstehe ich noch nicht so wirklich.

    wenn ich dieser Funktion eine id eines Youtube Videos gebe.
    hält die url den Aufruf zur Übergabe an das Youtube Addon so das mir das Youtube Video mit noch etwas Code mehr über das Yotube addon abgespielt wird.
    Da die Pfade zum erreichen des Youtube Addons auf der xbox anders sind als auf Kodi wird abgefragt ob das System auf dem die ganze Sache läuft xbox ist .
    Wenn ja diese url .
    Wenn nicht ist es keine xbox und else kommt zum Einsatz mit dem Weg um das youtube addon mit der übergebenen id des Youtube Videos ansprechen zu können.


    Dieser Weg wird im allgemeinen genutzt um Youtube Videos von einem anderen Addon aus anzusprechen.
    Ich mache das meistens anders und benutze ein importiertes allgemeines Python Modul .
    Da das mir mehr Möglichkeiten gibt.
    z.B auch nur die Audioausgabe zu haben.

    Das ist alles noch ein bischen Zukunfts Musik.
    Aber bald schon sind wir in diesem Kurs an diesem Punkt!!

    Ja und dann fängt der Spaß an.

  • Das ist alles noch ein bischen Zukunfts Musik.
    Aber bald schon sind wir in diesem Kurs an diesem Punkt!!

    Ja und dann fängt der Spaß an.

    Mein Kopf qualmt, aber ich bleib mal optimistisch :D

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

  • alles im thema davor kann ich nur hier ist ein problem das ich nicht lösen kann. er importiert mir die datei nicht

    test.py muss im übergeordneten Verzeichnis gespeichert sein, nicht im Verzeichnis tools

    Client 1: Raspi3, LibreElec, Kodi Krypton I Client 2: Intel i5 750, GeForce GTX 750, 8GB Ram, Win7, Kodi Krypton
    Display: Samsung UE40J6250
    Ego: Student aus Kiel, Kompetenzen in Lesen & Schreiben + Wirtschaft + Pädagogik I Alter Ego : Call me Mike

Jetzt mitmachen!

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