每当我在Python中按下相同的按钮时,如何依次更改龟图像?

时间:2019-08-09 14:08:10

标签: python turtle-graphics

我想编写一个程序,每次按“ n”键时都会按顺序更改乌龟图像。

它应该首先以“经典”形状开始,每按一次“ n”键,将形状更改为“圆形”,“箭头”,“乌龟”,然后循环回到“经典”。 / p>

31

当我按下'n'键时,它应该已经更改了一次。问题是,它变化太快。

3 个答案:

答案 0 :(得分:1)

您将通过n循环一次遍历for的所有可能值。相反,您需要做的是在函数外保存n 值,并在每次调用函数时对其进行更改:

n = 1
def changeTurtle():
    global n
    n = (n % 4) + 1  # cycle through 1, 2, 3, 4, 1, 2, 3, 4, ...
    if n == 1:
        t.shape('circle')
    elif n == 2:
        t.shape('arrow')
    elif n == 3:
        t.shape('turtle')
    else:
        t.shape('classic')

答案 1 :(得分:0)

这是我过度设计此问题的方式(并消除了对 <li><a> Welcome, <?php echo $this->session->name ?> </a></li> 语句的需要):

        public function login($username, $password){
        //Validate
        $this->db->where('username',$username);
        $this->db->where('password',$password);

        $result = $this->db->get('users');

        if ($result->num_rows() == 1) {
            return $result->row(0)->id;
        }else{
            return false;
        }
    }

答案 2 :(得分:0)

函数的另一种选择是让一个无限迭代器(如itertools.cycle)加载要循环浏览的所有形状。当您想要下一个形状时,您的程序只需询问它,更改乌龟,然后继续之前所做的任何其他操作。以下程序演示了如何完成此操作:

import itertools
import turtle


def main():
    canvas = turtle.Screen()
    t = turtle.Turtle()
    # noinspection PyProtectedMember
    shapes = itertools.cycle(sorted(canvas._shapes.keys()))
    t.shape(next(shapes))
    canvas.onkey(lambda: t.shape(next(shapes)), 'n')
    canvas.listen()
    canvas.mainloop()


if __name__ == '__main__':
    main()