想想Python - 练习4.3#2

时间:2017-07-13 17:38:34

标签: python

这些是问题。我成功完成了问题1,但我只是将其添加到上下文中。我在问题2中遇到了问题。

1. Write a function called square that takes a parameter named t, which is a turtle. It
should use the turtle to draw a square.
Write a function call that passes bob as an argument to square, and then run the
program again.
2. Add another parameter, named length, to square. Modify the body so length of the
sides is length, and then modify the function call to provide a second argument. Run
the program again. Test your program with a range of values for length.

这是我的工作:

import turtle
bob = turtle.Turtle()
print(bob)

def square(t, length):
    for i in range(4):
        bob.fd(t, length)
        bob.lt(t)

square(bob, 200)

turtle.mainloop()

以下是追溯:

Traceback (most recent call last):
  File "/Users/ivan/Documents/Python/thinkpython/square.py", line 10, in <module>
    square(bob, 200)
  File "/Users/ivan/Documents/Python/thinkpython/square.py", line 7, in square
    bob.fd(t, length)
TypeError: forward() takes 2 positional arguments but 3 were given

我在回溯中不理解的部分是我只看到给bob.fd()的两个参数,但它说它收到了三个。有人可以解释这种情况吗?

2 个答案:

答案 0 :(得分:1)

因为bobTurtle类的实例化而fd是类函数,所以在调用函数时会传递一个隐式self。如果您要查看fd课程中Turtle的定义,您会看到def fd(self, distance)之类的内容。在调用类函数bob.fd(t, length)时,self参数将隐式传递该类的实例化,然后您传递另外两个参数(t,length),总共3个参数。< / p>

答案 1 :(得分:0)

forward function Yehuda Katz只接受一个参数fd

  

turtle.fd(distance)参数:
  距离 - 数字(整数或浮点数)   将乌龟向前移动指定的距离,朝向海龟的方向。

  1. 在您的情况下,您应该只使用您的海龟实例distance并使用其中的一个参数调用bob,例如fd
  2. 另外你的乌龟左转功能需要一个整数或浮点数而不是乌龟实例。所以它应该像t.fd(length),如果你想让乌龟转90度。
  3. 你的问题要求你传递一只乌龟作为参数t.lt(90)。那是你的乌龟实例。这就是为什么我们不是致电tbob.fd()而是致电bob.ltt.fd()

    t.lt()
  4. 上面的代码应该让海龟import turtle bob = turtle.Turtle() print(bob) def square(t, length): for i in range(4): t.fd(length) t.lt(90) square(bob, 200) turtle.mainloop() 画一个200乘200的正方形。 希望这可以帮助。如果您仍然不明白发表评论,我会更详细地解释。