У вас две серьезные проблемы.Во-первых, код в том виде, в котором он представлен, имеет неправильный отступ, так что тело кода для countPrimeSetBits()
вместо этого является частью внутренней функции isPrime()
.Вторая проблема заключается в том, что, помимо того, что она является наихудшей реализацией, ваша isPrime()
на самом деле не работает:
>>> isPrime(169)
True
>>> 13 * 13
169
>>>
из-за этого предложения else
, помещающего return
в неправильную точку вкод:
else:
return True
Ниже приведен исправленный код, который, как мы надеемся, будет работать в обеих средах:
class Solution:
def countPrimeSetBits(self, L, R):
"""
:type L: int
:type R: int
:rtype: int
"""
def isPrime(number):
if number == 0:
return False
divisors = list(range(number))
divisors.remove(0)
if divisors:
divisors.remove(number - 1)
for divisor in divisors:
if number % (divisor + 1) == 0:
return False
return True
count = 0
for i in range(L, R + 1):
newlist = list(bin(i)[2::])
newcount = 0
for j in newlist:
if j == '1':
newcount += 1
if isPrime(newcount):
count += 1
return count