所以这是我的代码
from sys import argv
a,b = argv
def gcd(a,b):
while a:
a,b = b%a, a
print b
现在,如果我使用此
从命令行运行它python euclidian_algorithm.py 40, 48
我收到此错误
Traceback (most recent call last):
File "euclidian_algorithm.py", line 3, in <module>
a,b = argv
ValueError: too many values to unpack
但是如果我然后删除两个输入之间的空格,就像这样
python euclidian_algorithm.py 40,48
然后我根本没有输出。
现在首先我不明白当我只提出两个参数时,解压缩的值是多少。 其次,为什么在第二种情况下我没有输出?
答案 0 :(得分:3)
引用sys.argv
文档,
传递给Python脚本的命令行参数列表。
argv[0]
是脚本名称(取决于操作系统是否为完整路径名)。
因此,argv
的第一个值将是当前的脚本名称。在第一种情况下,您尝试将三个值解压缩为两个变量。这就是它失败的原因。
在第二种情况下,您将当前脚本名称分配给a
和48,40
分配给b
。
您可以通过打印argv
,a
和b
来确认这一点,就像这样
➜ Desktop cat Test.py
from sys import argv
print argv
a, b = argv
print a, b
def gcd(a, b):
while a:
a, b = b % a, a
print b
➜ Desktop python Test.py 40, 48
['Test.py', '40,', '48'] # Note that argv has three items and first is the file name
Traceback (most recent call last):
File "Test.py", line 4, in <module>
a, b = argv
ValueError: too many values to unpack
➜ Desktop python Test.py 40,48
['Test.py', '40,48']
Test.py 40,48
其次,为什么在第二种情况下我没有输出?
这是因为,根本没有调用函数gcd
。
要解决这个问题,因为你只想要两个项目,我只需要像这样分配它们
a = int(argv[1])
b = int(argv[2])
然后调用该函数,就像这样
gcd(a, b)
我们需要将值转换为整数,因为参数将是字符串。
注意:此外,传递的参数需要用空格字符分隔,而不是用逗号分隔。所以,你会像这样执行程序
from sys import argv
def gcd(a, b):
while a:
a, b = b % a, a
print b
a = int(argv[1])
b = int(argv[2])
gcd(a, b)
➜ Desktop python Test.py 40 48
8
答案 1 :(得分:0)
文件名euclidian_algorithm.py也是一个参数。另外,在你的例子中解压缩参数是一种非常糟糕的做法。
答案 2 :(得分:0)
首先,不要用逗号分隔参数,否则这些逗号将显示在overflow:hidden
中。其次,sys.argv
中的第一个元素是脚本的名称;所以在你的情况下,sys.argv
。
sys.argv == ['euclidian_algorithm.py', '40,', '48']
没有输出的原因是因为python euclidian_algorithm.py 40,48
中没有错误,因为a,b = argv
中只有两个项目(脚本名称和参数),< em>和,因为你实际上并没有调用argv
,只是定义它。
如果您已经运行它,则会出现错误,因为gcd()
包含字符串,而您将argv
和a
视为b
。
这是你应该做的:
int
答案 3 :(得分:0)
尝试使用&#34; a,b = argv [1:]&#34;,因为文件名是返回的第一个值。