Hi,
zweierpotenzen = [math.pow(2, 2), math.pow(2, 3)]
zahlen = [range(0, 9)]
zweierpotenzen = [math.pow(2, zahlen)]
Ich möchte alle 2er Potenzen von 0-9 ermitteln.
Zeile 1 tut's.
In Zeile 3 bekomme ich: TypeError: a float is required
Was ist da falsch?
Wie geht's richtig?
Danke
Was ist hier falsch?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hallo,
Bitte benutze die Python-Code-Tags für Python Code. Damit bleibt die Einrückung erhalten und es gibt noch hübsches Synatx-Highlighting.
Zu Deiner Frage: Was erwartet denn `math.pow` als zweiten Parameter? Und was übergibst Du der Funktion?
Benutzt Du Python3? Wenn nein, liefert Dir die Zuweisung von `zahlen` nicht das, was Du willst Ich würde aber auch eher `list` nutzen, anstatt der Kurzform.
Noch ein Hinweis: Du suchst `map`.
Bitte benutze die Python-Code-Tags für Python Code. Damit bleibt die Einrückung erhalten und es gibt noch hübsches Synatx-Highlighting.
Zu Deiner Frage: Was erwartet denn `math.pow` als zweiten Parameter? Und was übergibst Du der Funktion?
Benutzt Du Python3? Wenn nein, liefert Dir die Zuweisung von `zahlen` nicht das, was Du willst Ich würde aber auch eher `list` nutzen, anstatt der Kurzform.
Noch ein Hinweis: Du suchst `map`.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Oder eine `for`-Schleife. Man muss doch nicht gleich mit grossem Kaliber schiessenHyperion hat geschrieben:Noch ein Hinweis: Du suchst `map`.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Naja, ob hier eine List-Comprehension leichter zu verstehen ist?cofi hat geschrieben:Oder eine `for`-Schleife. Man muss doch nicht gleich mit grossem Kaliber schiessenHyperion hat geschrieben:Noch ein Hinweis: Du suchst `map`.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Falsch ist, dass du anscheinend glaubst, man erhält die Rückgabe von `range()` als Liste, sobald man eckige Klammern drumherum setzt. Das stimmt aber nicht. Was du in dem Fall eigentlich willst, bekommst du mittels `list(range(0,9))`. Aber auch diese Umwandlung benötigst du nicht, da die Rückgabe von `range()` bereits in einem "listenartigen" Format vorliegt (kommt auch drauf an, ob du Python 2 oder 3 benutzt) und du sie eigentlich nur richtig verwenden musst.
Und damit komme ich zu deinem zweiten Fehler: Python-Funktionen erkennen nicht auf magische Weise, dass sie sich auf die einzelnen Elemente einer Liste anwenden sollen. Wie ja auch die Fehlermeldung besagt, wird etwas vom Typ `float` erwartet - also eine Zahl und keine Liste. Das Ziel ist es also nun, in einer Schleife die `pow()` Funktion immer wieder aufzurufen, wobei sich das übergebene Argument (also die Zahl) entsprechend ändert.
Ist das irgendwas für die Schule? Hatte ihr `for`-Schleifen schon bzw sagt dir das was?
Und damit komme ich zu deinem zweiten Fehler: Python-Funktionen erkennen nicht auf magische Weise, dass sie sich auf die einzelnen Elemente einer Liste anwenden sollen. Wie ja auch die Fehlermeldung besagt, wird etwas vom Typ `float` erwartet - also eine Zahl und keine Liste. Das Ziel ist es also nun, in einer Schleife die `pow()` Funktion immer wieder aufzurufen, wobei sich das übergebene Argument (also die Zahl) entsprechend ändert.
Ist das irgendwas für die Schule? Hatte ihr `for`-Schleifen schon bzw sagt dir das was?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Da war ich wohl zu voreilig; nur mit `map` kommt man da nicht weiter. Da braucht man dann noch `functools.partial` Also doch eher per List-Comprehension lösbar für einen Anfänger.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Es geht auch mit map.Hyperion hat geschrieben:Da war ich wohl zu voreilig; nur mit `map` kommt man da nicht weiter. Da braucht man dann noch `functools.partial` Also doch eher per List-Comprehension lösbar für einen Anfänger.
Code: Alles auswählen
map(pow,[2]*10,range(10))
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Aber das ist nun nicht wirklich schönhendrikS hat geschrieben: Es geht auch mit map.Code: Alles auswählen
map(pow,[2]*10,range(10))
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion: So schöner?
Code: Alles auswählen
map(pow, itertools.repeat(2, 10), xrange(10))
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Japp, find ich schonBlackJack hat geschrieben:@Hyperion: So schöner?Code: Alles auswählen
map(pow, itertools.repeat(2, 10), xrange(10))
Bei gleicher Basis natürlich umständlich, aber ich biete noch das an:
Code: Alles auswählen
list(starmap(pow, izip(repeat(2, 10), xrange(10))))
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion: Also das wäre mir zu umständlich die Argumente erst mit `izip()` in ein Tupel zu packen, damit sie bei `starmap()` dann wieder ausgepackt werden um die Funktion aufzurufen. Wenn man möglichst lange bei Generatoren bleiben möchte, kann man `map()` auch einfach durch `imap()` ersetzen. Dann kann man sich bei `repeat()` sogar die Anzahl der Wiederholungen sparen, weil das aufhört wenn einer der Eingabeiteratoren am Ende ist.
Code: Alles auswählen
list(imap(pow, repeat(2), xrange(10)))