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?


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.


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.


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


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 .


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.



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)

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.


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)

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


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.


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?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.