Calcula si un número es primo en Python

Uno de los problemas que propongo a mis alumnos cuando están aprendiendo bucles en un lenguaje de programación es calcular si un número es primo o no.

Aquí os dejo el enunciado del problema y una propuesta de solución en Python. Espero que os sirva tanto si es para la enseñanza como para el aprendizaje.

Problema:

Imprime en pantalla si un entero dado es primo o no. Un número primo es un entero mayor que 1 que solo se puede dividir por 1 y por sí mismo.

Solución propuesta (didáctico):

import sys

a = int(sys.argv[1])
es_primo = False

if a > 1:
    es_primo = True
    for i in range(2, a):
        if a % i == 0:
            es_primo = False

print(es_primo)

Solución propuesta (eficiente):

import sys

a = int(sys.argv[1])
es_primo = False

if a > 1:
    es_primo = True
    if a > 2 and a % 2 == 0:
        es_primo = False
    else:
        for i in range(3, a, 2):
            if a % i == 0:
                es_primo = False
                break

print(es_primo)