Ответ 1
Вы можете преобразовать аргументы в целые числа, используя int()
import sys
a = int(sys.argv[1]) b = int(sys.argv[2])
print a, b
print a+b
input: python mySum.py 100 200
выход:
100 200
300
Я знаком с C и начал экспериментировать на python. Мой вопрос касается команды sys.argv
. Я читал, что он используется для интерпретатора командной строки, но при попытке выполнить простую программу я не получаю ожидаемых результатов.
код:
import sys
a = sys.argv[1]
b = sys.argv[2]
print a, b
print a+b
Input:
python mySum.py 100 200
Выход:
100 200
100200
Когда я добавляю два аргумента, они объединяются вместо двух значений, добавляемых вместе. Кажется, что значения берутся как строки.
Как я могу интерпретировать их как числовые данные?
Вы можете преобразовать аргументы в целые числа, используя int()
import sys
a = int(sys.argv[1]) b = int(sys.argv[2])
print a, b
print a+b
input: python mySum.py 100 200
выход:
100 200
300
В самом деле, вы сами нашли проблему, sys.argv
- это массив строк.
Вы можете преобразовать строку в целое число с int()
. В этом случае, например: a = int(sys.argv[1])
Вы также должны подтвердить ввод пользователя:
import sys
def is_intstring(s):
try:
int(s)
return True
except ValueError:
return False
for arg in sys.argv[1:]:
if not is_intstring(arg):
sys.exit("All arguments must be integers. Exit.")
numbers = [int(arg) for arg in sys.argv[1:]]
sum = sum(numbers)
print "The sum of arguments is %s" % sum
sys.argv
элементы всегда strings
. вы должны отнести их к int
с помощью int(a)
.
Вы также можете использовать сторонние библиотеки для обработки аргументов CLI, таких как OptParse.
В Python строки неявно преобразуются в целые числа. Попробуйте
num1 = int(sys.argv[1])
This would represent the numerical value of the number, not its string representation.
Остерегайтесь выполнения сравнений с аргументами командной строки, что может привести к действительно неожиданному поведению из-за политики Python 2 для сравнения объектов разных типов ('int'<'list'<'string'<'tuple'), как указано здесь. В Python 3 сравнение объектов разных типов приведет к TypeError.
Для примера погрешности сравнения объектов попробуйте удалить вызов int()
в разделе 6.1.1. Python учебник Fibonacci code, и вы получите бесконечный цикл, поскольку условие while while: 'int' < "Строка". (Это не произойдет в Perl, кстати).
Отличный совет от @Jan-Philip выше, чтобы проверить аргументы командной строки, даже для Python 3.