Here it is a bit of code, that corrects your mistakes and uses ① a little different looping scheme, that I find more flexible, ② a simple animation trick, as suggested in other answers and comments, and ③ an alternative algorithm that gives very similar results when you use a small time step, but is more accurate if you use a longer time step.
I include no graphic output because it's an animation, test it yourself, please.
import numpy as np
import matplotlib.pyplot as plt
# CONSTANTS
a = np.array([0.0, -9.8, 0.0])
theta = np.radians(35.0)
v1 = 3.3
# Initial conditions
t, dt = 0.0, 0.01
r = np.array([0.0, 1.2, 0.0])
v = v1 * np.array([np.cos(theta),np.sin(theta),0])
# set the limits of the plots, to avoid annoying resizing, and grid
plt.axis((-0.05, 2.05, -0.05, 1.45))
plt.grid()
# imo, it's better a never ending loop with a break condition
# placed where it is needed - also, it's better to plot
# also the first and the last points
while 1:
plt.scatter(r[0], r[1], color='red', s=3)
plt.pause(.00001)
if r[1] < 0: break
v = v + a * dt
r = r + v * dt
t = t + dt
# reset the initial conditions
t, dt = 0.0, 0.01
r = np.array([0.0, 1.2, 0.0])
v = v1 * np.array([np.cos(theta),np.sin(theta),0])
# here a little improvement, instead of using the FINAL value
# of the velocity to compute the final displacement, let's
# use the MEAN value of the velocity during the time step
while 1:
plt.scatter(r[0], r[1], color='blue', s=3)
plt.pause(.00001)
if r[1] < 0: break
v0 = v
v = v + a * dt
r = r + (v0+v)/2 * dt
t = t + dt