我正在尝试这样做,它似乎可以很好地使用整数,但是不能使用字符串。我检查了文档,找不到任何内容。
from sys import argv
a, b, c = input(argv)
print(a,b,c)
输出:
['C:\\Users\\mani\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py', '-f', 'C:\\Users\\mani\\AppData\\Roaming\\jupyter\\runtime\\kernel-24b5eda5-a584-417e-a9f5-1c58531db5ae.json']mn nn nj
-
ValueError Traceback (most recent call last)
<ipython-input-23-181e7bc5c5de> in <module>
1 from sys import argv
----> 2 a, b, c = input(argv)
3 print(a,b,c)
ValueError: too many values to unpack (expected 3)
答案 0 :(得分:0)
from sys import argv
a, b, c = input(argv)
print(a,b,c)
有点错误,您不需要使用input
将argv
解压到变量中。
from sys import argv
a, b, c = argv[:3]
print(a,b,c)
就足够了,如果您只需要将argv
中的前三个元素解压缩到a
,b
和c
中。
检查python introduction并阅读有关切片的知识(神奇的[:3]
)。
答案 1 :(得分:0)
不清楚您要使用sys.argv
做什么。这是由Shell和Python解释器创建的字符串列表。通常,它与任何列表一样都可以读取,但是也可以修改。
In [16]: import sys
In [17]: sys.argv
Out[17]:
['/usr/local/bin/ipython3',
'--pylab',
'qt',
'--nosep',
'--term-title',
'--InteractiveShellApp.pylab_import_all=False']
In [18]: input(sys.argv)
['/usr/local/bin/ipython3', '--pylab', 'qt', '--nosep', '--term-title', '--InteractiveShellApp.pylab_import_all=False']1 2 3
Out[18]: '1 2 3'
用作input
的参数时,它仅用作提示字符串。这样做有什么意义?我们从input
得到的是一个字符串(至少在Py3中; Py2不同)。
a,b,c = ...
像这样拆包是没有道理的。如果RHS上的物品数量错误,则会引发错误。
In [19]: a,b,c = input('3 items: ').split() # split input string on space
3 items: a b c
In [20]: a,b,c = input('3 items: ').split()
3 items: d e
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-7dacf1e93e8c> in <module>
----> 1 a,b,c = input('3 items: ').split()
ValueError: not enough values to unpack (expected 3, got 2)
In [21]: a,b,c = input('3 items: ').split()
3 items: 1 2 3 4
---------------------------------------------------------------------------
...
ValueError: too many values to unpack (expected 3)
所以我看到三个问题:
sys.argv
是什么以及如何使用的疑问input
的论点是什么===
我认为您对input
的功能以及拆包的工作方式感到困惑:
In [67]: a,b,c = input('3 numbers: ')
3 numbers: 123
In [68]: a
Out[68]: '1'
In [69]: b
Out[69]: '2'
In [70]: c
Out[70]: '3'
In [71]: a,b,c = input('3 numbers: ')
3 numbers: 1 2 3
...
ValueError: too many values to unpack (expected 3)
In [74]: a,b,c = input('3 numbers: ')
3 numbers: 1234
...
ValueError: too many values to unpack (expected 3)
使用input
等效于:
In [72]: a,b,c='123'
字符串中的3个字符分布在3个变量中。如果您提供更长(或更短)的字符串,则说明解压缩所需的3个变量不匹配。
或者在输入“ mn nn nj”的地方复制示例:
In [75]: input(['a','list','of','strings'])
['a', 'list', 'of', 'strings']mn nn nj
Out[75]: 'mn nn nj'
In [76]: a,b,c=_ # trying to unpack that string to 3 variables
...
ValueError: too many values to unpack (expected 3)
In [77]: a,b,c=_.split() # split on white space
In [78]: a,b,c
Out[78]: ('mn', 'nn', 'nj')