2012-10-30 176 views
0

程序的一点背景。它会创建一个带有2张候选人图片,一些说明和一个输入框的图形窗口,然后用户将缩写放入输入框并点击其中一个候选人,并显示票数等于输入的任何状态。我在编写异常处理程序时遇到问题,如果用户输入的状态不在我的列表中,它应该会打印出错信息。继承人我有麻烦的代码段:枚举python中的麻烦

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,如果它不在那里,它会打印“不是一个国家”。我遇到的问题是,当我进入一个不在我的列表中的状态时,它会打印“不是状态”50次,当我进入列表中的某个状态时,它会显示其应有的选票数量,但也是打印“不是状态”50次

回答

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 ...