[Python] Hur använda variabler (str och int blandat) i en funktion?

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

[Python] Hur använda variabler (str och int blandat) i en funktion?

Det gäller pythonkod i Kodi, men jag tror det inte spelar så stor roll.

http://kodi.wiki/view/List_of_built-in_functions
xbmc.executebuiltin('Seek(-20)')

Jag vill ersätta "-20" med en variabel. Rakt av verkar det inte gå. Jag har läst http://stackoverflow.com/questions/29793202/placing-a-python-... och https://docs.python.org/2/library/string.html#formatspec
Jag förstår hur man gör med en sträng men hur gör man när det är blandat?

T.ex. detta gör ju att det blir en sträng med värdet 'Seek(-20)' men det fungerar självklart inte. Hur anger jag att seektime är int?

template = "'Seek({})'"
seektime = -20
formatted = template.format(seektime)

Trädvy Permalänk
Medlem
Registrerad
Jan 2012

Nu är mina python kunskaper i botten. Men jag skulle göra något sånt här.

seektime = -20;
template = "Seek(" + str(seektime) + ")";
xbmc.executebuiltin(template);

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av slismetf:

Det gäller pythonkod i Kodi, men jag tror det inte spelar så stor roll.

http://kodi.wiki/view/List_of_built-in_functions
xbmc.executebuiltin('Seek(-20)')

Jag vill ersätta "-20" med en variabel. Rakt av verkar det inte gå. Jag har läst http://stackoverflow.com/questions/29793202/placing-a-python-... och https://docs.python.org/2/library/string.html#formatspec
Jag förstår hur man gör med en sträng men hur gör man när det är blandat?

T.ex. detta gör ju att det blir en sträng med värdet 'Seek(-20)' men det fungerar självklart inte. Hur anger jag att seektime är int?

template = "'Seek({})'"
seektime = -20
formatted = template.format(seektime)

Det fungerar iaf här: https://repl.it/BSmL

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

Nej, det fungerar inte. -20 görs om till en sträng. xbmc.executebuiltin förväntar sig en integer.

xbmc.executebuiltin('Seek(integer)')

Trädvy Permalänk
Medlem
Registrerad
Jan 2012
Skrivet av slismetf:

Nej, det fungerar inte. -20 görs om till en sträng. xbmc.executebuiltin förväntar sig en integer.

xbmc.executebuiltin('Seek(integer)')

Missförstod dig, trodde du ville ha allt som en sträng.
Får jag skylla på att jag var halvtrött igår kväll?

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av slismetf:

Nej, det fungerar inte. -20 görs om till en sträng. xbmc.executebuiltin förväntar sig en integer.

xbmc.executebuiltin('Seek(integer)')

Citationstecknena i ditt exempel indikerar att det är en String som du vill stoppa in i executebuiltin-funktionen. Även andra exempel jag hittat pekar på detta, exempelvis http://kodi.wiki/view/Built-in_scripting

Även här: http://forum.kodi.tv/showthread.php?tid=243386&pid=2131227

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Sep 2015
Skrivet av Teknocide:

Citationstecknena i ditt exempel indikerar att det är en String som du vill stoppa in i executebuiltin-funktionen. Även andra exempel jag hittat pekar på detta, exempelvis http://kodi.wiki/view/Built-in_scripting

Även här: http://forum.kodi.tv/showthread.php?tid=243386&pid=2131227

Nepp. Det är ingen sträng bara pga enkelcitaten.
Detta fungerar: xbmc.executebuiltin('Seek(-20)')

Detta fungerar inte:
soktid = "'Seek(-20)'"
xbmc.executebuiltin(soktid)

Det verkar som om Kodi bara hoppar över den felaktiga koden, det blir inget felmeddelande i loggen ens (även med debug aktiverat). Jag antar att detta inte var så allmän Python-fråga som jag trodde.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Jan 2004

Ett tips är ju att testa type(soktid), det blir en sträng om du sätter det inom citationstecken, men det kanske är det du vill skicka in?

Fractal Design Define Mini | ASUS Maximus Gene V | Intel Corei7 2700k @ 4.5 GHz | EVGA GTX 680 2GB | Corsair Low-Profile 8Gb | Corsair Force GT120 | Hitatchi 1TB | Seasonic X-560

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011

@slismetf: Om

xbmc.executebuiltin('Seek(-20)')

fungerar borde rimligen

soktid = "Seek(-20)" xbmc.executebuiltin(soktid)

fungera, notera att jag tagit bort apostroftecken från ditt exempel, d.v.s. strängen är Seek(-20) inte 'Seek(-20)' vilket då rimligt borde betyda att även detta fungerar

soktid = -20 xbmc.executebuiltin('Seek({})'.format(soktid))

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

Tack, Yoshmans. Din kod fungerar. Jag antar jag tänkte fel. Konstigt att Kodis funktion fungerar med en siffra som är en sträng? Jag är dock väldigt nybörjare på Python. Fast det är väl möjligt att funktionen tar "-20" och gör om det till en integer?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2011

@slismetf: Det är mycket möjligt att funktionen konverterar str till en int. Python har en inbyggd metod int(variabel) som returnerar variabel som en int, förutsatt att variabel är en eller flera siffra/or.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av slismetf:

Tack, Yoshmans. Din kod fungerar. Jag antar jag tänkte fel. Konstigt att Kodis funktion fungerar med en siffra som är en sträng? Jag är dock väldigt nybörjare på Python. Fast det är väl möjligt att funktionen tar "-20" och gör om det till en integer?

Det är inte konstigt: du skickar in en sträng till funktionen. Strängen innehåller Seek(-20). Allt i en sträng är text; det finns inga strängar där bitar av innehållet har en annan datatyp. Förmodligen kör de eval på strängvärdet rakt av.

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Götet, typ
Registrerad
Okt 2004
Skrivet av slismetf:

Nepp. Det är ingen sträng bara pga enkelcitaten.
Detta fungerar: xbmc.executebuiltin('Seek(-20)')

Detta fungerar inte:
soktid = "'Seek(-20)'"
xbmc.executebuiltin(soktid)

Det verkar som om Kodi bara hoppar över den felaktiga koden, det blir inget felmeddelande i loggen ens (även med debug aktiverat). Jag antar att detta inte var så allmän Python-fråga som jag trodde.

När man programmerar i python så är detta: variabel1 = "tomat" en sträng och även denna: variabel2 = 'gurka'

/M