2012-07-18 21 views
1

다음은 잠시 나를 괴롭 히고있는 Python 코드입니다.while 루프가 깨지지 않는 경우

var=0 
while (var <1 or var>100): 
    var=raw_input('Enter the block number ') 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
    else: 
     print 'ERROR!!! Enter again.' 

while 루프는 끊어짐없이 계속 반복됩니다. 누구든지 루프를 깨는 방법을 알려줄 수 있습니까?

do..while을 구현할 수있는 방법이 있습니까?

답변

12

문제는 raw_input이 문자열을 반환한다는 것입니다. 파이썬 2.x에서 할 수있는 정수와 문자열을 비교하고 있습니다 (파이썬 3에서는이 종류의 비교가 TypeError을 발생시킵니다). 결과는 분명히 항상 False입니다. 다른 유형의

객체가 항상 불평등 비교하고, 지속적으로하지만 임의적으로 정렬됩니다 : 당신은 아마 documentation에서 var=int(raw_input('Enter the block number'))

같은 것을 원하는이 일을합니다.

+0

는'int's 항상 str's –

+1

@ColinDunklau'보다 작은 도움이

while True: var=int(raw_input('Enter the block number ')) if (var >=1 and var<=100): print '\nBlock Number : ',var break else: print 'ERROR!!! Enter again.' continue 

희망 아래 참조 - 사실인가요? 아니면 CPython 구현 세부 사항입니까? 실제로 중요한 것은 객체가 일관되게 정렬된다는 것입니다. – mgilson

+0

알았습니다! 다들 감사 해요. – Abhinav

4

var를 두 번 이상 확인해야하며 int와 str을 비교하려고합니다 (raw_input이 문자열을 반환하기 때문에). 제대로 작동하지 않습니다. 이것을 시도하십시오 :

var=0 
while True: 
    var=int(raw_input('Enter the block number ')) 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
     break 
    else: 
     print 'ERROR!!! Enter again.' 
1

문자열을 int로 변환해야합니다. 당신은 (raw_input에 의해 반환되는) 그 문자열 문제로 실행중인

var=0 
while (var <1 or var>100): 
    # I changed here 
    var=int(raw_input('Enter the block number ')) 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
    else: 
     print 'ERROR!!! Enter again.' 
0

정수 항상보다 큰 :

var = int(raw_input("Enter the block number ")) 
:

>>> "25" > 100 
True 

가 먼저 정수로 입력을 변환해야

물론 잘못된 입력이 있어도 복원력을 원할 것입니다. 따라서 try 블록에 전체 내용을 래핑하는 것이 좋습니다.

0

안녕하세요 당신은 "휴식"을 입력하고, 또한 var에 정수 여야 필요,이

관련 문제