Problema em Python envolvendo números primos em função

Oi gente, tudo bem? Estou com uma dúvida em um problema. Basicamente devo escrever um código que receba um número e devolva o maior número número primo, sendo esse número primo menor ou igual ao número recebido.
Exemplo, se eu digitar 51, devo receber 47. Se eu digitar 10, recebo 7. Se eu digitar 17, recebo 17. Etc.
Alguém pode me dar uma luz? Só consigo escrever um código que classifique um número como primo ou não primo, mas fazer o código me devolver o menor número primo que mais se aproxime do número input, não consigo. O mais próximo que cheguei de resolver esse problema é o seguinte:

def primo(x):
    a=2
    val=0
    while x>a:
        if x%a==0:
            val=val+1
            a=a+1
        else:
            a=a+1
        if val=0:
            return x
        else:
            primo(x-1)