Самый маленький скрипт на 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
векторизовано

2
Этот совет находится на странице советов по игре в гольф на python codegolf.stackexchange.com/questions/54/… .
Векторизация

4
Это должно начинаться с 0или 2? Я не сильно питон, но мне кажется, что ваши два примера делают разные вещи. Пожалуйста, поправьте меня, если нет.
Geobits

20
print "0 10 100"(двоичный ли это нормально?)
r3mainer

1
@squeamishossifrage не забудьте поиграть в гольф;)
isaacg

Ответы:


37

Python 2 - 12 символов

print 8**999

Десятичное представление всех четных чисел от 0 до 100 можно найти в выходных данных:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Как бонус, так и нечетные числа.


Единственная проблема: он печатает нечетные числа и многое другое.
Seequ

1
@ Зиг, четный и нечетный ... вроде бы все основы охвачены, не знаю, как найти в этом «намного больше». ;)
Пакогомез

Это не первый раз, когда у меня другое мнение, чем у других пользователей. В любом случае мне нравится ваш ответ.
Seequ

@paqogomez четные числа 0-100, нечетные числа и многое другое четные числа> 100
OJFord

Слишком любопытно, чтобы не задавать глупые вопросы, почему конкретно 8 * 999?
0xc0de

31

Python 3, 22 (возможно, не допускается)

Если задача состоит в том, чтобы «создать скрипт Python, который печатает четные числа от 0 до 100», а не «создать скрипт Python, который печатает четные числа от 0 до 100, разделенные новой строкой », то самое короткое решение:

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

Помните, в коде гольф очень важно не накладывать на себя никаких ограничений, которые вам не нужны - делайте то, о чем просит проблема, и не более того.


1
Разве второй ответ ОП в редактировании не заставит вас думать, что он хочет, чтобы он был разделен?
Moop

10
Это вполне возможно, и именно поэтому possibly not allowedв названии. С другой стороны, также возможно, что он / она попал в соответствие с выводом его начальной программы, и забыл начальную спецификацию проблемы. Поскольку я не знаю, в чем дело, я дал этот ответ.
Исаак

22

Python2 26

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

независимое открытие решения @ bitpwner


Я получаю SyntaxError, когда я пытаюсь запустить это. Должна ли верхняя строка этого ответа сказать "Python 2, 26"?

+1, вы, кажется, на 58 секунд быстрее, чтобы опубликовать это решение. :)
Ильмари Каронен

19

Python 2 - 26

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

Основано на советах по exec с умножением строк, которые можно найти в разделе Советы по игре в гольф на Python .


Должен включать 0, см. Решение Спарра.
Исаак

Я получаю 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

Python 2 в * NIX, 24

os.system('seq 0 2 100')

Если вам нужно добавить

import os

Тогда всего 33 символа.


Умный - Это может быть лучше в некоторых случаях. Это зависит от конкретной ОС?
Исаак

4
@isaacg Очень даже так, как os.systemназывает системную программу.
Seequ

3
Если это разрешено, то os.system('a'), потому что у aменя в системе
вызывается

5
@OllieFord seq является частью gnu coreutils. У тебя не так много влияния.
Спарр

4

Python 3, 29

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

Если вы работаете в Python 2 и уже импортировали функцию печати, вам не нужно превращать объект итератора в список, и он становится 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 Спасибо, я обновил его.
IanH

3

Python 2 - 24

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

(на основе решения Bitpwner и Sparr)

В оболочке «_» содержит значение ранее вычисленного выражения


Следует отметить, что это работает только в том случае, если он вставлен в интерактивный режим некоторых интерпретаторов Python (например, он не работает в IPython), а не как скрипт.
Wrzlprmft

ты прав, я забыл упомянуть об этом. (кстати работает в стандартной консоли Python)
le_vine

1
-1 - в вопросе явно упоминается скрипт на python , что означает, что код должен быть записан в файл и выполнен. В противном случае лучшим решением будет просто: range(0,102,2)так как на экране будут показаны все четные числа (плюс несколько запятых и две скобки).
Бакуриу

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)короче.
Исаак

1
@isaacg Обновлен, чтобы отвечать на вопрос, теперь намного дольше, и ему нужно встраивать каждое значение в str (), поскольку соединение убивает его.
Эд Грибель

@Wrzlprmft Спасибо за предложение, не знал, что смогу это сделать! Код изменен, чтобы отразить это новое знание.
Эд Грибель

1

Python 2 - 20 (сомнительно)

Если решение isaacg с пробелами в порядке, то, вероятно, нормальное форматирование списка также:

print range(0,101,2)

Для дальнейшего скручивания правил примените предложение SirBraneDamuj из комментариев:

print range(101)

а вам 16 лет. А что, если их разделяет какой-то лишний мусор?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.