TypeError: can only concatenate list (not "int") to list 4
Question: I'm required to take a Python module for my course and I get this error for my
script. It's plotting the trajectory of a projectile and calculating a few
other variables. I've typed the script exactly as in the booklet we are given.
Because I am an absolute beginner I can't understand other answers to this
error. I would appreciate it an awful lot if someone could give me a quick
fix, I don't have time at the moment to learn enough to fix it myself.

Code:

    
    
    import matplotlib.pyplot as plt
    import numpy as np
    import math # need math module for trigonometric functions
    
    g = 9.81 #gravitational constant
    dt = 1e-3 #integration time step (delta t)
    v0 = 40 # initial speed at t = 0
    
    angle = math.pi/4 #math.pi = 3.14, launch angle in radians
    
    time = np.arange(0,10,dt) #time axis
    vx0 = math.cos(angle)*v0 # starting velocity along x axis
    vy0 = math.sin(angle)*v0 # starting velocity along y axis
    
    xa = vx0*time # compute x coordinates
    ya = -0.5*g*time**2 + vy0*time # compute y coordinates
    
    fig1 = plt.figure()
    plt.plot(xa, ya) # plot y versus x
    plt.xlabel ("x")
    plt.ylabel ("y")
    plt.ylim(0, 50)
    plt.show()
    
        def traj(angle, v0): # function for trajectory
            vx0 = math.cos(angle) * v0 # for some launch angle and starting  velocity
        vy0 = math.sin(angle) * v0 # compute x and y component of starting velocity
    
        x = np.zeros(len(time))   #initialise x and y arrays
        y = np.zeros(len(time))
    
        x[0], y[0], 0 #projecitle starts at 0,0
        x[1], y[1] = x[0] + vx0 * dt, y[0] + vy0 * dt # second elements of x and
                                                  # y are determined by initial 
                                                  # velocity
        i = 1
        while y[i] >= 0: # conditional loop continuous until
        # projectile hits ground
            x[i+1] = (2 * x[i] - x[i - 1]) # numerical integration to find x[i + 1]                                       
            y[i+1] = (2 * y[i] - y[i - 1]) - g * dt ** 2 # and y[i + 1]
    
            i = [i + 1] # increment i for next loop
    
    
            x = x[0:i+1] # truncate x and y arrays                                                
            y = y[0:i+1]
            return x, y, (dt*i), x[i] # return x, y, flight time, range of projectile
    
    x, y, duration, distance = traj(angle, v0)
    print "Distance:" ,distance
    print "Duration:" ,duration
    
    n = 5
    angles = np.linspace(0, math.pi/2, n)
    maxrange = np.zeros(n)
    
    for i in range(n):
        x,y, duration, maxrange [i] = traj(angles[i], v0)
    
    angles = angles/2/math.pi*360 #convert rad to degress
    
    print "Optimum angle:", angles[np.where(maxrange==np.max(maxrange))]
    

The error explicitly:

    
    
      File "C:/Users/***** at *****", line 52, in traj
        x = x[0:i+1] # truncate x and y arrays
    
    TypeError: can only concatenate list (not "int") to list
    


Answer: As is pointed out in the comments, this is the offending line

    
    
    i = [i + 1] # increment i for next loop
    

Here, `i` is not actually being incremented as the comment suggests. When `i`
is 1, it's being set to `[1 + 1]`, which evaluates to `[2]`, the list
containing only the number 2. Remove the brackets.

