Liste der Python-Versionen

36

Python ist heute die am schnellsten wachsende Programmiersprache. Es ist das dritte Jahr in Folge die am häufigsten nachgefragte Sprache. Entwickler, die es noch nicht verwenden, geben an, es lernen zu wollen. [1]

Der Grund für die Popularität von Python sind die vielen Versionen. [Bearbeiten] Es gibt in der Tat 116 Versionen von Python, darunter zwei Entwicklungsversionen.

Ihre Aufgabe ist es, eine Liste aller Python-Versionen auszugeben / auszudrucken, in welcher Reihenfolge Sie möchten und in welchem ​​Format Sie möchten. Sie dürfen keine integrierten Funktionen verwenden, in denen diese Informationen gespeichert sind.

Sie sind frei , das Ausgabeformat zu wählen, aber jede Version auf dem Standardweg identifiziert werden muß: 1.1, 2.3.0, 2.7.10und so weiter.

Die vollständige Liste 2 der durch Kommas getrennten Python-Versionen sehen Sie unten:

1.1, 1.2, 1.3, 1.4, 1.5, 1.5.1, 1.5.2, 1.6, 2.0, 2.0.1, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.2, 2.2.1, 2.2.2, 2.2.3, 2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.4, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.6, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6, 2.6.7, 2.6.8, 2.6.9, 2.7, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.7.7, 2.7.8, 2.7.9, 2.7.10, 2.7.11, 2.7.12, 2.7.13, 2.7.14, 2.7.15, 2.7.16, 3.0, 3.0.1, 3.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.2 , 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6, 3.5.7, 3.6.0, 3.6.1, 3.6.2, 3.6.3, 3.6.4, 3.6.5, 3.6.6, 3.6.7, 3.6.8, 3.7.0, 3.7.1, 3.7.2, 3.7.3

oder nach Hauptversionen:

1.1
1.2
1.3
1.4
1.5, 1.5.1, 1.5.2
1.6
2.0, 2.0.1
2.1, 2.1.1, 2.1.2, 2.1.3
2.2, 2.2.1, 2.2.2, 2.2.3
2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5
2.4, 2.4.1, 2.4.2, 2.4.3, 2.4.4
2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4
2.6, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6, 2.6.7, 2.6.8, 2.6.9
2.7, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.7.7, 2.7.8, 2.7.9, 2.7.10, 2.7.11, 2.7.12, 2.7.13, 2.7.14, 2.7.15, 2.7.16
3.0, 3.0.1
3.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5
3.2, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6
3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7
3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10 
3.5.0, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6, 3.5.7
3.6.0, 3.6.1, 3.6.2, 3.6.3, 3.6.4, 3.6.5, 3.6.6, 3.6.7, 3.6.8
3.7.0, 3.7.1, 3.7.2, 3.7.3

Die ist eine festgelegte Ausgabe- und einer sehr , mit der Ausnahme, dass das Ausgabeformat optional ist.

2 Die Liste stammt von der offiziellen Python-Website, hier und hier . Es gibt einige Versionen, die nicht enthalten sind, z. B. 0.9.0.. 0.9.9und 1.5.1p1. Sie müssen die obige Liste verwenden, auch wenn Sie Versionen finden, die nicht enthalten sind. Ich habe mich entschlossen, mich an die offiziellen Listen zu halten, da sonst wahrscheinlich jemand eine 2.1.0.1.2Version oder ähnliches finden würde .

Stewie Griffin
quelle
2
Ich vermute, wir dürfen nicht ausgeben 1.1.0(um alle Versionen 3 zu nummerieren) anstatt 1.1?
Kevin Cruijssen
2
Sie raten richtig @ Kevin. Ich überlegte, es zuzulassen, ging aber stattdessen zu den offiziellen Namen über.
Stewie Griffin

Antworten:

17

JavaScript (ES6),  128 125  124 Bytes

Dank @ OlivierGrégoire 1 Byte gespeichert

Gibt jede Version in einer separaten Zeile aus. Sortiert von der höchsten zur niedrigsten Hauptversion und von der niedrigsten zur höchsten Revision.

f=(r=v=28)=>v?r<parseInt('0111131000244655ah002678b8940'[v],36)?(1+v/10).toFixed(1)+(r|v>22?'.'+r:'')+`
`+f(r+1):f(+!v--):''

Probieren Sie es online!

Wie?

v[0..27]

  • v/10+1
  • vmod10

Die Revision wird in der Variablen . Der Maximalwert von hängt von und wird in einer Nachschlagetabelle gespeichert, die in Base-36 codiert ist. Jede in dieser Tabelle bedeutet, dass diese Version überhaupt nicht veröffentlicht wurde.r0rv0

Außerdem verwenden wir den Test , um festzustellen, ob die Revision aufgenommen werden soll, auch wenn sie (beginnend mit Python 3.3.0).v>220

Arnauld
quelle
5

C # (Visual C # Interactive Compiler) , 109 Byte

for(int j,k=1;;k++)for(j=@" [SOH][SOH][SOH][SOH][ETX][SOH][NUL][NUL][NUL][STX][EOT][EOT][ACK][ENQ][ENQ]
[DC1][NUL][NUL][STX][ACK][BEL][BS][VT][BS][TAB][EOT]"[k];j-->0;)Print($"{k*.1+1:N1}"+(j<1&k<17?"":"."+j));

Enthält viele nicht druckbare Elemente, deren Codes in Klammern angegeben sind. Dies ist ein volles Programm. Die Null-Bytes werden \0im TIO-Link durch s ersetzt , da mein Gerät sie nicht kopieren und einfügen kann.

Dank @OlivierGregoire ein Byte gespart.

Probieren Sie es online! (Danke an @OlivierGregoire für das Implantieren der Null-Bytes)

Erläuterung

Jedes Zeichen in der Zeichenfolge gibt an, wie viele Nebenversionen sich an der Hauptposition befinden. Beispielsweise hat das Zeichen bei Index 5 ( ETX) einen ASCII-Wert von drei und entspricht der Hauptversion 1.5.xmit drei Nebenversionen. Das Programm nimmt den ASCII-Wert des aktuellen Zeichens und wiederholt die Ausgabe der Nebenversionen, bevor es zur nächsten Hauptversion übergeht.

Bei einigen Versionen gibt es Lücken zu den nächsten Versionen. Um dies zu beheben, enthält die Zeichenfolge null Bytes, sodass das Programm null Schleifen durchläuft, wenn es auf diese trifft.

Die nicht druckbare Zeichenfolge enthält die folgenden Zeichenwerte:

1,1,1,1,3,1,0,0,0,2,4,4,6,5,5,10,17,0,0,2,6,7,8,11,8,9,4
Verkörperung der Ignoranz
quelle
Kann mit gekürzt werden j="..."[k];j-->0;, zumal die Reihenfolge keine Bedeutung hat. Können Sie auch den Größenunterschied zwischen dem TIO (115 Byte) und dem Eintrag (110 Byte) erklären?
Olivier Grégoire
@ OlivierGrégoire Wahrscheinlich die fünf Null-Bytes, die tio als \ 0
Sefa
@Sefa ja, wahrscheinlich ... Aber ich bitte um Gewissheit.
Olivier Grégoire
@ OlivierGrégoire Genau das, was Sefa gesagt hat, ich kann die Null-Bytes nicht wirklich kopieren und einfügen. Wenn das \0s durch null Bytes ersetzt würde, wären es 110 Bytes
Ausführungsform der Ignoranz,
1
Dann sind Sie hier mit einem NUL-Byte-TIO
Olivier Grégoire,
4

Pyth, 52 Bytes

.emj\.+W|d>k18,h/k8%k8dbxLG"abbbbdbaceegffkrcghilije

Probieren Sie es hier online aus .

Die Ausgabe ist eine verschachtelte Liste mit Elementen, die nach Haupt- und Nebenversion gruppiert sind. Es gibt eine leere Liste am Anfang der Ausgabe und eine weitere nach der Ausgabe 1.6. Die vollständige Ausgabe lautet wie folgt:

[[], ['1.1'], ['1.2'], ['1.3'], ['1.4'], ['1.5', '1.5.1', '1.5.2'], ['1.6'], [], ['2.0', '2.0.1'], ['2.1', '2.1.1', '2.1.2', '2.1.3'], ['2.2', '2.2.1', '2.2.2', '2.2.3'], ['2.3', '2.3.1', '2.3.2', '2.3.3', '2.3.4', '2.3.5'], ['2.4', '2.4.1', '2.4.2', '2.4.3', '2.4.4'], ['2.5', '2.5.1', '2.5.2', '2.5.3', '2.5.4'], ['2.6', '2.6.1', '2.6.2', '2.6.3', '2.6.4', '2.6.5', '2.6.6', '2.6.7', '2.6.8', '2.6.9'], ['2.7', '2.7.1', '2.7.2', '2.7.3', '2.7.4', '2.7.5', '2.7.6', '2.7.7', '2.7.8', '2.7.9', '2.7.10', '2.7.11', '2.7.12', '2.7.13', '2.7.14', '2.7.15', '2.7.16'], ['3.0', '3.0.1'], ['3.1', '3.1.1', '3.1.2', '3.1.3', '3.1.4', '3.1.5'], ['3.2', '3.2.1', '3.2.2', '3.2.3', '3.2.4', '3.2.5', '3.2.6'], ['3.3.0', '3.3.1', '3.3.2', '3.3.3', '3.3.4', '3.3.5', '3.3.6', '3.3.7'], ['3.4.0', '3.4.1', '3.4.2', '3.4.3', '3.4.4', '3.4.5', '3.4.6', '3.4.7', '3.4.8', '3.4.9', '3.4.10'], ['3.5.0', '3.5.1', '3.5.2', '3.5.3', '3.5.4', '3.5.5', '3.5.6', '3.5.7'], ['3.6.0', '3.6.1', '3.6.2', '3.6.3', '3.6.4', '3.6.5', '3.6.6', '3.6.7', '3.6.8'], ['3.7.0', '3.7.1', '3.7.2', '3.7.3']]

Wenn dies nicht akzeptabel ist .n, müssen Sie dem Code voranstellen , um die Ausgabe als reduzierte Liste zu einem Preis von 2 Byte zu erhalten.

Sok
quelle
4

Java (JDK) , 134 Byte

v->{for(int a=0,b;;)for(b="0111131000244655:A002678;894".charAt(++a)-48;b-->0;)System.out.printf("%.1f%s ",a*.1+1,b<1&a<23?"":"."+b);}

Probieren Sie es online!

Die Versionen werden von der höchsten zur niedrigsten gedruckt.

Credits

Olivier Grégoire
quelle
1
(a>1|b>0)&c<a.valueOf(y,36)kann sein a>1|b>0&&c<a.valueOf(y,36)und c<1&(a<3|b<3)?kann sein c<1&&a<3|b<3?, 2 Bytes zu sparen. Relevanter Java-Tipp - Abschnitt Bitweise und logische Prüfungen anstelle von Klammern
kombinieren
@ KevinCruijssen Vielen Dank, aber ich habe so viele Änderungen vorgenommen, dass Ihre Vorschläge jetzt irrelevant sind ... Ich weiß nicht, wie ich Sie gutschreiben soll, da ich Ihren Vorschlag nicht einmal mehr verwende :(
Olivier Grégoire
1
Np, stattdessen werde ich einen neuen Golf vorschlagen;) /10dkann sein*.1
Kevin Cruijssen
1
int a=28-> int a=1, und entfernen Sie die Bedingung in der for-Schleife. Fügen Sie dann ein hinzu a++, um 3 Bytes zu sparen. TIO
Verkörperung der Ignoranz
3

Netzhaut , 105 Bytes


11* 111131   244655TS  2678E894
L$`.
$&_$.`
T
10
E
11
S
17
.+_
*
Lv$`_+(.)(.)
$1.$2.$.%`
,16`(...)\.0
$1

Probieren Sie es online! Lose basierend auf @ Arnauld's Lösung. Erläuterung:


11* 111131   244655TS  2678E894

Fügen Sie die Zeichenfolge ein, die aus 11 Leerzeichen gefolgt von den angegebenen Zeichen besteht.

L$`.
$&_$.`

Listen Sie für jedes Zeichen das Suffix a _und seine Spaltennummer auf.

T
10
E
11
S
17

Konvertieren Sie die drei Buchstaben in numerische Werte.

.+_
*

Konvertieren Sie die numerischen Werte in unary.

Lv$`_+(.)(.)
$1.$2.$.%`

Verwenden Sie für jeden Wert bis zu dem angegebenen Wert diesen als Suffix für die Versionsnummer, und extrahieren Sie den Major und den Minor aus der Spaltennummer.

,16`(...)\.0
$1

Löschen Sie das Null-Suffix für die ersten 16 Versionen, die eine haben.

Neil
quelle
2

Jelly , 51 Bytes

+⁵D;ⱮḶ}j€”.
“øṄƇịɱ⁽Ɱj>⁶7,Ẉ¢’b18Ė0ị$Ƈç/€ḣ3$€1¦€17R¤¦

Probieren Sie es online!

Ein Niladic-Link, der eine Liste von Listen mit .getrennten Ganzzahlen ausgibt, gruppiert nach Hauptversion. Auf TIO gibt es einen Footer-Code, um diese hübsch auszudrucken.

Nick Kennedy
quelle
0

33 , 484 Bytes

"1."es[lz1azpois4m]"1.5"pi"1.5."z1apoiapoi"1.6"pi"2.0"pip".1"pizcz"2.1"''pie"."e''es[lz1azpois3m]"2.2"''pie"."et''es[lz1azpois3m]"2.3"''pie"."et''es[lz1azpois5m]"2.4"''pie"."et''es[lz1azpois4m]"2.5"''pie"."et''es[lz1azpois4m]"2.6"''pie"."et''es[lz1azpois9m]"2.7"''pie"."et''es[lz1azpois16m]"3.0"pip".1"pi"3.1"''pie"."et''es[lz1azpois5m]"3.2"''pie"."et''es[lz1azpois6m]"3.3."''es[lzpoi1azs8m]"3.4."''es[lzpoi1azs11m]"3.5."''es[lzpoi1azs8m]"3.6."''es[lzpoi1azs9m]"3.7."''es[lzpoi1azs4m]

Ich wollte es in meiner geisteskranken Sprache versuchen.

Es gibt jede für die Challenge erforderliche Python-Version aus, die durch Zeilenumbrüche begrenzt ist.

Hier ist eine kleine Erklärung.

[lz1azpois4m] | Imitates a for loop starting at 1
[  1az    4m] | For i in range 1 through 4
      p       | - Print the string declared previously (1.5., 3.4., etc.)
       o      | - Print the current value of i
        i     | - Print a newline

[lzpoi1azs8m] | Imitates a for loop starting at 0
[     1az 8m] | For i in range 0 through 7
   poi        | Print the version
TheOnlyMrCat
quelle