0

该计划的一些背景知识。它设置了一个带有 2 张候选人图片、一些说明和一个输入框的图形窗口,然后用户将缩写词放入输入框并单击其中一个候选人,它会显示票数等于然后输入的任何状态. 如果用户进入不在我的列表中的状态,我无法编写应该打印错误消息的异常处理程序。这是我遇到问题的代码部分:

    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 次“不是状态”,当我进入列表中的状态时,它会显示它应该显示的票数,而且打印“Not a state”50 次

4

2 回答 2

2

您检查每个状态的名称是否与输入的文本匹配,因为该检查位于 for 循环内。所以你得到 'Not a state' 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
于 2012-10-30T21:49:44.417 回答
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 ...
于 2012-10-30T21:52:58.423 回答