1

Alright so I have beat my head over my desk for a few days over this one and I still cannot get it I keep getting this problem:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 44, in <module>
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 35, in main
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 15, in __init__
builtins.TypeError: can't multiply sequence by non-int of type 'float'

over and over. I think I have hit the wall and really I have done a ecent amount of looking and testing but if anyone could point me in teh right direction it would be greatly appreciated.

from math import pi, sin, cos, radians

def getInputs():
    a = input("Enter the launch angle (in degrees): ")
    v = input("Enter the initial velocity (in meters/sec): ")
    h = input("Enter the initial height (in meters): ")
    t = input("Enter the time interval between position calculations: ")
    return a,v,h,t
class Projectile:

    def __init__(self, angle, velocity, height):

        self.xpos = 0.0
        self.ypos = height
        theta =  pi *(angle)/180
        self.xvel = velocity * cos(theta)
        self.yvel = velocity * sin(theta)

    def update(self, time):
        self.xpos = self.xpos + time * self.xvel
        yvel1 = self.yvel - 9.8 * time
        self.ypos = self.ypos + time * (self.yvel + yvel1) / 2.0
        self.yvel = yvel1

    def getY(self):
        "Returns the y position (height) of this projectile."
        return self.ypos

    def getX(self):
        "Returns the x position (distance) of this projectile."
        return self.xpos

def main():
    a, v, h, t = getInputs()
    cball = Projectile(a, v, h)
    zenith = cball.getY()
    while cball.getY() >= 0:
        cball.update(t)
        if cball.getY() > zenith:
            zenith = cball.getY()
    print ("/n Distance traveled: {%0.1f} meters." % (cball.getY()))
    print ("The heighest the cannon ball reached was %0.1f meters." % (zenith))

if __name__ == "__main__": main()
BrenBarn
  • 242,874
  • 37
  • 412
  • 384

1 Answers1

8

Your input functions return strings, not numeric types. You need to convert them to integers or floats first as appropriate.

I think the particular error you're seeing is when you try to calculate theta. You multiply pi (a floating-point number) by angle (which holds a string). The message is telling you that you can't multiply a string by a float, but that you could multiply a string by an int. (E.g. "spam" * 4 gives you "spamspamspamspam", but "spam" * 3.14 would make no sense.) Unfortunately, that's not a very helpful message, because for you it's not pi that's the wrong type, but angle, which should be a number.

You should be able to fix this by changing getInputs:

def getInputs():
    a = float(input("Enter the launch angle (in degrees): "))
    v = float(input("Enter the initial velocity (in meters/sec): "))
    h = float(input("Enter the initial height (in meters): "))
    t = float(input("Enter the time interval between position calculations: "))
    return a,v,h,t

I should also note that this is an area where Python 2.* and Python 3.* have different behaviour. In Python 2.* , input read a line of text and then evaluated it as a Python expression, while raw_input read a line of text and returned a string. In Python 3.* , input now does what raw_input did before - reads a line of text and returns a string. While the 'evaluate it as an expression' behaviour could be helpful for simple examples, it was also dangerous for anything but a trivial example. A user could type in any expression at all and it would be evaluated, which could do all sorts of unexpected things to your program or computer.

Weeble
  • 17,058
  • 3
  • 60
  • 75
  • Ahh thank you very much for taking the time to respond to me, I really do appreciate it. I did what you said and now I am getting. Traceback (most recent call last): File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 44, in File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 34, in main File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 6, in getInputs builtins.ValueError: could not convert string to float: which while it is refreshing to get a new message, any thoughts? – user2329796 Apr 28 '13 at 20:40
  • Perhaps you didn't type in a number? – Weeble Apr 29 '13 at 15:11