What exactly doesn't work the way you'd want it?
I see this in your code (repeated in multiple places):
while not comp_bulls.isnumeric() or len(comp_bulls) != 1 or int(comp_bulls) > 4:
comp_bulls = input("Invalid input. Please type a number between 1 and 4: ")
It seems an OK check for me. (I'm not a Python developer.) You check if the value of input (, which is a string) is a number indeed, then you cast it to int. I don't think you'd need to check the length is not 1. It would be enough to check if the number is larger than 4 (or perhaps less than your minimum, 0?).
You could move this check into a separate function so you wouldn't need to copy-paste your code.