2011-05-05 5 views
3
class cga(object): 
    '''''' 
    def __int__(self,i,o): 
     '''''' 
     self.i = i 
     self.o = o 

    def get(self): 
     '''''' 
     self.i = [] 
     c = raw_input("How many courses you have enrolled in this semester?:") 
     cout = 0 
     while cout < c: 
      n = raw_input("plz enter your course code:") 
      w = raw_input("plz enter your course weight:") 
      g = raw_input("plz enter your course grade:") 
      cout += 1 
      self.i.append([n,w,g]) 
if __name__ == "__main__": 
    test = cga() 
    test.get() 

제가 문제가되는 것은 프로그램이 등록한 과정 수를 묻는 질문에 5를 입력하는 경우입니다. 루프가 멈추지 않을 것이며, 프로그램은 코스 코드의 무게 등급을 묻습니다. 나는 프로그램이 count cout = 6을 가지고 있다고 보여줄 때 디버깅했다. 그러나 c와 비교하고 while 루프는 멈추지 않는다.루프가 올바르게 실행되지 않습니다.

+1

먼저, 들여 쓰기를 수정. 모든 코드가 제대로 포맷 된 것처럼 보이지는 않습니다. 둘째, print 문 (또는 함수)을 추가하여'cout'과'c'의 값을 표시하면 현재 상황을 볼 수 있습니다. –

+3

아시다시피, 문서 문자열을 사용하고 싶지 않다면 단순히 빈칸을 넣는 대신 문서화 문자열을 남겨 둘 수 있습니다. – bgw

+0

그런 의사는 ... –

답변

2

raw_input은 int가 아닌 문자열을 반환합니다. 평가 논리에 결함이 있습니다. 사용자가 유효한 값 (양의 정수, 허용되는 최대 값보다 작은 경우)을 입력했는지 확인해야합니다. 당신이 확인되면, 당신은 int로 c를 캐스팅해야합니다 :

c=int(c) 

만 다음 비교 로직 작업이 예상하는 방법

.

6

문제는 raw_input이 문자열 (숫자가 아님)을 반환하고 일부 이상한 역사적인 이유로 문자열을 다른 종류의 개체와 비교할 수 있지만 결과는 ...입니다. 이상한.

Python 2.6.5 (r265:79063, Oct 28 2010, 20:56:23) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1 < "2" 
True 
>>> 1 < "0" 
True 
>>> 1 < "" 
True 
>>> 

그것을 비교하기 전에 정수로 결과를 변환 :

c = int(raw_input("How many courses you have enrolled in this semester?:")) 
+0

유효한 int로 raw_input에서 반환 된 값의 유효성을 검사해야합니다. –

+0

@AJ : 확실히 좋은 생각입니다. :-) – Dirk

+2

"다소 이상한 역사적인 이유로"? 그렇지 않아. 그것은 완벽하게 합리적인 이유입니다 : "Explicit은 Implicit보다 낫다". 묵시적 전환은 잘못된 행동입니다. –

관련 문제