oop - Access a method's local variables in Python -
was going through python tutorial , have asked related question here(code previous example , @emmanuel)
code:
import math, time class primefactor: def __init__(self): pass def isprime(self,number): start=time.clock() fnum = [1,] print "reticulating splines..." last = int(math.ceil(math.sqrt(number))) p in range(2, last + 1): if (number % p) == 0: fnum.append(p) fnum.append(number / p) # remove duplicates, sort list fnum = list(set(fnum)) fnum.sort() end=time.clock() if len(fnum) > 1: return number, "is not prime because of these factors", fnum ,"time taken", end-start else: return true, "time taken", end-start print "prime or factor calculator v3 using sqrt(n)" print # num =int(raw_input("enter number: ")) eg=primefactor() print eg.isprime(num)
from code, tried variable fnum local function(method) isprime, contains factor list. accessing calling
print eg.isprime(num).fnum
gave me error
attributeerror: 'tuple' object has no attribute 'fnum'
i guess cannot call local variable way.
plus code not reusable. decided rewrite, make more modular.
rewritten code:
import math class primefactor: def __init__(self): pass def isprime(self,number): fnum = [1,] last = int(math.ceil(math.sqrt(number))) p in range(2, last + 1): if (number % p) == 0: return false else: return true def getfactors(self,number): fnum = [1,] last = int(math.ceil(math.sqrt(number))) p in range(2, last + 1): if (number % p) == 0: fnum.append(p) fnum.append(number / p) # remove duplicates, sort list fnum = list(set(fnum)) fnum.sort() if len(fnum) > 1: return fnum else: return none num =int(raw_input("enter number: ")) eg=primefactor() if eg.isprime(num): print num, "is prime number" else: print num, "is not prime number" print "factors", eg.getfactors(num)
i had forgo time calculation. can calculate time while using instance.
question:
can access local variable fnum
in previous example? if yes, how?(i guess no). if no, rewritten code enough or doing wrong?
the problem modification you're duplicating calculus. understand want calculated factors, involves creating fnum attribute:
import math, time class primefactor: def __init__(self): self.fnum = [1,] self.elapsedtime = 0 def getelapsedtime(self): return self.elapsedtime def getfactors(self): return self.fnum def isprime(self,number): start=time.clock() self.fnum = [1,] last = int(math.ceil(math.sqrt(number))) p in range(2, last + 1): if (number % p) == 0: self.fnum.append(p) self.fnum.append(number / p) # remove duplicates, sort list self.fnum = list(set(self.fnum)) self.fnum.sort() end=time.clock() self.elapsedtime = end-start return (not len(self.fnum) > 1 ) num =int(raw_input("enter number: ")) eg=primefactor() if eg.isprime(num): print num, "is prime number", eg.isprime(num) else: print num, "is not prime number" print "factors", eg.getfactors() print eg.getelapsedtime()
you develop code little bit more , take advantage of previous calculated factors, using dynamic programming.
hope helps.
Comments
Post a Comment