В настоящее время у вас есть:
def prime-checker (input could be scalar or a list)
Стратегия 1: (Удалите зацикливание внутри главной проверки, всегда работайте со скаляром, то есть не со списком). поэтому у вас есть:
def prime_checker (scalar, ie. non-list input arg) :
Чтобы справиться с этим, измените вашу реализацию, чтобы всегда обрабатывать скаляр. Делайте петли снаружи, вне функции первичной проверки. При этом у вашего прайм-чекера будет только математическая часть вычисления, поэтому он будет проще и понятнее.
Стратегия 2: Альтернативно, если вы настаиваете на том, чтобы держать список в цикле прайм-проверки.
Случай 1: если ваш ввод - просто число, скажем, 45. Затем отправьте входной аргумент как [45]. Таким образом, внешний вызов Prime-Checker (от внешнего абонента) станет
results = prime_checker( [45])
Случай 2: Если вы вводите список, скажем list1, то ваш вызов
results = prime_checker (list1).
Итак, теперь ваша реализация всегда ожидает и обрабатывает список.
# we always get input as a list (hence I changed the arg name)
def prime_checker(suspected_list):
# this branch *looks* recursive, but actually only handles a list
if (len(suspected_list) > 1) :
result_list = []
for prime_candidate in suspected_list:
result_list.append(prime_checker([prime_candidate]) # recur, as a list
return(result_list)
else: (when suspected list has only 1 entry)
# this branch does the actual prime calculation for a single input
suspected_prime = suspected_list[0]
prime_factor, factors, suspected_prime = 2, 0, abs(suspected_prime)
while factors < 1:
if suspected_prime % prime_factor == 0:
factors += 1
if math.ceil(suspected_prime**0.5) == prime_factor:
if factors == 0:
return True
else:
return False
prime_factor += 1