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

Permalänk
Medlem

[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)

Permalänk

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);

Permalänk
Medlem
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

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

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

xbmc.executebuiltin('Seek(integer)')

Permalänk
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?

Permalänk
Medlem
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

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
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.

Permalänk

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?

Visa signatur

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

Permalänk
Datavetare

@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))

Visa signatur

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

Permalänk
Medlem

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?

Permalänk
Medlem

@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.

Permalänk
Medlem
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.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
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'

Visa signatur

/M