I'm work on a problem which I set myself for fun, which is to create a python script which prints the even numbers from 0 to 100. The challenge is to make the script as small as possible. This is what I have so far:

for x in range(0, 101):
    if (x % 2 == 0):
        print x

Currently it is 60 bytes. Can anyone think of a way to make it smaller?

Edit: print(*range(2,101,2),sep='\n') which is 30 bytes. Any smaller?

  • 4
    \$\begingroup\$ i=2;exec"print i;i+=2;"*50 \$\endgroup\$ – Vectorized Aug 11 '14 at 14:37
  • 2
    \$\begingroup\$ This tip is located in the python golfing tips page codegolf.stackexchange.com/questions/54/…. \$\endgroup\$ – Vectorized Aug 11 '14 at 14:52
  • 4
    \$\begingroup\$ Is this supposed to start at 0 or 2? I don't python much, but it looks to me like your two examples do different things. Please correct me if not. \$\endgroup\$ – Geobits Aug 11 '14 at 16:03
  • 20
    \$\begingroup\$ print "0 10 100" (is binary OK?) \$\endgroup\$ – squeamish ossifrage Aug 11 '14 at 19:13
  • 1
    \$\begingroup\$ @squeamishossifrage don't forget to golf out the space ;) \$\endgroup\$ – isaacg Aug 11 '14 at 19:25

12 Answers 12


Python 2 - 12 characters

print 8**999

The decimal representation of all even numbers from 0 to 100 can be found in the output:


As a bonus, so can the odd numbers.

  • \$\begingroup\$ Only problem: It prints the odd numbers and a lot more too. \$\endgroup\$ – seequ Aug 13 '14 at 16:33
  • 1
    \$\begingroup\$ @Sieg, even and odd... kinda got all the bases covered, not sure how you find "a lot more" in that. ;) \$\endgroup\$ – paqogomez Aug 13 '14 at 17:16
  • \$\begingroup\$ Isn't the first time I have a different opinion than other users. I like your answer anyways. \$\endgroup\$ – seequ Aug 13 '14 at 17:24
  • \$\begingroup\$ @paqogomez even numbers 0-100, the odd numbers, and a lot more even numbers >100 \$\endgroup\$ – OJFord Aug 14 '14 at 10:33
  • \$\begingroup\$ Too curious to avoid asking a dumb Q, why specifically 8*999? \$\endgroup\$ – 0xc0de Aug 14 '14 at 12:06

Python 3, 22 (Possibly not allowed)

If the challenge is "to create a python script which prints the even numbers from 0 to 100" and not "to create a python script which prints the even numbers from 0 to 100, newline separated", then the shortest solution is:


Remember, it's very important in code golf not to put any limitations on yourself you don't have to - do what the problem asks, and no more.

  • 1
    \$\begingroup\$ Wouldn't OP's second answer in the edit make you think he wanted it newline separated? \$\endgroup\$ – Moop Aug 11 '14 at 17:31
  • 10
    \$\begingroup\$ That's entirely possibly, and is why possibly not allowed is in the title. On the other hand, it's also possible that he/she got caught up in matching the output of his initial program, and forgot the initial problem spec. Since I don't know which is the case, I gave this answer. \$\endgroup\$ – isaacg Aug 11 '14 at 17:33

Python2 26

i=0;exec"print i;i+=2;"*51

independent discovery of @bitpwner's solution

  • \$\begingroup\$ I get a SyntaxError when I try to run that. Should this answer's top line say "Python 2, 26"? \$\endgroup\$ – user30594 Aug 12 '14 at 0:53
  • \$\begingroup\$ +1, you appear to have been 58 seconds faster to post this solution. :) \$\endgroup\$ – Ilmari Karonen Aug 17 '14 at 14:47

Python 2 - 26

i=0;exec"print i;i+=2;"*51

Based on the tip on exec with string multiplication found at Tips for golfing in Python.

  • \$\begingroup\$ Should include 0, see Sparr's solution. \$\endgroup\$ – isaacg Aug 11 '14 at 17:23
  • \$\begingroup\$ I get a SyntaxError when I try to run that. Should this answer's top line say "Python 2 - 26"? \$\endgroup\$ – user30594 Aug 12 '14 at 2:57

Python 2, 26 (possibly not allowed)

while i:i-=2;print i

It wasn’t strictly specified, in which order the numbers were to be printed.


Python 2, 28

for i in range(51):print 2*i

Python 2 - 20 (Possibly not allowed)

This is python 2 specific and probably cheating since it prints the list, but since all numbers end up on the screen:

print range(0,101,2)

Python 2 in *NIX, 24

os.system('seq 0 2 100')

If you need to add

import os

Then the total is 33 characters.

  • \$\begingroup\$ Clever - This might well be superior in some cases. Is it OS specific? \$\endgroup\$ – isaacg Aug 11 '14 at 19:54
  • 4
    \$\begingroup\$ @isaacg Very much so, as os.system calls a system program. \$\endgroup\$ – seequ Aug 11 '14 at 20:31
  • 3
    \$\begingroup\$ If that's allowed, then os.system('a'), because I happen to have a program called a with the desired behaviour on my system.. \$\endgroup\$ – OJFord Aug 13 '14 at 12:33
  • 5
    \$\begingroup\$ @OllieFord seq is part of gnu coreutils. You don't have quite as much clout. \$\endgroup\$ – Sparr Aug 14 '14 at 1:55

Python 3, 29


If you're in Python 2 and happen to have already imported the print function, you don't have to make the iterator object into a list and it becomes 25 characters:


I don't know that that's entirely fair though.

Here's another fun idea that works in python 2 or 3. It's a tad longer.

def p(i):
    if i+2:p(i-2);print i
  • 1
    \$\begingroup\$ The Python 3 version can be shortened to *a,=map(print,range(0,101,2)) using Extended Iterable Unpacking. \$\endgroup\$ – flornquake Aug 13 '14 at 23:12
  • \$\begingroup\$ @flornquake Thanks, I've updated it. \$\endgroup\$ – IanH Aug 14 '14 at 1:47

Python 2 - 24

0;exec"_+=2;print _;"*50

(based on bitpwner and Sparr solution)

In the shell, "_" contains the value of the previously evaluated expression

  • \$\begingroup\$ You should note that this only works, if pasted into the interactive mode of some Python interpreters (e.g., it does not work in IPython) and not as a script. \$\endgroup\$ – Wrzlprmft Aug 12 '14 at 12:10
  • \$\begingroup\$ you're right, i forgot to mention that. (btw works in the standard Python console) \$\endgroup\$ – le_vine Aug 12 '14 at 12:13
  • 1
    \$\begingroup\$ -1 -- The question explicitly mentions a python script, which means the code should be written to a file and executed. Otherwise a better solution would simply be:range(0,102,2) since this would display all the even numbers (plus some commas and two brackets) on the screen. \$\endgroup\$ – Bakuriu Aug 13 '14 at 11:41

Python List Comprehension - 39

This uses a list comprehension, one trick to make it shorter is to multiply the index by 2 rather than going from 0 to 100 and a trailing if x % 2 check for even.

print'\n'.join(`2*x`for x in range(51))

Using a map and @isaacg's suggestion it ends up being the same 39 characters:


Edit: After separating values by newline it is by far not the shortest.

  • 1
    \$\begingroup\$ This doesn't answer the question - OP says prints the even numbers from 0 to 100, not just generate them. Also, if you just want the list, range(0,101,2) is shorter. \$\endgroup\$ – isaacg Aug 11 '14 at 19:51
  • 1
    \$\begingroup\$ @isaacg Updated to answer the question, now much longer, needing to embed each value in str() for the join kills it. \$\endgroup\$ – Ed Griebel Aug 11 '14 at 21:11
  • \$\begingroup\$ @Wrzlprmft Thanks for the suggestion, didn't know I could do that! Code changed to reflect this new knowledge. \$\endgroup\$ – Ed Griebel Aug 12 '14 at 15:01

Python 2 - 20 (questionable)

If isaacg's space-separated solution is OK, then presumably the normal list formatting is as well:

print range(0,101,2)

For further rule-twisting, apply SirBraneDamuj's suggestion from the comments:

print range(101)

and you are at 16. So what if there's some extra garbage separating them?


protected by Community Dec 5 '14 at 22:00

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.