Idiomatisches

Idiomatisches

am 04.04.2006 10:20:01 von Mirco Wahab

Hallo,

da ich ab und zu wieder die Anwandlung
bekomme, meine Python-Kenntnisse zu
verbessern, habe ich mal in den Python-
challenge (http://www.pythonchallenge.com/)
reingeschaut.

Allerdings fand ich den "Pythonchallenge"
eher eine "Challenge" für die Verwendung von
Python überhaupt ;-)

OK, so far so good. Jeder wie er möchte ;-)

Zjm Thema: zu Level 3 ist mir ein schickes
Perl-Konstrukt eingefallen; es geht
darum, ein "Lösungswort" aus einem
Zeichenkuddelmuddel zu extrahieren
(in __DATA__ steht dieser Zeichensalat):

print split /[^a-z]/, do { local $/; () };

__DATA__
%%$@_$^__#)^)&!_+]!*@&^}@[@%]()%+$&[(_@%+%$*^@$^!+]!&_#)_*}{ }}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@[@&]+!!*{)!}{%+{))])[!^})+)$]#{*+^((@^@ }$[**$&^{$!@#$%)!@(&
+^!{%_$&@^!}$_${)$_#)!({@!)(^}!*^&!$%_&&}&_#&@{)]{+)%*{&*%*& @%$+]!*__(#!*){%&@++
....
....
....


Nun meine Frage dazu. Ist es üblich bzw.
'idiomatisch gebräuchlich', einen do{}-Block
so direkt in eine Liste zu expandieren - oder
sollte man das lassen?

Danke & Grüße

M.

Re: Idiomatisches

am 04.04.2006 12:08:37 von Frank Seitz

Mirco Wahab wrote:

> print split /[^a-z]/, do { local $/; () };
[...]
> Nun meine Frage dazu. Ist es üblich bzw.
> 'idiomatisch gebräuchlich', einen do{}-Block
> so direkt in eine Liste zu expandieren - oder
> sollte man das lassen?

Das ist völlig ok. Ein do-Block liefert, im Gegensatz
zu einem Block ohne do einen Wert und kann an allen Stellen
eingesetzt werden, wo ein Wert (hier: ein Array)
erwartet wird.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Idiomatisches

am 04.04.2006 13:57:42 von Mirco Wahab

Hallo Frank

>> print split /[^a-z]/, do { local $/; () };
>
> Das ist völlig ok. Ein do-Block liefert, im Gegensatz
> zu einem Block ohne do einen Wert und kann an allen Stellen
> eingesetzt werden, wo ein Wert (hier: ein Array)
> erwartet wird.

Danke für den Hinweis. Arbeitet hier in der NG
jemand mit Pe *und* Py?

Ich frage mich inzwischen ein wenig, warum
ich Py lernen sollte (-- wo doch alle so drauf
schwören - it's kewl ;-)

Irgendwie sehen die Perl-Lösungen für die
Py-Challenge schöner aus :-((

Rätsel 5 ist so ein Ding. Ein Python-Data-Dump
von einem 3D-Array mit Zeichen und korrespon-
dierenden Wiederholungen.
(http://www.pythonchallenge.com/pc/def/banner.p)

#!/usr/bin/perl -w
use Inline::Python;

my $B = py_depickle('banner.f');
print "\n", map { $$_[0] x $$_[1] } @$_ for (@$B);

use Inline Python => <<'PYTHON';
import pickle
def py_depickle(f):
return pickle.Unpickler(open('banner.p')).load()
PYTHON

Der gesamte Perl-Code ist sogar
kürzer als das reine Laden der
Datenstruktur in Python.

Nun ja, belassen wirs dabei mit dem Flamewar ;-)

Viele Grüße & Dank

M.

Re: Idiomatisches

am 04.04.2006 19:11:49 von Tony Muler

Mirco Wahab wrote:

> Ich frage mich inzwischen ein wenig, warum
> ich Py lernen sollte (-- wo doch alle so drauf
> schwören - it's kewl ;-)

Der Hype ist vorbei und hat mich nicht mal
periphaer tangiert.

Wenn Du was wirklich neues lernen willst, haette
ich Ruby bzw. Ruby-on-Rails zu bieten. Hat mich
echt vom Hocker gehauen.
Und is at present so kewl, man!

> Irgendwie sehen die Perl-Lösungen für die
> Py-Challenge schöner aus :-((

Perl ist halt post-modern.

T.