2014-01-28 192 views
-1

下面的程序允许我使用鼠标和键在一个生成的小盒子中创建形状。我无法理解下面代码中的两条语句。if,elif,else python语法

从下面的代码,当在第一个if语句中按下+键时,python如何更改大小(与下一个elif语句的 - 相同)?此外,如果连续按多次按钮,尺寸会如何增加。嵌套在下面语句中的if语句不应允许由于last_key!=“+”而改变大小:因为在按下“+”键之后,该值现在将被存储为last_key。一会儿,但似乎无法追赶上流动。

def main(): 
size = INITIAL_SIZE   # current diameter of circle or length of square 
set_fill_color(1, 0, 0)  # shapes are initially red 
last_key = ""    # no key pressed yet 
drawing_circle = False  # are we drawing circles? 
drawing_square = False  # are we drawing squares? 
mouse_was_down = False  # was the mouse button most recently down? 

while not window_closed(): 
    if is_key_pressed("+"):  # increase size? 
     if last_key != "+": 
      size = min(size + SIZE_CHANGE, MAX_SIZE) 
     last_key = "+" 
    elif is_key_pressed("-"): # decrease size? 
     if last_key != '-': 
      size = max(size - SIZE_CHANGE, MIN_SIZE) 
     last_key = '-' 
    elif is_key_pressed("r"): # draw in red? 
     set_fill_color(1, 0, 0) 
     last_key = "r" 
    elif is_key_pressed("g"): # draw in green? 
     set_fill_color(0, 1, 0) 
     last_key = "g" 
    elif is_key_pressed("b"): # draw in blue? 
     set_fill_color(0, 0, 1) 
     last_key = "b" 
    elif is_key_pressed("c"): # draw circles? 
     drawing_circle = True 
     drawing_square = False 
     last_key = "c" 
    elif is_key_pressed("s"): # draw squares? 
     drawing_circle = False 
     drawing_square = True 
     last_key = "s" 
    else: 
     last_key = ""   # no key pressed 

    if mouse_down(): 
     if not mouse_was_down: # beginning of a mouse click? 
      if drawing_circle: 
       draw_circle(mouse_x(), mouse_y(), size/2) 
      elif drawing_square: 
       draw_rectangle(mouse_x() - size/2, mouse_y() - size/2, size, size) 
     mouse_was_down = True 
    else: 
     mouse_was_down = False 

    request_redraw() 
    sleep(0.05) 

start_graphics(主)

+5

欢迎来到Stack Overflow。请尽快阅读[关于]页面。如您所知,Python缩进至关重要。 “while”循环意味着像所示的那样是独立的,或者是'main()'的一部分。那么没有缩进的'start_graphics(main)'怎么样?一般情况下,输入你想要的代码,不需要制表符,然后将'n'paste复制到编辑框中,然后选择它并使用编辑框上方的** {}'**按钮缩进它所有。 –

+0

另外,你将'last_key'设置为''“'',这不等于'”+“',所以很有可能如果你按下”+“键,释放它,然后再按一次,大小将增加两次。 –

+0

它看起来像嵌套的'if'是为了防止按住'+'键的大小增加。我这样说是因为,在任何**键按下0.05秒后,“last_key”被设置为空字符串。 – That1Guy

回答

0

while not window_closed()将循环块,直到你关闭该窗口。

if is_key_pressed("+")将触发成块时你必须按住“+”键。

if last_key != "+"确保您不会因为CPU比您的手指快而导致“击中+”一千次。

size = min(size + SIZE_CHANGE, MAX_SIZE)更改大小到size+SIZE_CHANGE,除非那会比MAX_SIZE更大,在这种情况下它变为MAX_SIZE代替。

last_key = "+"只是清理,以确保if last_key !=子句在所有其他if/elif条件中工作。关键部分是在块的其余部分工作后发生这种情况,所以如果您最后按下“+”,然后按“+”,它将进入is_key_pressed条件块,检查last_key是否为“+”(不是),更改size,然后将last_key设置为“+”。然后,由于您的计算机速度很快,因此几乎无法再输入is_key_pressed条件(因为在您的计算机执行几个周期的时间内,您几乎肯定不会从手指上松开手指),但是此时last_key将会等于"+",所以它不会再执行。

+0

非常有帮助。像Johnathan Leffler所建议的那样,我会努力清理我的代码。 – dxg4136