<> == Discussion == Perl coders are proud that Perl's motto is "There's more than one way to do it."<
> In comparison, Python is sometimes stereotyped as "There's only one way to do it", but this is of course not true. The Zen of Python, accessed via {{{ import this }}} includes the maxims:<
> ''Beautiful is better than ugly.''<
> ''Explicit is better than implicit.''<
> ''Simple is better than complex.''<
> ''Complex is better than complicated.''<
> ''Flat is better than nested.''<
> ''Sparse is better than dense.''<
> ''Readability counts.''<
> ''If the implementation is hard to explain, it's a bad idea.''<
> ''There should be one-- and preferably only one --obvious way to do it.''<
> The net effect is that there is a limited set of good solutions for a given problem, and users are strongly encouraged to use them. While Python attempts to discourage bad practices, and its indentation-based block structure and limited anonymous blocks (lambdas) make certain techniques difficult, it is possible to produce many more bad solutions than good for a given problem. Please Feel Free to add/reorder/reallocate examples. == The Problem == Your signature block (up to four lines of 78 characters each) needs code that prints "Just another Pythoneer". == The Limited Set of Good Solutions == {{{ #!python print "Just another Pythoneer" }}} (Though someone may point out that as a Python user following correct Pythonic practice, you are more correctly a ''Pythonista''... and give you a brief 6000 word essay on the historical debate over the naming of Python Users and the etymology of the root ''Python'' and the stem ''-ista''... and advise you against using the combination in an impromptu Spanish examination) == The Larger Set of Not-So-Good Solutions == === Normal Printing/Concatination === {{{ #!python print "Just", "another", "Pythoneer" }}} {{{ #!python print "Just "\ "another "\ "Pythoneer" }}} {{{ #!python j = "Just " a = "another " p = "Pythoneer" print j+a+p }}} {{{ #!python import sys; sys.stdout.write("Just another Pythoneer\n") }}} === Substitution === {{{ #!python print '''%s %s %s''' % ("Just", "another", "Pythoneer") }}} {{{ #!python print '%(j)s %(a)s %(py)s' % { "j": "Just", "a": "another", \ "pl": "Perl Hacker", "py": "Pythoneer", "c": "C Coder", \ "f": "Fortran Freak", "turtle" : "Logo Lover" } }}} {{{ #!python class JAPy(int): def __str__(self): return "%s"*5%("Just",chr(self),"another", chr(self), "Pythoneer") print JAPy(32) }}} {{{ #!python class JAPy(int): pass def s(s): s+=1; return "Just" + chr(s) + "another" + chr(s) + "Pythoneer" n, JAPy.__str__ = JAPy(31), s print n }}} {{{ #!python print "Just another Perl Hacker".replace("Perl Hacker", "Pythoneer") }}} === Reversal === {{{ #!python x = ['r','e','e','n','o','h','t','y','P',' ','r','e','h','t','o','n','a',' ', 't','s','u','J'] x.reverse() print "".join(x) }}} {{{ #!python print "".join(['r','e','e','n','o','h','t','y','P',' ','r','e','h','t','o','n', 'a',' ','t','s','u','J'][::-1]) }}} {{{ #!python print "reenohtyP rehtona tsuJ"[::-1] }}} {{{ #!python print "".join([x for x in list('reenohtyP rehtona tsuJ')[::-1]]) }}} {{{ #!python print "".join([x for x in list('reenohtyP rehtona tsuJ')][::-1]) }}} === Iteration === {{{ #!python import sys for c in "Just another Pythoneer\n": sys.stdout.write(c) }}} {{{ #!python import sys; [sys.stdout.write(c) for c in "Just another Pythoneer\n"] }}} {{{ #!python x = ["Just", "another", "Pythoneer"] while x: print x[0], ; x = x[1:] print }}} {{{ #!python x = ["Pythoneer", "another", "Just",] while x: print x[-1], ; x.pop() print }}} {{{ #!python import random, sys; x = "Just another Pythoneer\n" while x: y = random.choice(x); if y == x[0]: sys.stdout.write(y); x = x[1:] }}} === Slicing and Indexing === {{{ #!python print "Just another Pythoneer and not a Perl Hacker".split(" and")[0] }}} {{{ #!python print "I'm just another Pythoneer".split(" ",1)[1].capitalize() }}} {{{ #!python import re a = ["Pythoneer", "extra", "Just", "words", "another", "Hello!"] m = re.match("(?P\d+).(?P\d+).(?P\d+)", "1A5l2") print a[m.start("one")], a[m.start("two")], a[m.start("three")] }}} {{{ #!python #Sometimes_code_does_not_really_need_to_have_syntacally_significant_whitespace g,u,n=range(3),"Why don't I use Java or Perl?",lambda(x),y:reduce(x.__add__,y) print"".join([u[P:H+P]for(H,P)in(zip(n(list,n(tuple,[([d],n(list,[[1+c%2]*(c+1 )for(c)in(g)]))for(d)in(g)])[1:]),[16,12,8,19,6,5,8,1,25,23,2,8,1,5,14,25]))]) }}} {{{ #!python import platform as p; d=[list(x)for x in open(p.__file__[:-1])]; a=d[28]+d[12] for f,t in zip([0,5,7,8,10,12,19,20,21,22],[15,6,9,14,19,41,25,24,23,99]): del a[f:t]; a[8]=a[8].lower() print "".join(a) }}} === Recursion === {{{ #!python japy = lambda x: isinstance(x,dict) and x.keys()[0] + japy(x.values()[0]) or x print japy({"Just ": {"another ": "Pythoneer"}}) }}} {{{ #!python def k(x): if type(x) == type({}): return x.keys()[0] + k(x.values()[0]) return x print k({"Just ": {"another ": "Pythoneer"}}) }}} === Decoding === {{{ #!python import uu, StringIO s = StringIO.StringIO(); uu.decode(StringIO.StringIO('begin 666 '+\ '-\01262G5S="!A;F]T:&5R(%!Y=&AO;F5E<@ \012 \012end\012'), s) print s.getvalue() }}} {{{ #!python d,o=0x3B55094199ACFB742DB37F3F97B11175C0C8EL,[] while d: d,m=divmod(d,100);o.append(chr(m+32)) print "".join(o) }}} {{{ #!python def japy(d=0x3B55094199ACFB742DB37F3F97B11175C0C8EL): while d: d,m=divmod(d,100);yield m+32 print "".join([chr(x) for x in japy()]) }}} {{{ #!python import pickle; print pickle.loads("S'Just another Pythoneer'\012p0\012.") }}} {{{ #!python print u"Whfg nabgure Clgubarre".encode('rot13') }}} {{{ #!python d,n=dict(zip("0123456789ABx"," aehnosturyPJ")), 10157833755785421529629225 print "".join([d[c] for c in str(hex(n))[:-1]]).strip() }}} === Exception Handling === {{{ #!python try: vars()["Just another Pythoneer"] except KeyError, e: print eval(str(e)) }}} {{{ #!python try: raise "Just another Pythoneer" except: print sys.exc_info()[0] }}} {{{ #!python try: __import__("Just another Pythoneer") except ImportError, m: print str(m)[-22:] }}} === Introspection === {{{ #!python """Just another Pythoneer""" print __doc__ }}} {{{ #!python class Print: def __call__(self): print def __getattr__(self, name): print name, ; return self Print().Just.another.Pythoneer() }}} {{{ #!python class JAPy: pass def i(self,x="Just another Pythoneer"): pass def s(self): return self.__init__.func_defaults[0] print JAPy.__dict__.update({"__init__":i,"__str__":s}) or JAPy() }}} {{{ #!python class func_defaults: func_defaults = "Just another Pythoneer";func_defaults=lambda \ func_defaults = func_defaults:func_defaults.func_defaults.func_defaults[0] print func_defaults.func_defaults(func_defaults()) }}} {{{ class func_defaults: func_defaults = "Just another Pythoneer" def func_defaults(func_defaults=func_defaults):pass func_defaults,=func_defaults().func_defaults.func_defaults;print func_defaults }}} {{{ #!python class Just_another_Pythoneer(object): def __init__(self): print " ".join(self.__class__.__name__.split("_")) Just_another_Pythoneer() }}} {{{ #!python def Just_another_Pythoneer(fn): print fn.func_name.replace("_"," ") Just_another_Pythoneer(Just_another_Pythoneer) }}} {{{ #!python def _(Just, another, Pythoneer):_ print " ".join(_.func_code.co_varnames) }}} {{{ #!python def f(z): '''Just another Pythoneer (and remember to document your code!)''' pass print f.__doc__[:22] }}} === Runtime Code === {{{ #!python exec "print 'Just another Pythoneer'" }}} {{{ #!python x = compile("print 'Just another Pythoneer'\n", "japy", "single") eval(x) }}} == Credits == AndrewDalke<
> HansNowak<
> "Snippet 181"<
> TaroOgawa<
> KazuoMoriwaka<
> "just another Pythoneer"