функция определения простых чисел 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 шт):

Автор решения: MarianD

Ошибка состоит в том, что вы в выражении

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 а не то, что вы хотели...

→ Ссылка