# Smallest python script to print even numbers 0 to 100

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?

• i=2;exec"print i;i+=2;"*50 Aug 11, 2014 at 14:37
• This tip is located in the python golfing tips page codegolf.stackexchange.com/questions/54/…. Aug 11, 2014 at 14:52
• 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. Aug 11, 2014 at 16:03
• print "0 10 100" (is binary OK?) Aug 11, 2014 at 19:13
• @squeamishossifrage don't forget to golf out the space ;) Aug 11, 2014 at 19:25

# Python 2 - 12 characters

print 8**999


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

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672


As a bonus, so can the odd numbers.

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

print(*range(0,101,2))


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.

• Wouldn't OP's second answer in the edit make you think he wanted it newline separated?
– Moop
Aug 11, 2014 at 17:31
• 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. Aug 11, 2014 at 17:33

# Python2 26

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


independent discovery of @bitpwner's solution

• I get a SyntaxError when I try to run that. Should this answer's top line say "Python 2, 26"?
– user30594
Aug 12, 2014 at 0:53
• +1, you appear to have been 58 seconds faster to post this solution. :) Aug 17, 2014 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.

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

# Python 2, 26 (possibly not allowed)

i=102
while i:i-=2;print i


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

# 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, 28

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


# Python 2 in *NIX, 24

os.system('seq 0 2 100')


import os


Then the total is 33 characters.

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

# Python 3, 29

*a,=map(print,range(0,101,2))


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:

map(print,range(0,101,2))


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
p(100)

• The Python 3 version can be shortened to *a,=map(print,range(0,101,2)) using Extended Iterable Unpacking. Aug 13, 2014 at 23:12
• @flornquake Thanks, I've updated it.
– IanH
Aug 14, 2014 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

• 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. Aug 12, 2014 at 12:10
• you're right, i forgot to mention that. (btw works in the standard Python console)
– 6160
Aug 12, 2014 at 12:13
• -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. Aug 13, 2014 at 11:41

# 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?

# 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*xfor x in range(51))


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

print'\n'.join(map(str,range(0,101,2)))


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

• 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. Aug 11, 2014 at 19:51
• @isaacg Updated to answer the question, now much longer, needing to embed each value in str() for the join kills it. Aug 11, 2014 at 21:11
• @Wrzlprmft Thanks for the suggestion, didn't know I could do that! Code changed to reflect this new knowledge. Aug 12, 2014 at 15:01

In my case, I use list comprehension (in Python 3.9). < Sorry, I came late but I hope it makes sense.>

even_numbers = [x for x in range(100) if x % 2 == 0]
print(even_numbers)

• Welcome to Code Golf! This site is for competitive programming, so we require answers to make a serious attempt at golfing. Make sure to read our tips questions if you want some hints! Apr 20, 2021 at 21:56