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

Freitag 18. Juli 2008, 21:45

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:

Freitag 18. Juli 2008, 21:47

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

Freitag 18. Juli 2008, 21:59

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:

Freitag 18. Juli 2008, 22:03

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

Freitag 18. Juli 2008, 22:05

Ah Merci :P
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 18. Juli 2008, 22:25

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

Samstag 19. Juli 2008, 01:28

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 19. Juli 2008, 12:23

Das geht dann noch einfacher:

Code: Alles auswählen

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

Samstag 19. Juli 2008, 14:47

Das scheitert aber an long und float
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 19. Juli 2008, 16:47

Darii hat geschrieben:Das scheitert aber an long und float
Inwiefern? Haben beide ``_mul__``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Samstag 19. Juli 2008, 17:20

@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