0

プログラムの背景を少し。候補者の 2 枚の写真、いくつかの指示、および入力ボックスを含むグラフウィンドウを設定します。次に、ユーザーが略語を入力ボックスに入力し、候補の 1 つをクリックすると、投票数がその後入力された州と同等であることが表示されます。 . ユーザーがリストにない状態に入った場合にエラー メッセージを出力するはずの例外ハンドラーの作成に問題があります。私が問題を抱えているコードのセクションは次のとおりです。

    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 州すべてのリストです。私がやろうとしたことは、enumerate を使用して、リスト内のすべての項目に対して entereredtextu をチェックし、そこにない場合は「状態ではありません」と出力することです。私が抱えている問題は、リストにない州に入ると「州ではありません」と50回出力され、リストにある州に入ると本来の投票数が表示されることですが、 「状態ではありません」と 50 回出力します

4

2 に答える 2

2

そのチェックは for ループ内にあるため、すべての州について、その名前が入力されたテキストと一致するかどうかをチェックします。したがって、'Not a state' を 50 回 (または 49 回) 取得することは理にかなっています。

代わりに以下のコードを試してください。が状態のリストにあるかどうかを 1 回だけチェック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 に答える