2014-02-24 2 views
-1

while 루프를 사용하여 주어진 사용자 입력까지 모든 숫자를 인쇄하고 싶습니다. 예 : 다음을 입력하십시오 : 5 ==> 1 2 3 4 5 그러나 아래 프로그램은 계속 반복됩니다.파이썬 문자열과 정수 비교

user = str(input("Enter : ")) 
i = 1 
while i < user: 
    print(i) 
    i = i + 1 

답변

4

ummm while i < int(user):?

+5

은 ((입력 "을 입력 :"))'할 사용자 = INT 더 좋을 것'대신 – lejlot

+0

@lejlot을 : 파이썬 2 대신 int (raw_input ("Enter :"))'를 사용하십시오. 'input()'은 이미 입력에서'eval()'을 호출하기 때문에 어떤 경우에도 숫자로만 구성된 입력을 위해 정수를 반환합니다. –

+0

나는 루프에서보다는 사용자를 int로 한 번 변환하는 것이 더 낫다는 사실을 언급한다. – lejlot

1

대신을 시도해보십시오

try: 
    user = int(raw_input('Enter: ')) # Cannot compare a string with an integer. 
except ValueError: 
    print('Input should be an integer!') 

i = 1 
while True: 
    i += 1 
    if i > user: 
     break 
    print(i) 

참고 : 당신의 코드에서, 우리는 명시 적으로 아직도 확실히 당신이 원하는대로 작동하지 않을 정수로 input를 선언하더라도. 이는 코드에서 while 루프가 user (조건이 ...보다 작아서 user 미만인 경우)과 동일하면 루프가 중지되고 이에 따라 수정되었으므로 i 마지막 출력 값 user 동일 할 것이라는 것을 의미 user보다 큰 점

예 이전 출력 user = 5 여기서 :.

1 
2 
3 
4 

새로운 코드 :

1 
2 
3 
4 
5 

그것은 당신이 while 루프를 사용하여 설정되지 않은 경우, 여기에 for 루프를 사용하지만 더 나은 : 사용자가 입력 무엇을 평가하기 위해 노력할 것입니다 파이썬 2.x에서의

for i in range(1, user+1): 
    print(i) 
0

input을, 그것은이 경우

user = eval(raw_input(...)) 

동일합니다, 당신은 명시 적으로 (str()로) 문자열로 공급되는 어떤 변환된다. Python 2.x에서 문자열은 항상 숫자보다 큽니다. 따라서 i < user이고 항상 True입니다.

raw_input을 사용하고 int으로 변환하는 것이 현명합니다. 당신은 STR에 int를 비교하는

user = int(raw_input("Enter : ")) 

for i in range(user): 

    print(i) 
0

당신이 무한 루프를 얻고있는 이유는 다음과 같습니다 또한 for 루프 코드를 단순화 할 수 있습니다. 당신은

user = int(input("Enter: "))

가 작동해야하는 변수의 동일한 유형을 비교해야

+0

in python2 .7 입력은 문자열의 평가 된 버전을 돌려 준다. (이 경우에는 int ...) ,,, OP에 맞춰진 Im은 문자열로 변환 할 몇 가지 이유가있다. –