흥미로운 부분은 이 부분이다.
s1, s2, s3 = sys.argv[1], sys.argv[2], sys.argv[3]
다시 말하자면, sys.argv 리스트는 다른 파이썬 리스트와 마찬가지로 인덱스가 0부터 시작된다. 하지만 프로그램 이름인 sys.argv[0]은 보통 프로그램 코드에서 사용되지 않는다. 프로그램을 실행하는 사람은 프로그램 이름을 이미 알고 있다고 가정하기 때문이다.
물론 원하는 인수가 항상 입력될 것이라고 확신할 수 없다. 만약 필요한 인수가 명시되지 않으면 대안이 필요하다. 사용자에게 해당 값을 프롬프트에서 입력받는 것과 같이 말이다.
커맨드 라인 인수의 개수가 N인 경우, 인수 리스트의 길이는 항상 N+1인 것을 기억하자. 당연하게도 프로그램 이름이 추가되었기 때문이다.
이제 앞 예시를 다음과 같이 수정해 보자.
import sys
def quad(a, b, c):
'''Quadratic Formula function.'''
determin = (b * b - 4 * a * c) ** .5
x1 = (-b + determin) / (2 * a)
x2 = (-b - determin) / (2 * a)
return x1, x2
def main():
'''Get argument values, convert, call quad.'''
if len(sys.argv) > 3:
s1, s2, s3 = sys.argv[1], sys.argv[2], sys.argv[3]
else:
s1 = input('Enter a: ')
s2 = input('Enter b: ')
s3 = input('Enter c: ')
a, b, c = float(s1), float(s2), float(s3)
x1, x2 = quad(a, b, c)
print('x values: {}, {}.'.format(x1, x2))
main()