66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
import math
|
|
|
|
class InputNotPrime(Exception):
|
|
pass
|
|
|
|
def isPrime(number):
|
|
if number % 2 == 0 or type(math.sqrt(number)) != float:
|
|
return False
|
|
|
|
for i in range(3, number, 2):
|
|
if number % i == 0:
|
|
return False
|
|
return True
|
|
|
|
def isTruncatablePrime(number):
|
|
if '0' in str(number):
|
|
return False
|
|
|
|
isRight = isRightTruncatablePrime(number)
|
|
isLeft = isLeftTruncatablePrime(number)
|
|
|
|
if isRight and isLeft:
|
|
return 'both'
|
|
elif isRight:
|
|
return 'right'
|
|
elif isLeft:
|
|
return 'left'
|
|
else:
|
|
return False
|
|
|
|
def isRightTruncatablePrime(number):
|
|
numbers = ['']
|
|
|
|
for digit in reversed(list(str(number))):
|
|
numbers.append(digit + numbers[len(numbers) - 1])
|
|
numbers.remove('')
|
|
|
|
for number in numbers:
|
|
if not isPrime(int(number)):
|
|
return False
|
|
return True
|
|
|
|
def isLeftTruncatablePrime(number):
|
|
numbers = ['']
|
|
|
|
for digit in list(str(number)):
|
|
numbers.append(numbers[len(numbers) - 1] + digit)
|
|
numbers.remove('')
|
|
|
|
for number in numbers:
|
|
if not isPrime(int(number)):
|
|
return False
|
|
return True
|
|
|
|
while True:
|
|
try:
|
|
n = int(input("Please enter a prime number: "))
|
|
if not isPrime(n):
|
|
raise InputNotPrime
|
|
break
|
|
except ValueError:
|
|
print('Please make sure your input is an integer!')
|
|
except InputNotPrime:
|
|
print('Please make sure your input is prime!')
|
|
|
|
print(isTruncatablePrime(n))
|