Home > Mobile >  How can I ensure that a function is "defined" in Python?
How can I ensure that a function is "defined" in Python?

Time:06-10

Trying to learn python as a java programmer. I would really appreciate some insight into why my program is telling me that my "isPrime" function isn't defined, especially with the use of 'self.'

import math

class Problem10:

    def sumOfPrimesX(self, number):
        sum = 0
        for i in range(0, number):
            if isPrime(i):
                sum  = i
        return sum
    
    def isPrime(self, x):
        for n in range(0, math.floor(x/2)):
            if x % n == 0:
                return False
        return True
        
    print(sumOfPrimesX(input()))
    

CodePudding user response:

all functions need it as their first parameter in a python program

No, only the instance methods, the methods related to a specific instance of a class. A simple function can need to parameter.

And you won't see the parameter self filled with the classic way of calling it, if you call the method on a instance it'll be filled by it

p = Problem10()
p.sumOfPrimesX(int(input("Give a value")))  # call on instance, one paramater given

# same as 
Problem10.sumOfPrimesX(Problem10(), int(input("Give a value")))
# call on class itself, need to pass an instance as first to fill 'self

Also you need to wrap the input in an int, also start the loop at 2

p = Problem10()
print(p.sumOfPrimesX(int(input("Give a value"))))


class Problem10:

    def isPrime(self, x):
        for n in range(2, math.floor(x / 2)):
            if x % n == 0:
                return False
        return True

CodePudding user response:

The issue is both isPrime and sumofPrimesX are methods of the class Problem10.

Try the following:

import math

class Problem10:

    def sumOfPrimesX(self, number):
        sum = 0
        for i in range(0, number):
            if self.isPrime(i):
                sum  = i
        return sum
    
    def isPrime(self, x):
        for n in range(0, math.floor(x/2)):
            if x % n == 0:
                return False
        return True


pv = Problem10()
print(pv.sumOfPrimesX(input()))
  • Related