Python版本清单


36

Python是当今增长最快的主要编程语言。这是连续第三年最受欢迎的语言,这意味着尚未使用该语言的开发人员表示他们想学习它。[1]

Python受欢迎的原因是其许多版本。[需要引用]实际上有116个Python版本,包括两个开发版本。

您的任务是按照您喜欢的顺序和格式,输出/打印所有Python版本的列表。您不得使用任何存储了此信息的内置函数。

您可以自由选择输出格式,但每个版本必须在标准的方式来确定:1.12.3.02.7.10等。

完整列表2 Python版本的,用逗号分隔如下所示:

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

或主要版本:

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

挑战是固定输出挑战,非常,除了输出格式是可选的。

2该列表取自Python官方网站此处此处。有一些版本中未包括在内,如0.9.0.. 0.9.91.5.1p1。即使找到未包含的版本,也必须使用上面的列表。我决定坚持使用官方清单,因为否则有人可能会找到一个2.1.0.1.2版本或类似的内容。


2
我猜我们不允许输出1.1.0(使所有版本都为3)而不是1.1
Kevin Cruijssen

2
您猜对了@Kevin。我考虑过允许,但改为使用正式名称。
Stewie Griffin

Answers:


17

的JavaScript(ES6), 128个125  124字节

@OlivierGrégoire节省了1个字节

在单独的行上输出每个版本。从最高到最低的主要版本,从最低到最高的修订版本订购。

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

在线尝试!

怎么样?

v[0..27]

  • v/10+1
  • vmod10

修订版本保存在变量。的最大值取决于,并存储在以Base-36编码的查找表中。该表中的任何表示此版本完全没有发布。r0rv0

此外,我们使用测试来知道修订版本是否为(从Python 3.3.0开始)。v>220


5

C#(Visual C#交互式编译器),109字节

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));

包含许多不可打印的内容,其代码显示在方括号中。这是一个完整程序。空字节\0在TIO链接中被s 替换,因为我的设备无法复制和粘贴它们。

感谢@OlivierGregoire,节省了一个字节。

在线尝试!(感谢@OlivierGregoire植入了空字节)

说明

字符串中的每个字符代表主要位置有多少个次要版本。例如,索引5(ETX)处的字符的ASCII值为3,并且与1.5.x具有三个次要版本的主要版本相对应。该程序采用当前字符的ascii值并循环多次,打印次要版本,然后继续下一个主要版本。

对于某些版本,与下一个版本存在差距。为了解决这个问题,该字符串包含空字节,以便该程序在遇到零字节时循环零次。

不可打印的字符串包含以下字符值:

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

可以用来缩短j="..."[k];j-->0;,特别是因为顺序不重要。另外,您能解释一下TIO(115字节)和条目(110字节)之间的大小差异吗?
OlivierGrégoire

@OlivierGrégoire可能是tio表示为\ 0的五个空字节
Sefa

@Sefa是的,可能...但是我要确定一下。
OlivierGrégoire

@OlivierGrégoire正是Sefa所说的,我无法真正复制粘贴空字节。如果将\0s替换为空字节,则将为110字节
无知的体现

1
然后,您在这里,有了一个零字节的TIO
OlivierGrégoire

4

Pyth,52个字节

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

在这里在线尝试。

输出是一个嵌套列表,其中元素按主要版本和次要版本分组。在输出的开头有一个空列表,在后面有一个空列表1.6。完整的输出如下:

[[], ['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']]

如果这是不可接受的,.n请在代码之前加上输出,以平展列表的形式输出,费用为2个字节。


4

Java(JDK),134字节

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);}

在线尝试!

版本从高到低打印。

学分


1
(a>1|b>0)&c<a.valueOf(y,36)可以a>1|b>0&&c<a.valueOf(y,36)并且c<1&(a<3|b<3)?可以c<1&&a<3|b<3?保存2个字节。相关Java技巧-本节
将按

@KevinCruijssen谢谢,但是我做了很多更改,以至于您的建议现在已经不相关了...因为我什至不再使用您的建议,所以不知道如何记分您:(
OlivierGrégoire

1
Np,相反,我会建议您/10d*.1
再打

1
int a=28-> int a=1,并删除for循环中的条件,然后添加a++以保存3个字节。TIO
无知的体现


3

视网膜,105字节


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

在线尝试!松散地基于@Arnauld的解决方案。说明:


11* 111131   244655TS  2678E894

插入由11个空格组成的字符串,后跟给定字符。

L$`.
$&_$.`

对于每个字符,列出后缀a _的列及其列号。

T
10
E
11
S
17

将三个字母转换为数值。

.+_
*

将数值转换为一元。

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

对于不超过给定值的每个值,将其用作版本号的后缀,从列号中提取主要和次要。

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

删除具有一个的前16个版本的零后缀。


2

果冻,51字节

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

在线尝试!

一个尼拉度链接,该链接输出.以主版本分组的-分隔整数列表的列表。在TIO上,有一些页脚代码可以很漂亮地打印出来。


0

33,484个字节

"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]

我想尝试一下我的脑筋急转弯的语言。

它打印挑战所需的每个python版本,以换行符分隔。

这是一个小解释。

[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
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.