ASE Script Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kornyclown

Was is hierdran falsch:

Code: Alles auswählen

import android

droid = android.Android()

x = droid.getInput('Titel', 'Betrag in Euro: ')

y = droid.getInput('Titel', 'Wieviel Prozent: ')

betrag = x/100*y
gesamt = x+betrag
print str("Der Zuschlag betreagt") + int(betrag + str(Euro)
print str("Der gesamte Betrag ist") + int(gesamt) + str(Euro)

droid.dialogShow()
TypeError: unsopported operand type(s) for /: 'Result' and 'int'

Das Skript soll halt nen beliebigen Euro Betrag vom Nutzer einlesen, dann einen beliebigen Prozentwert und soll dann nur den daraus resultierenden Betrag ausgeben und den errechneten Eurobetrag + den Ausgangswert.
Zum Beispiel:
100€
19%
Der Zuschlag betraegt 19 Euro
Der gesamte Betrag ist 119 Euro
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

  • getInput liefert Werte des Typs Result zurück nicht vom Typ int
  • Euro ist eine undefinierte Variable
  • Bei

    Code: Alles auswählen

    int(betrag
    fehlt die Klammer
kornyclown

Ah, ja ok. Die letzten beiden sind Schreibfehler von mir, im Skript selbst isses richtig.

Muss ich jetzt das Result nach int konvertieren und wenn ja wie? Beziehungsweise was ist nötig um das Script so zum Laufen zu kriegen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

kornyclown hat geschrieben: Muss ich jetzt das Result nach int konvertieren und wenn ja wie? Beziehungsweise was ist nötig um das Script so zum Laufen zu kriegen?
@1: Ja, denn der Interpreter sagt Dir ja, dass er eine Division zwischen einem `Result` und einem `int` nicht durchführen kann ;-) Das Wie wird Dir sicherlich die Doku sagen!
@2: s. @1 ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
kornyclown

ok, danke.
Wonach such ich denn da am besten?
Denn Google:
"python Result convert int"
"python Result object"
"python convert Result"
"python doc"

haben mich nicht schlauer gemacht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

k.A.! Wie hast Du denn das obige Script entwickelt? Dazu musst Du doch irgend eine Dokumentation benutzt haben? In der sollte ja nun auch etwas über den `Result`-Typen zu finden sein.

Mit Standard-Python hat das ja nichts zu tun! Das ist schon etwas Android spezielles.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Zuerst einmal, ASE heißt schon seit einiger Zeit SL4A (Scripting Layer for Android, http://code.google.com/p/android-scripting/)

Und dann findest du in der Doku dazu folgendes:
All SL4A API calls return an object with three fields:

- id: a strictly increasing, numeric id associated with the API call.
- result: the return value of the API call, or null if there is no return value.
- error: a description of any error that occurred or null if no error occurred.
Für dein Script heißt das z.B. für x:

Code: Alles auswählen

x = droid.getInput('Titel', 'Betrag in Euro: ').result
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
kornyclown

ms4py hat geschrieben:Zuerst einmal, ASE heißt schon seit einiger Zeit SL4A (Scripting Layer for Android, http://code.google.com/p/android-scripting/)
Oh, das wusste ich noch garnich. Gut zu wissen danke.
ms4py hat geschrieben: Für dein Script heißt das z.B. für x:

Code: Alles auswählen

x = droid.getInput('Titel', 'Betrag in Euro: ').result
100% gut, es funktioniert

Aber warum muss ich denn

Code: Alles auswählen

betrag = x/100*y
gesamt = x+betrag
print "Der Zuschlag betreagt") + str(betrag) + "Euro"
print "Der gesamte Betrag ist") + str(gesamt) + "Euro"

droid.dialogShow()
machen?
Also die Frage bezieht sich auf das

Code: Alles auswählen

... str(betrag) + ...
... str(gesamt) + ...
Ich dachte wenn ich str() mache dann weise ich die Variable "betrag" dem Datentyp "String" zu, was ja falsch wäre weil ich ja eine Zahl haben will.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Mit dem + hängst du Zeichenketten aneinander. Bevor du eine Zahl an eine Zeichenketten dranhängen kannst muss du die Zahl erst in eine Zeichenkette umwandeln. Außerdem hast du im obigen Beispiel wieder mal (mindestens eine) Klammer falsch gesetzt. :)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Außerdem sollte man Zeichenketten auch nicht mit + konkatenieren, sondern mit *String Formatting* arbeiten. Schaue dir doch mal das entsprechende Kapitel im Python Tutorial an. Ein Blick da hinein wäre im Allgemeinen sowieso angebracht, ich habe den Eindruck, dass dir noch einige notwendige Grundlagen in Python fehlen...
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
kornyclown

...Bevor du eine Zahl an eine Zeichenketten dranhängen kannst muss du die Zahl erst in eine Zeichenkette umwandeln...

Ah, ok jetzt hab ichs. War n denkfehler von mir.
Schaue dir doch mal das entsprechende Kapitel im Python Tutorial an....ich habe den Eindruck, dass dir noch einige notwendige Grundlagen in Python fehlen...
Ja, da hast du recht. Meine Haupttätigkeit als Grafiker lässt leider nur Zeit für ein ambitioniertes Hobbyskripting. Ich lese mich geduldig durch "Das umfassende Python Handbuch" von Galileo Computing durch aber das braucht noch Zeit.
"...das entsprechende Kapitel im Python Tutorial an..."
Meinst du ein bestimmtes Tutorial?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das Pythonbuch von Galileo Computing geniesst hier im Forum keinen bes. guten Ruf (ich persönlich halte auch von einigen anderen Büchern des Verlages wenig). Wenn Du mehr darüber wissen willst, hilft Dir die Forumsuche weiter.

Mit "Tutorial" ist schlicht das offizielle Pythontutorial gemeint (nehme ich an), das es auch für die 3er-Version gibt und auf Deutsch. Andere Versionen gibt es auch noch - zum Teil veraltet.

Jedenfalls, wenn man das Tutorial durcharbeitet - was sooo lange nicht dauert - ist man schon mal ein gutes Stück weiter.

HTH
Christian
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

kornyclown hat geschrieben: Ja, da hast du recht. Meine Haupttätigkeit als Grafiker lässt leider nur Zeit für ein ambitioniertes Hobbyskripting. Ich lese mich geduldig durch "Das umfassende Python Handbuch" von Galileo Computing durch aber das braucht noch Zeit.
Von diesem Buch wird in diesem Forum generell abgeraten! Gründe dazu findest Du in diversen Threads. Lies doch lieber "A Byte of Python", "Dive into Python", "Learn Python the hard way" usw.
kornyclown hat geschrieben: "...das entsprechende Kapitel im Python Tutorial an..."
Meinst du ein bestimmtes Tutorial?
Ja, das offizielle. Das findest Du in der Dokumentation.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
kornyclown

Cool, danke. Wenn das hier empfohlen wird dann werd ich mich da mal dran setzen, auch wenn mir "learn Python the hard way" etwas Angst macht.
Aber zumindest war das Python Handbuch von Galileo Computing gut genug um mein Interesse zu wecken....is ja auch was wert.
Antworten