Цитирование 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
'argv' содержит строки, а не номера. – Evert
Кроме того, он содержит имя сценария в качестве первого аргумента (так что во втором случае 'a == 'euclidian_algorithm.py'' и' b == '40, 48''). Кроме того, вы никогда не называете свою функцию. – jonrsharpe
Запятая между вашими аргументами также испортит вещи. Кроме того, 'argv' содержит имя программы в качестве первого аргумента, поэтому ваш' argv' будет выглядеть как '['euclidian_algorithm.py' '40, ', 48']' в первом случае. – Evert