【问题标题】:Else statement executing even if 'if' is true即使 'if' 为真,其他语句也会执行
【发布时间】:2015-08-24 17:53:08
【问题描述】:

我一直在编写一个 python 脚本来检测按键。它使用 pygame 模块。我的问题是按下向上、向下和向右箭头键而不是向左键时。我见过this 但是它对我的问题没有帮助。问题是当我按向上、向下或向右时,它会打印适当的文本,并且它们也会执行 else 语句,并将 even.unicode 替换为这个奇怪的符号,无论当我按下向左箭头键时,它都会打印“钥匙在左边”并且没有更多,就像它应该的那样。按键盘上的任何普通键也可以正常工作。奇怪哈。如果你能发现我做的嘘声,那就太好了。我的代码在下面,如果您安装了 pygame,您可以将其复制并粘贴到空闲 2.7 中,看看我的意思。

#Python key detector, requires pygame module, uses python 2.7
#Import libraries
import pygame
import sys
from pygame.locals import *
#Init display
pygame.display.init()
#Infinite loop
while (True):
    #Event detector
    for event in pygame.event.get():
        #If a key is pressed
        if event.type == KEYDOWN:
            if event.key == 99:
                sys.exit()
            if event.key == 273:
                print "The key is Up"
            if event.key == 275:
                print "The key is Right"
            if event.key == 274:
                print "The key is Down"
            if event.key == 276:
                print "The key is Left"
            else:
                print "The key is " + event.unicode

【问题讨论】:

  • 我建议您查看dictionaries,它可以节省您拥有较长的if 链。它们很容易用于打印回字符串,当您实际使用它们来运行代码时会稍微复杂一些,但可以使用函数。
  • @SuperBiasedMan 谢谢你的建议,我必须调查一下。听起来他们可以为我节省一点时间。

标签: python


【解决方案1】:

你需要使用elif;否则这只是一个新的检查,如果最后一个 if 子句失败,则执行 else 语句。

#Event detector
for event in pygame.event.get():
    #If a key is pressed
    if event.type == KEYDOWN:
        if event.key == 99:
            sys.exit()
        elif event.key == 273:
            print "The key is Up"
        elif event.key == 275:
            ...

【讨论】:

  • 谢谢,刚刚试了一下,它修复了它,我是 python 新手,所以我不太确定,谢谢你的帮助 :)
  • @CuriousProgrammer 很遗憾对我没有积分 :( 因为这不是我的答案.. 但为 Hiro 欢呼
最近更新 更多