Kleinstes Python-Skript zum Drucken von geraden Zahlen von 0 bis 100

11

Ich arbeite an einem Problem, das ich mir zum Spaß gesetzt habe, nämlich ein Python-Skript zu erstellen, das die geraden Zahlen von 0 bis 100 ausgibt. Die Herausforderung besteht darin, das Skript so klein wie möglich zu gestalten. Das habe ich bisher:

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

Derzeit sind es 60 Bytes. Kann sich jemand einen Weg überlegen, es kleiner zu machen?


Edit: print(*range(2,101,2),sep='\n')das sind 30 Bytes. Noch kleiner?

Benedict Lewis
quelle
4
i=2;exec"print i;i+=2;"*50
Vectorized
2
Dieser Tipp befindet sich auf der Seite mit den Python- Golftipps unter codegolf.stackexchange.com/questions/54/… .
Vectorized
4
Soll das um 0oder anfangen 2? Ich pythoniere nicht viel, aber es sieht für mich so aus, als ob Ihre beiden Beispiele verschiedene Dinge tun. Bitte korrigieren Sie mich, wenn nicht.
Geobits
20
print "0 10 100"(Binär in Ordnung?)
Squeamish Ossifrage
1
@squeamishossifrage Vergessen Sie nicht, Golf im Freien zu spielen;)
isaacg

Antworten:

37

Python 2 - 12 Zeichen

print 8**999

Die dezimale Darstellung aller geraden Zahlen von 0 bis 100 finden Sie in der Ausgabe:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Als Bonus können auch die ungeraden Zahlen.

Feersum
quelle
Einziges Problem: Es druckt die ungeraden Zahlen und vieles mehr.
Siehe auch
1
@ Sieg, gerade und ungerade ... irgendwie wurden alle Grundlagen abgedeckt, nicht sicher, wie Sie "viel mehr" darin finden. ;)
Paqogomez
Das ist nicht das erste Mal, dass ich eine andere Meinung als andere Benutzer habe. Ich mag deine Antwort trotzdem.
Siehe auch
@paqogomez gerade Zahlen 0-100, die ungeraden Zahlen und viel mehr gerade Zahlen> 100
OJFord
Zu neugierig, um nicht ein dummes Q zu fragen, warum speziell 8 * 999?
0xc0de
31

Python 3, 22 (Möglicherweise nicht erlaubt)

Wenn die Herausforderung darin besteht, "ein Python-Skript zu erstellen, das die geraden Zahlen von 0 bis 100 ausgibt " und nicht "ein Python-Skript zu erstellen, das die geraden Zahlen von 0 bis 100, durch Zeilenumbrüche getrennt , ausgibt ", lautet die kürzeste Lösung:

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

Denken Sie daran, dass es beim Code-Golf sehr wichtig ist, sich nicht einzuschränken, sondern das zu tun, was das Problem verlangt, und nicht mehr.

isaacg
quelle
1
Würde die zweite Antwort von OP in der Bearbeitung nicht den Eindruck erwecken, dass er eine Trennung der Zeilenumbrüche wollte?
Moop
10
Das ist durchaus möglich und steht deshalb possibly not allowedim Titel. Andererseits ist es auch möglich, dass er / sie in die Ausgabe seines ursprünglichen Programms verwickelt ist und die ursprüngliche Problemspezifikation vergessen hat. Da ich nicht weiß, was der Fall ist, gab ich diese Antwort.
isaacg
22

Python2 26

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

unabhängige Entdeckung der @ bitpwner-Lösung

Sparr
quelle
Ich bekomme einen SyntaxError, wenn ich versuche, das auszuführen. Sollte in der obersten Zeile dieser Antwort "Python 2, 26" stehen?
+1, Sie scheinen 58 Sekunden schneller gewesen zu sein, um diese Lösung zu posten. :)
Ilmari Karonen
19

Python 2 - 26

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

Basierend auf dem Tipp zu Exec mit String-Multiplikation bei Tips for Golfing in Python .

Vektorisiert
quelle
Sollte 0 enthalten, siehe Sparrs Lösung.
isaacg
Ich bekomme einen SyntaxError, wenn ich versuche, das auszuführen. Sollte in der obersten Zeile dieser Antwort "Python 2 - 26" stehen?
13

Python 2, 26 (möglicherweise nicht erlaubt)

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

Es wurde nicht genau festgelegt, in welcher Reihenfolge die Nummern gedruckt werden sollten.

Wrzlprmft
quelle
9

Python 2, 28

for i in range(51):print 2*i
fsfd1100
quelle
9

Python 2 - 20 (Möglicherweise nicht erlaubt)

Dies ist Python 2-spezifisch und wahrscheinlich ein Betrug, da die Liste gedruckt wird, aber alle Zahlen auf dem Bildschirm angezeigt werden:

print range(0,101,2)
hacatu
quelle
7

Python 2 in * NIX, 24

os.system('seq 0 2 100')

Wenn Sie hinzufügen müssen

import os

Dann beträgt die Summe 33 Zeichen.

Ken A
quelle
Clever - Dies kann in manchen Fällen durchaus überlegen sein. Ist es betriebssystemspezifisch?
Isaacg
4
@isaacg Sehr gerne, da os.systemruft ein Systemprogramm auf.
Siehe auch
3
Wenn das erlaubt ist, dann os.system('a'), weil ich zufällig ein Programm amit dem gewünschten Verhalten auf meinem System
aufgerufen
5
@OllieFord seq ist ein Teil von gnu coreutils. Sie haben nicht so viel Einfluss.
Sparr
4

Python 3, 29

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

Wenn Sie in Python 2 sind und die Druckfunktion bereits importiert haben, müssen Sie das Iterator-Objekt nicht in eine Liste umwandeln und es wird zu 25 Zeichen:

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

Ich weiß aber nicht, dass das völlig fair ist.

Hier ist eine weitere lustige Idee, die in Python 2 oder 3 funktioniert. Es ist ein bisschen länger.

def p(i):
    if i+2:p(i-2);print i
p(100)
IanH
quelle
1
Die Python 3-Version kann auf Extended Iterable Unpacking verkürzt *a,=map(print,range(0,101,2))werden .
Flornquake
@flornquake Danke, ich habe es aktualisiert.
IanH
3

Python 2 - 24

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

(basierend auf bitpwner und Sparr Lösung)

In der Shell enthält "_" den Wert des zuvor ausgewerteten Ausdrucks

le_vine
quelle
Sie sollten beachten, dass dies nur funktioniert, wenn es in den interaktiven Modus einiger Python-Interpreter eingefügt wird (z. B. funktioniert es nicht in IPython) und nicht als Skript.
Wrzlprmft
du hast recht, das habe ich vergessen zu erwähnen. (übrigens funktioniert in der Standard-Python-Konsole)
le_vine
1
-1 - Die Frage erwähnt explizit ein Python- Skript , dh der Code sollte in eine Datei geschrieben und ausgeführt werden. Andernfalls wäre eine bessere Lösung einfach: range(0,102,2)Da dies alle geraden Zahlen (plus einige Kommas und zwei Klammern) auf dem Bildschirm anzeigen würde.
Bakuriu
1

Verständnis der Python-Liste - 39

Hierfür wird ein Listenverständnis verwendet. Ein Trick, um es zu verkürzen, besteht darin, den Index mit 2 zu multiplizieren, anstatt von 0 auf 100 zu wechseln, und eine abschließende if x % 2Prüfung auf Gerade durchzuführen.

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

Unter Verwendung einer Karte und des Vorschlags von @ isaacg ergeben sich dieselben 39 Zeichen:

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

Bearbeiten: Nach dem Trennen von Werten durch Zeilenvorschub ist es bei weitem nicht das kürzeste.

Ed Griebel
quelle
1
Dies beantwortet nicht die Frage - OP sagt prints the even numbers from 0 to 100, nicht nur zu generieren. Auch, wenn Sie nur die Liste wollen, range(0,101,2)ist kürzer.
Isaacg
1
@isaacg Aktualisiert, um die Frage zu beantworten. Jetzt muss jeder Wert in str () eingebettet werden, damit der Join beendet wird.
Ed Griebel
@Wrzlprmft Danke für den Vorschlag, wusste nicht, dass ich das machen könnte! Der Code wurde geändert, um diesem neuen Wissen Rechnung zu tragen.
Ed Griebel
1

Python 2 - 20 (fraglich)

Wenn die durch Leerzeichen getrennte Lösung von isaacg in Ordnung ist, ist vermutlich auch die normale Listenformatierung:

print range(0,101,2)

Wenden Sie für weitere Regeländerungen den Vorschlag von SirBraneDamuj aus den Kommentaren an:

print range(101)

und Sie sind 16 Jahre alt. Und wenn sie durch zusätzlichen Müll getrennt werden?

user30687
quelle