下面的程序允许我使用鼠标和键在生成的小盒子中创建形状。我无法理解下面代码中的两个语句。
从下面的代码中,当在第一个if语句中按下+键时,python是如何改变大小的(与下一个用于 - 的elif语句相同)?此外,当连续按下+按钮时,尺寸如何增加。嵌套在下面的语句中的if语句不应该允许大小因last_key而改变!=“+”:为False,因为在按下“+键之后,该值现在将被存储为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(主)
答案 0 :(得分: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
条件块,检查是否{{ 1}}是“+”(不是),更改last_key
,然后将last_key设置为“+”。然后,由于您的计算机速度很快,它几乎不可能再次进入size
条件(因为您几乎肯定没有在计算机执行几个循环的时间内从键中释放手指),但是这一次is_key_pressed
将等于last_key
,因此不会再次执行。