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

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -