2011-03-28 5 views
1

나는 어려운 방법을 파이썬 배울 을 통해 일하고 있어요, 운동 33 여분의 신용이 내가 잠시 루프에서 사용되는 변수 설정 raw_input 또는 argv을 활용하려고 노력 중 하나를 해요 :왜 파이썬 while 루프에 논리 연산자가 누락 되었습니까?

# from sys import argv 
# script, my_num = argv 

def all_the_numbers(n): 
    """increment by 1 up to limit n""" 
    i = 0 
    numbers = [] 
    while i < n: 
     print "At the top i is %d" % i 
     numbers.append(i) 

     i = i + 1 
     print "Numbers now: ", numbers 
     print "At the bottom i is %d" % i 

# print "Please enter an integer: " 
# n = raw_input("#") 
# n = my_num 
n = 10 
all_the_numbers(n) 

하드 코딩 된 n = 10은 예상대로 작동합니다. 최대 라인은 10입니다. 그러나 my_num의 값을 argv에서 전달하거나 raw_input에서 변수를 설정하면 위쪽으로 정수가 증가합니다. 후자의 두 가지 형태의 설정 변수가 동일한 변수의 하드 코딩 된 설정과 똑같이 행동하지 않는다는 점에서 다른 점은 무엇입니까?

답변

5

raw_input() 함수는 정수가 아닌 문자열을 반환합니다. 시도 :

n = int(raw_input("#")) 

또는

n = int(my_num) 

이 당신의 all_the_numbers() 기능이 기대 정수로 raw_input()에 의해 반환 된 문자열로 변환합니다.

여기 년대 relevant passage from the Python docs (강조 광산)

연산자 <> ==,> =, = < 및 = 두 객체의 값을 비교!. 객체는 동일한 유형을 가질 필요는 없습니다. 둘 다 숫자이면 일반 유형으로 변환됩니다. 그렇지 않으면 다른 유형의 개체가 항상 서로 다르며 일관되게 정렬되지만 임의로으로 정렬됩니다. 귀하의 경우에는

는 숫자와 문자열 임의로 정렬하고 경우에 < 비교는 항상 True로 평가합니다. 그러한 비교 유형이 호환 가능하도록 보장하는 것은 프로그래머의 책임입니다.

+0

감사합니다. Greg. 그것은 많은 의미를가집니다. 결과가 증가하는 정수 체인 이었기 때문에 나는 의심하지 않았습니다. – gonzo

관련 문제