最小的python脚本,可打印偶数0到100


11

我正在研究一个让自己很有趣的问题,即创建一个Python脚本,该脚本打印从0到100的偶数。挑战是使脚本尽可能小。这是我到目前为止所拥有的:

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

当前是60个字节。谁能想到缩小尺寸的方法?


编辑:print(*range(2,101,2),sep='\n')这是30个字节。较小吗?


4
i=2;exec"print i;i+=2;"*50
2014年

2
此技巧位于python高尔夫技巧页面codegolf.stackexchange.com/questions/54/…中
2014年

4
这应该从0或开始2吗?我没有太多的python,但是在我看来,您的两个示例做了不同的事情。如果没有请纠正我。
Geobits 2014年

20
print "0 10 100"(可以执行二进制代码吗?)
r3mainer 2014年

1
@squeamishossifrage不要忘记打出空间;)
isaacg 2014年

Answers:


37

Python 2-12个字符

print 8**999

在输出中可以找到从0到100的所有偶数的十进制表示:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

作为奖励,奇数也可以。


唯一的问题:它会打印奇数,甚至更多。
seequ 2014年

1
@Sieg,偶数和奇数...有点儿涵盖了所有基础,不确定在其中如何找到“更多”。;)
paqogomez

我不是第一次与其他用户有不同的看法。我还是喜欢你的回答。
seequ 2014年

@paqogomez偶数0-100,奇数,还有更多偶数> 100
OJFord

太好奇了,以免问到一个愚蠢的问题,为什么特别是8 * 999?
0xc0de 2014年

31

Python 3、22(可能不允许)

如果挑战是“创建一个从0到100打印偶数的python脚本”,而不是“创建一个从0到100打印偶数的python脚本,以换行符分隔 ”,那么最短的解决方案是:

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

请记住,在代码高尔夫中,不要对自己不必要的任何限制都非常重要-做到问题所要求的,并且不再做。


1
OP在编辑中的第二个答案是否会使您认为他希望换行符分开?
Moop

10
那完全有可能,这possibly not allowed就是标题中的原因。另一方面,也有可能他/她在匹配初始程序的输出时陷入了困境,却忘记了初始问题规范。由于我不知道是哪种情况,我给出了这个答案。
isaacg 2014年

22

的Python2 26

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

@bitpwner解决方案的独立发现


当我尝试运行它时,出现SyntaxError。该答案的最上面是否应该显示“ Python 2、26”?

+1,您发布此解决方案的速度似乎提高了58秒。:)
Ilmari Karonen 2014年

19

Python 2-26

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

基于python高尔夫技巧中关于exec与字符串乘法的技巧


应包括0,请参阅Sparr解决方案。
isaacg 2014年

当我尝试运行它时,出现SyntaxError。该答案的最上面是否应该显示“ Python 2-26”?

13

Python 2,26(可能不允许)

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

没有严格指定,数字的打印顺序。



9

Python 2-20(可能不允许)

这是特定于python 2的,可能会作弊,因为它会打印列表,但由于所有数字最终都出现在屏幕上:

print range(0,101,2)

7

* NIX中的Python 2(24)

os.system('seq 0 2 100')

如果需要添加

import os

然后,总数为33个字符。


聪明-在某些情况下,这可能会更好。它是特定于操作系统的吗?
isaacg 2014年

4
@isaacg就像os.system调用系统程序一样。
seequ 2014年

3
如果这是允许的,然后os.system('a'),因为我曾经有一个叫做程序a与我的系统上所期望的行为..
OJFord

5
@OllieFord seq是gnu coreutils的一部分。您没有那么大的影响力。
Sparr

4

Python 3、29

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

如果您使用的是Python 2,并且碰巧已经导入了print函数,则不必将iterator对象放入列表中,它会变成25个字符:

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

我不知道那是完全公平的。

这是在python 2或3中工作的另一个有趣的想法。

def p(i):
    if i+2:p(i-2);print i
p(100)

1
可以将Python 3版本简化为*a,=map(print,range(0,101,2))使用扩展可迭代解压缩
flornquake

@flornquake谢谢,我已经更新了它。
IanH 2014年

3

Python 2-24

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

(基于bitpwner和Sparr解决方案)

在外壳程序中,“ _”包含先前求值表达式的值


您应该注意,只有粘贴到某些Python解释器的交互模式下(例如,它在IPython中不起作用)并且不能作为脚本,这才有效。
Wrzlprmft

你是对的,我忘了提。(btw在标准的Python控制台中工作)
le_vine 2014年

1
-1-问题明确提到了python 脚本,这意味着代码应写入文件并执行。否则,一个更好的解决方案将是:range(0,102,2)因为这将在屏幕上显示所有偶数(加上一些逗号和两个括号)。
Bakuriu 2014年

1

Python列表理解-39

这使用列表理解,使其更短的一个技巧是将索引乘以2,而不是从0到100并if x % 2进行偶校验。

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

使用地图和@isaacg的建议,最终得到相同的39个字符:

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

编辑:用换行符分隔值后,它不是最短的。


1
这不能回答问题-OP说prints the even numbers from 0 to 100,而不仅仅是生成它们。另外,如果您只想要列表,range(0,101,2)则较短。
isaacg 2014年

1
@isaacg已更新为回答该问题,现在需要更长的时间,需要将每个值嵌入str()中以进行连接将其杀死。
Ed Griebel

@Wrzlprmft感谢您的建议,不知道我能做到!更改了代码以反映此新知识。
Ed Griebel 2014年

1

Python 2-20(可疑)

如果isaacg的以空格分隔的解决方案可以,那么大概的列表格式也可以:

print range(0,101,2)

对于进一步的规则扭曲,请从评论中应用SirBraneDamuj的建议:

print range(101)

您现在16岁。那么,如果有一些多余的垃圾将它们分开怎么办?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.