timetabedlidalot
timetabedlidalot

Reputation: 67

Invalid syntax error, but I can't spot it? (Python)

Here is my code, the syntax error is on line 18. I am struggling to understand why I am getting this error.

    from visual import *

    def Efield(pos, charge)
    
        """
        Calculate electric field due to point charge
        
        Inputs
        ======
        
        pos        - Position where the E field is required (vector)
        charge.pos - Position of the charge (vector)
        charge.q   - Charge (float)
        
        Returns
        =======
        
        The electric field vector
        """
        
        r = vector(charge.pos) - vector(pos)  # Vector from pos to chargepos
        
        E = float(q) * r / abs(r)**3  # Coulomb's law
        
        return E

# Create some charges

    charge1 = sphere(pos=(0,2,0), q=1, radius=0.2, color=color.red)    # Positive charge
    charge2 = sphere(pos=(0,-2,0), q=-1, radius=0.2, color=color.blue)  # Negative charge

# Generate arrows at random locations
    random.seed(1234)  # Specify a random seed

    n = 500
    for i in range(n):
        x = random.uniform(-4 4)
        y = random.uniform(-4,4)
        z = random.uniform(-4,4)
    
        pos = vector(x,y,z)
    
        # Make sure pos is not too close to both positive and negative charge
        if abs(pos - charge1.pos) > 1 and abs(pos - charge2.pos) > 1:
        # Create an arrow if it's far enough from both charges
        a = arrow(pos=pos, axis= Efield(pos, charge1) + Efield(pos,charge1))

Upvotes: -3

Views: 947

Answers (1)

River
River

Reputation: 9093

You are missing a : after def Effield(pos, charge)

You are also missing a comma on the line:

x = random.uniform(-4 4)

should be

x = random.uniform(-4, 4)

Also this function is not indented at all, which will throw:

IndentationError: expected an indented block

Upvotes: 1

Related Questions