有没有更短的方法在python中获取用户输入?


17

这不是挑战。我想知道是否有可能将用户输入到少于19个字节的python(2或3)中的两个独立变量中。这些是我能得到的最短的信息:

a,b=input(),input()
a=input();b=input() (newline replaced with semicolon for readability)
i=input;a,b=i(),i()

有没有更短的方法可以做到这一点?


2
如果您要输入两个以上的输入,则第三个可能是最好的。
SuperJedi224

1
我本来要用a,b=sys.argv[1:2]或其他方式说命令行参数,但是您需要一个import sys(对吗?)
Alex A.

在python3 a,b=input().split()中将是另一个19字节的解决方案,尽管没有改进。请注意,这意味着a和b是字符串,并且输入以空格分隔的一次输入。
马蒂2015年

不确定是否有帮助,但是在某些语言中,您可以使用向量获取两个数字,而不是2个变量。对于两个任意变量,可以使用更复杂的容器。
丹尼斯·贾赫鲁丁

a,b=input()在的Py2
奥利弗镍

Answers:


11

如果提示用户没有关系,则比eval3个或更多提示短一些:

a,b,c=map(input,[1]*3)
a,b,c=map(input,'111')

即使提示不正确,它也会更短:

a,b,c=map(input,['']*3)

可悲的是,xnor的想法并没有为2个输入保存任何内容,因为它仍然更长(19个字节)。但是,如果您已经有一些具有适当长度的字符串(或适当的可迭代)(因为魔术?),那么它可能会更短。

xnor仅在Python 2中找到了一个用于3个输入的魔术字符串的示例:

a,b,c=map(input,`.5`)

但是,这还要求提示不重要。

这个技巧实际上通过使用1eX表示法(获取x + 3输入)来帮助节省大量输入的字节:

 a,b,c,d,e,f=map(input,`1e3`)

说明:

Python的map函数执行该函数,该函数在也传递给它的iterable的每个元素上传递,并返回包含这些调用结果的列表(或映射对象)。对于第一个示例,可以将地图分解为:

[input(1), input(1), input(1)]

2
map(input,'xxx')对于3个变量,做的长度是相等的,对于2个变量,做的更好,而对于4个以上变量,则做的更糟。
xnor 2015年

3
如果有机会,您需要精确输入22个输入,请map(input,`id`)缩短:-)。同样,map(input,`.1`)对于19个输入。
xnor 2015年

3
实际上,a,b,c=map(input,`.5`)因为.5表示为,所以确实为3个输入保存了一个字符0.5
xnor 2015年

是的,那很好。酷把戏!
DJMcMayhem


4

请注意,除非问题指定了输入类型或需要完整的程序,否则您可以将输入作为函数参数,而不必使用 input()如果这不是一个选择,则在某些情况下可能会有所帮助。


如果要在ab中使用单个字符,则可以使用

a,b=input()

输入2个字符串将导致第一个字符被分配给a,第二个字符被分配给b。(字符串中少于2个或超过2个字符将产生错误。)

如果每个变量需要多个字符,则此方法将不起作用。仍然可以使用它来输入2个数字作为字符串。如果需要的数字超过9,则所有可能的输入字符都可以解释为数字。

请注意,这也适用于两个以上的变量:

a,b,c,d,e,f,g,h=input()

之所以有效,是因为在Python中,字符串是字符序列,可以在需要序列的任何地方使用。

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.