Werte einer Reihe Multiplizieren

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
Impi
User
Beiträge: 10
Registriert: Sonntag 22. Juni 2008, 19:16

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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 ;_;
Impi
User
Beiträge: 10
Registriert: Sonntag 22. Juni 2008, 19:16

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
Impi
User
Beiträge: 10
Registriert: Sonntag 22. Juni 2008, 19:16

Ah Merci :P
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das geht dann noch einfacher:

Code: Alles auswählen

>>> (2).__mul__(2)
4
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Das scheitert aber an long und float
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Darii hat geschrieben:Das scheitert aber an long und float
Inwiefern? Haben beide ``_mul__``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Antworten