Seite 1 von 1

Werte einer Reihe Multiplizieren

Verfasst: Freitag 18. Juli 2008, 21:45
von Impi
Moin Moin,
Ich bin grade beim Python lernen und habe mir grade eine Funktion definiert:

Code: Alles auswählen

def pupkey(seq):
    liste = liste(seq)
    zahlen = [int(item)
              for item in liste]
    return int(??)
Ziel soll es sein die Werte aus der der Liste, in dem Fall sind es zwei, miteinander zu Multiplizieren. Habe wie blöd den Operator dazu gesucht aber nix gefunden.
Hoffe auf Hilfe
Mfg Impi

Verfasst: Freitag 18. Juli 2008, 21:47
von BlackVivi

Code: Alles auswählen

>>> reduce(lambda x,y: x*y, [1,2,3,4,5])
120
=DD


Edit:
Ansonsten, wenn du die Operatoren suchst...

Code: Alles auswählen

>>> import operator
>>> operator.mul(2,2)
4
Obwohl man locker mit Lambda arbeiten könnte... oder auch nicht. Wäh, keine Ahnung. BlackJack kommt eh gleich und macht irgendwas besseres ;_;

Verfasst: Freitag 18. Juli 2008, 21:59
von Impi

Code: Alles auswählen

def pupkey(seq):
    liste = list(seq)
    zahlen = [int(item)
              for item in liste]
    return reduce(lambda p,q: p*q, [zahlen])
Bekomme nur die Liste ausgegeben die ich im Hauptprogramm erstellt habe!? :K

Verfasst: Freitag 18. Juli 2008, 22:03
von BlackVivi
Impi hat geschrieben:

Code: Alles auswählen

def pupkey(seq):
    liste = list(seq)
    zahlen = [int(item)
              for item in liste]
    return reduce(lambda p,q: p*q, [zahlen])
Bekomme nur die Liste ausgegeben die ich im Hauptprogramm erstellt habe!? :K
Zahlen ist doch schon eine Liste, du musst sie nicht in eckige Klammern packen.

Verfasst: Freitag 18. Juli 2008, 22:05
von Impi
Ah Merci :P

Verfasst: Freitag 18. Juli 2008, 22:25
von Leonidas
BlackVivi hat geschrieben:

Code: Alles auswählen

>>> reduce(lambda x,y: x*y, [1,2,3,4,5])
120
=DD


Edit:
Ansonsten, wenn du die Operatoren suchst...

Code: Alles auswählen

>>> import operator
>>> operator.mul(2,2)
4
Naja, letzteres ist eben nicht mehr als ``2 * 2`` umständlich geschrieben.

Aber wir können das ja durchaus auch verwenden:

Code: Alles auswählen

>>> import operator
>>> reduce(operator.mul, [1, 2, 3, 4, 5])
120

Verfasst: Samstag 19. Juli 2008, 01:28
von BlackVivi
Leonidas hat geschrieben:Naja, letzteres ist eben nicht mehr als ``2 * 2`` umständlich geschrieben.

Aber wir können das ja durchaus auch verwenden:

Code: Alles auswählen

>>> import operator
>>> reduce(operator.mul, [1, 2, 3, 4, 5])
120
Genau aus diesem Zweck hab ich's ihm ja geschrieben. Hab die Operatoren in dieser "Funktionionsform" eben auch schonmal gesucht und wollte lambda damals nicht verwenden, deswegen...

Verfasst: Samstag 19. Juli 2008, 12:23
von Leonidas
Das geht dann noch einfacher:

Code: Alles auswählen

>>> (2).__mul__(2)
4

Verfasst: Samstag 19. Juli 2008, 14:47
von Darii
Das scheitert aber an long und float

Verfasst: Samstag 19. Juli 2008, 16:47
von Leonidas
Darii hat geschrieben:Das scheitert aber an long und float
Inwiefern? Haben beide ``_mul__``.

Verfasst: Samstag 19. Juli 2008, 17:20
von BlackJack
@Leonidas: Ich denke mal Darii meint das hier:

Code: Alles auswählen

In [15]: reduce(int.__mul__, [1.0, 2.0, 3.0, 4.0, 5.0])
---------------------------------------------------------------------------
<type 'exceptions.TypeError'>             Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

<type 'exceptions.TypeError'>: descriptor '__mul__' requires a 'int' object but received a 'float'
Da ist `operator.mul()` flexibler.