функция определения простых чисел Python
Помогите, пожалуйста разобраться. Понадобилось написать функцию для определения простых чисел на Python. Вот две практически одинаковые функции. Вопрос:почему
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
эта функция срабатывает. А вот эта:
def simple(num):
if num < 2:
return False
for i in range(2,int(num**0,5)+1):
if num % i == 0:
return False
return True
выдает ошибку
File "N:\Python my\abs.py", line 13, in simple for i in range(2,int(num**0,5)+1): ^^^^^^^^^^^^^ TypeError: int() can't convert non-string with explicit base.
Я понимаю, что квадратный корень далеко не у всех чисел целочисленный (int) и для верности его надо округлять(round). Я заменила во второй функции (int)на (round) и все работает... Но почему в первой функции все работает с (int), а вторая выдает ошибку. Благодарю.
Ответы (1 шт):
Ошибка состоит в том, что вы в выражении
int(num**0,5)
применили запятую вместо точки, и так int(num**0,5) интерпретируется как вызов функции int() с двумя параметрами: num**0 и 5, т. е. как
int(1, 5)
И это ошибка, потому что когда задан второй параметр (base), тогда первый параметр должен быть строкой или типа bytes или типы bytearray. Из документации:
class int(x, base=10)..........
Если x не является числом или задано base, то x должен быть строкой, bytes или экземпляром bytearray, представляющим целочисленный литерал в системе счисления base.
Что касается замены int() na round() в конце вашего вопроса, то ваш второй, неумышленный параметр 5 функции round() значит просто округление до точности 5 цифр после десятичной точки и не требует, чтобы первый аргумент не был числом.
Но тогда, к сожалению, round(num**0,5) возвратит просто число 1 а не то, что вы хотели...