Eine kleine kurze 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
destroyed
User
Beiträge: 2
Registriert: Samstag 7. Januar 2012, 12:51

Hallo,

ich brauche bitte etwas Hilfe bei einem Ausdruck mit ich als "nicht Python Kenner" nichts anfangen kann. Im Moment bin ich dabei ein Python Script in eine für mich brauchbare .NET Anwendung zu übertragen und verzweifle an einem Punkt.

Die Zeile aus dem Orignialscript lautet:

Code: Alles auswählen

index += int(ceil( floor(self.width /pow(2, self.maxZoom - i)) / self.tileSize ) ) * \
         int(ceil( floor(self.height/pow(2, self.maxZoom - i)) / self.tileSize ) )
Was bedeutet bzw. macht dieses " * \ " am Ende der ersten Zeile?

Danke und Gruß,
destroyed
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Der Thread-Titel ist ganz schön mies gewählt. Der Code sieht auch komisch aus, überflüssige int-Konvertierungen…
destroyed hat geschrieben:Was bedeutet bzw. macht dieses " * \ " am Ende der ersten Zeile?
Das Backslash bedeutet einfach nur, dass der Python-Interpreter in der nächsten Zeile weiterlesen soll.
destroyed
User
Beiträge: 2
Registriert: Samstag 7. Januar 2012, 12:51

Danke für die schnelle Hilfe!
Dann liegt das Problem wohl an etwas anderem wenn dies nur eine normale Multiplikation ist.
problembär

destroyed hat geschrieben:Was bedeutet bzw. macht dieses " * \ " am Ende der ersten Zeile?

Danke und Gruß,
destroyed
Doch, ist einfache Multiplikation. Du kannst Dir das Ganze ungefähr so vorstellen:

Code: Alles auswählen

#!/usr/bin/python

from math import *

class Whatever(object):

    def __init__(self):

        self.width = 800
        self.height = 600
        self.maxZoom = 10
        self.tileSize = 20
        index = 1
        i = 1

        index += int(ceil( floor(self.width /pow(2, self.maxZoom - i)) / self.tileSize ) ) * int(ceil( floor(self.height/pow(2, self.maxZoom - i)) / self.tileSize ) )

        print index

app = Whatever()
ceil(), pow() usw. kommen aus dem math-Modul, das durch den Sternchenimport oben eingebunden wurde. Sternchenimport sollte man eigentlich besser vermeiden, sondern das Modul lieber ausschreiben, z.B.:

Code: Alles auswählen

import math
print math.pow(5, 2)
print math.ceil(25.6)
usw.

HTH
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

PEP-8 lässt grüßen.

Man kann auch einzelne Objekte importieren:

Code: Alles auswählen

from math import ceil, floor, pow
the more they change the more they stay the same
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

problembär hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python

from math import *
[...]
Argghhhhh! Sternchen-Import!

Bitte extrem aufpassen wenn man so etwas verwendet. Ein "from os import *" hat schon manchen überrascht, der anschließend open verwenden wollte.
problembär

/me hat geschrieben:
problembär hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python

from math import *
[...]
Argghhhhh! Sternchen-Import!
... und wieder nicht richtig gelesen.

Im Code von destroyed standen ceil(), pow() usw. ohne Modulnamen. Da wollte ich ihm erklären, wo die hergekommen sein könnten und wie. Durch Sternchenimport (den ich sonst nicht mache (s.o.)) oder wie von Dav1d dargestellt.
Was bei destroyed nun genau stand, wissen wir nicht. Mein Tipp: Es war Sternchenimport.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich muss problembär in diesem Falle mal Recht geben - auch wenn er den Hinweis auf die *-Importe auch direkt zu Beginn hätte geben können und in seinem Code diese dann hätte vermeiden können.

Allerdings verstehe ich nicht, wieso Du überhaupt darauf zu sprechen kommst - der OP hatte doch gar keine Frage zu den einzelnen Funktionen!?! Zumindest lese ich das nicht aus seiner Frage heraus.

Aus seinem zweiten Posting folgere ich eher, dass der Code nicht läuft oder ein falsches Ergebnis produziert. Das könnte an der Division liegen, wenn es sich um Python 2.x handelt und kein `from __future__ import division` eingebunden ist...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Oder vielleicht eher umgekehrt denn er möchte ja anscheinend diesen Python-Code der nicht von ihm ist, in eine andere Sprache „übersetzen“ und das `int`/`int` wieder `int` ergibt, ist ja in einigen Sprachen so.
Antworten