>
== 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"