简体   繁体   中英

TypeError: unsupported operand type(s) for Pow: 'list' and 'int' on line 15

All I want to do is have my loop use the distance formula to move the turtle down every second. However, every time I try and use the formula this error comes up. Does anyone know where I am going wrong?

import turtle

wn = turtle.Screen()
tony = turtle.Turtle()
tony.shape("turtle")
tony.pensize(5)
tony.up()
tony.left(90)
tony.forward(100)
tony.left(180)
tony.down()

gravity= float(10.3)

for i in [1,2,3,4,5,6,7,8,9,10]:
    tony.stamp()
    time = range(1,10,1)
    distance = float((gravity/2)*((time**2)-((time-1)**2)))
    tony.forward(distance)

The range function returns a list. You are storing this list in time , and then attempting to use it as the base of time ** 2 (time squared). Perhaps you wanted to set time to the value of i ?

Your variable time = range(1, 10, 1) is equivalent to time = [1, 2, 3, 4, 5, 6, 7, 8, 9] and so trying to square a list, as in distance = float((gravity/2)*((time**2)-((time-1)**2))) is undefined.

If your intention was to square each element in the list (ie [1, 4, 9, 16, ...] then what you're trying to do is formally called a map . Fortunately, python has a builtin map .

f = lambda x: x**2
map(f, list)

Above I used a lambda, which is an inline function. you could just have (slightly less) easily (slightly more inline with PEP8):

def f(x):
    return x ** 2

map(f, list)

Also: You subtracted 1 from your list as well. I'll leave it up to you to figure out a solution to that using the tools above.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM