2015-08-24 78 views
-3

我一直工作在一个python脚本来检测按键是真实的。它使用pygame模块。我的问题是当按向上,向下和向右箭头键,而不是左侧。我看过this,但它不能帮助我解决我的问题。问题是当我按Up,Down或Right时,它会打印适当的文本,然后执行else语句,并用这个奇怪的符号替换even.unicode,当我按下左箭头键时,它会打印出“The key left”和no更多,就像它应该的那样。同时按下键盘上的任何普通键都可以正常工作。怪异的HUH。如果你能发现我做出来的嘘声,那真是太好了。我的代码如下,如果你安装了pygame,你可以将它复制并粘贴到2.7的空闲空间中,看看我的意思。Else语句执行即使“如果”

#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 
+0

我建议查看[字典](https://docs.python.org/2/tutorial/datastructures.html#dictionaries),它可以节省您很长的if链。它们很容易用来打印一个字符串,当你真的要使用它们来运行代码时它会更复杂一些,但它可以使用函数。 – SuperBiasedMan

+0

@SuperBiasedMan非常感谢您的建议,我必须研究它们。听起来像他们可以节省我一点时间。 –

回答

6

您需要使用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: 
      ... 
+0

谢谢,只是去尝试,它固定它,我是新来蟒蛇所以我不那么确定的事情了,感谢您的帮助:) –

+0

@CuriousProgrammer可悲的是没有点我:(因为它不是我的回答但是给Hiro欢呼 – Harman