2012-10-30 4 views
0

프로그램에 대한 약간의 배경 지식. 그것은 후보자, 몇 가지 지침 및 입력 상자의 그림이있는 graphwindow를 설정 한 다음 사용자는 약어를 입력 상자에 넣고 후보 중 하나를 클릭하고 입력 한 상태와 동일한 투표 수를 표시합니다 . 사용자가 내 목록에없는 상태로 들어가면 오류 메시지를 인쇄하기로되어있는 예외 처리기를 작성하는 데 문제가 있습니다.는 파이썬에서 문제를 열거합니다.

while True: 
     vote = win.getMouse() 
     voteX = vote.getX() 
     voteY = vote.getY() 
#Romney 
     if voteX >= 163 and voteX <= 237 and voteY <= 100: 
     enteredtext = entrybox.getText() 
     enteredtextu = enteredtext.upper() 
     for i, s in enumerate(STATE_LIST): 
      if enteredtextu != s: 
       print('Not a state') 


      else: 
       totalvotesr += STATE_VOTES[enteredtextu] 
       votesnumr = ('VOTES:' ,totalvotesr) 
       displayvotesr.setText(votesnumr) 
       entrybox = Entry(Point(WINDOW_WIDTH/2, WINDOW_HEIGHT/1.1), 10) 
       entrybox.draw(win) 
       if totalvotesr >= 270: 
        circle_winner(win, Point(WINDOW_WIDTH/4, WINDOW_HEIGHT/12)) 
        cross_out_loser(win, Point(WINDOW_WIDTH/(4/3), WINDOW_HEIGHT/12)) 

STATE_LIST는 50 개의 모든 상태를 축약 한 목록입니다. 내가 뭘하려고했는지 사용 열거하고 목록에있는 모든 항목에 entereredtextu 확인하고 거기에 "Not 상태"를 인쇄합니다. 내가 겪고있는 문제는 내가 내 목록에없는 상태로 들어갔을 때 "상태가 아님"50 번 인쇄하고 목록에있는 상태로 들어가면 예상했던 것과 비슷한 금액이 표시된다는 것입니다. 012 "상태가 아님"을 인쇄합니다. 012시 47 분

답변

2

해당 상태가 for 루프 내부에 있으므로 그 이름이 입력 된 텍스트와 일치하는지 모든 상태를 검사합니다. 따라서 당신은 '국가가 아닌'50 (또는 49) 시간을 얻는 것이 합리적입니다.

아래 코드를 대신 사용해보십시오. enteredtextu이 상태 목록에 있는지 여부를 한 번만 검사하고 가능한 경우 투표 수를 찾기위한 루프를 입력합니다.

... 
enteredtext = entrybox.getText() 
enteredtextu = enteredtext.upper() 
if not enteredtextu in STATE_LIST: 
    print 'Not a state' 
else: 
    for i, s in enumerate(STATE_LIST): 
     # ... etc 
1

다음은 무슨 일입니까? 의는 사용자가 입력한다고 가정 해 봅시다 AR :

국가의리스트를 '열거'하자의 시작 :

AK != AR ? Yup! print 'Not a state' 
AL != AR ? Yup! print 'Not a state' 
AR != AR ? Oh these are the same! Print the number of votes! 
AZ != AR ? Yup! print 'Not a state' 
... so on ... 
관련 문제