一个关于课程的愚蠢问题 [英] A dumb question about a class

查看:85
本文介绍了一个关于课程的愚蠢问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还在努力理解课程。我已经取得了一些进展,我想,但是我不知道如何使用这个。我怎么称呼它,

或它的任何功能?这是来自Cookbook,

< http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/523048>。


谢谢,


Dick Moores


==================== ============================== ===

类PrimeList:

def __init __(self,initial = 0):

self.primelist = [2,3]

self.primelookup = [0,0,1,1]

self.max_prime = 3

self.grow_primelist(初始)


def grow_primelist(self,number):

newprimes = []

而self.max_prime< = number:

next = self.nextprime()

newprimes .append(下)

self.max_prime = next

size_difference = self.max_prime - len(self.primelookup)+ 1

self。 primelookup.extend([0] * size_difference)

for i in newprimes:

self.primelookup [i] = 1


def包含(self,number):

如果数字< 2:

返回0

如果是数字len(self.primelookup) - 1:

self.grow_primelist(数字)

返回self.primelookup [编号]

返回self.primelookup [编号]


def nextprime(个体经营):

i = self.max_prime + 2

而1:

isprime = True

for self.primelist:

if i%prime == 0:

isprime = False

i + = 2

break

if isprime:

self.primelist.append(i)

返回(i)

============ ====================================== ====

I''m still trying to understand classes. I''ve made some progress, I
think, but I don''t understand how to use this one. How do I call it,
or any of its functions? It''s from the Cookbook, at
<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/523048>.

Thanks,

Dick Moores

================================================== ===
class PrimeList:
def __init__(self, initial=0):
self.primelist = [2,3]
self.primelookup = [0,0,1,1]
self.max_prime = 3
self.grow_primelist(initial)

def grow_primelist(self,number):
newprimes = []
while self.max_prime <= number:
next = self.nextprime()
newprimes.append(next)
self.max_prime = next
size_difference = self.max_prime - len(self.primelookup) + 1
self.primelookup.extend([0] * size_difference)
for i in newprimes:
self.primelookup[i]=1

def contains(self,number):
if number < 2:
return 0
if number len(self.primelookup) - 1:
self.grow_primelist(number)
return self.primelookup[number]
return self.primelookup[number]

def nextprime(self):
i = self.max_prime + 2
while 1:
isprime = True
for prime in self.primelist:
if i % prime == 0:
isprime = False
i += 2
break
if isprime:
self.primelist.append(i)
return(i)
================================================== ====

推荐答案

Dick Moores写道:
Dick Moores wrote:

我还在努力理解课程。我已经取得了一些进展,我想,但是我不知道如何使用这个。我如何调用它,或者

它的任何功能?这是来自Cookbook,

< http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/523048>。
I''m still trying to understand classes. I''ve made some progress, I
think, but I don''t understand how to use this one. How do I call it, or
any of its functions? It''s from the Cookbook, at
<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/523048>.



简短的回答是使用应该类似::

The short answer is that use should look something like::


>> plist = PrimeList()
plist.contains(32)
>>plist = PrimeList()
plist.contains(32)



错误

False


>> plist.contains(23)
>>plist.contains(23)



True


但这似乎不是一个特别好的食谱。好像你一样

真的宁愿写代码::

True

But this doesn''t seem like a particularly good recipe. Seems like you
would really rather be writing code like::


>> plist = PrimeList()
1 in plist
>>plist = PrimeList()
1 in plist



False

False


>> 2 in plist
>>2 in plist



True

True


>> 22 in plist
>>22 in plist



False

False


>> 23 in plist
>>23 in plist



True

True


>> 782 in plist
>>782 in plist



False

False


>> 787 in plist
>>787 in plist



True


这就是我怎么写的食谱::


import itertools


def iter_primes ():

#2和+无穷大之间所有数字的迭代器

numbers = itertools.count(2)


#start primes forever

而True:


#从迭代器中获取第一个数字(总是素数)

prime = numbers.next()

收益素数


#从(无限)迭代器中删除所有数字

#divisible by我们刚生成的素数

numbers = itertools.ifilter(prime .__ rmod __,数字)

class PrimeList(object):

def __init __(自我):

#in素数的有限迭代器

self._prime_iter = iter_primes()


#我们见过的最后一个素数

self。 _last_prime =无


#到目前为止看到的所有素数

self._prime_set = set()


#add第一个素数(所以设置了_last_prime)

self._add_prime()


def __contains __(self,n):

#将素数添加到列表中,直到我们超过n

而n self._last_prime:

self._add_prime()


如果n是我们的素数之一,则返回True

在self._prime_set中返回n

def _add_prime(个体经营):

#从迭代器中取一个素数并更新素数集

self._last_prime = self._prime_iter.next()

self._prime_set.add(self._last_prime)

STeVe

True

Here''s how I''d write the recipe::

import itertools

def iter_primes():
# an iterator of all numbers between 2 and +infinity
numbers = itertools.count(2)

# generate primes forever
while True:

# get the first number from the iterator (always a prime)
prime = numbers.next()
yield prime

# remove all numbers from the (infinite) iterator that are
# divisible by the prime we just generated
numbers = itertools.ifilter(prime.__rmod__, numbers)
class PrimeList(object):
def __init__(self):
# infinite iterator of primes
self._prime_iter = iter_primes()

# the last prime we''ve seen
self._last_prime = None

# all primes seen so far
self._prime_set = set()

# add the first prime (so that _last_prime is set)
self._add_prime()

def __contains__(self, n):
# add primes to the list until we exceed n
while n self._last_prime:
self._add_prime()

# return True if n is one of our primes
return n in self._prime_set

def _add_prime(self):
# take a prime off the iterator and update the prime set
self._last_prime = self._prime_iter.next()
self._prime_set.add(self._last_prime)
STeVe


2007年12月7日下午03:09,Steven Bethard写道:
At 03:09 PM 8/12/2007, Steven Bethard wrote:

>这就是我写的食谱::

import itertools

def iter_primes():

#2和+无穷大之间所有数字的迭代器

numbers = itertools.count(2)

#永久生成素数

而True:


#从迭代器中获取第一个数字(总是一个素数)

prime = numbers.next()

收益素数


#删除(无限)迭代器中的所有数字

#可以被我们刚生成的素数整除

numbers = itertools.ifilter(prime .__ rmod__,数字)


类PrimeList(对象):

def __init __(self):

#primes的无限迭代器

self._prime_iter = iter_primes()


#我们见过的最后一个素数

self._last_prime =无


#到目前为止看到的所有素数

self._prime_set = set()


#添加第一个素数(所以设置_last_prime)

self._add_prime()

def __contains __(self,n):

#将素数添加到列表,直到我们超过n

而n self._last_prime:

self._add_prime()


#return如果n是我们的素数之一

返回n in self._prime_set


def _add_prime(个体经营):

#取消黄金迭代器并更新素数集

self._last_prime = self._prime_iter.next()

self._prime_set.add(self._last_prime)
>Here''s how I''d write the recipe::

import itertools

def iter_primes():
# an iterator of all numbers between 2 and +infinity
numbers = itertools.count(2)

# generate primes forever
while True:

# get the first number from the iterator (always a prime)
prime = numbers.next()
yield prime

# remove all numbers from the (infinite) iterator that are
# divisible by the prime we just generated
numbers = itertools.ifilter(prime.__rmod__, numbers)
class PrimeList(object):
def __init__(self):
# infinite iterator of primes
self._prime_iter = iter_primes()

# the last prime we''ve seen
self._last_prime = None

# all primes seen so far
self._prime_set = set()

# add the first prime (so that _last_prime is set)
self._add_prime()

def __contains__(self, n):
# add primes to the list until we exceed n
while n self._last_prime:
self._add_prime()

# return True if n is one of our primes
return n in self._prime_set

def _add_prime(self):
# take a prime off the iterator and update the prime set
self._last_prime = self._prime_iter.next()
self._prime_set.add(self._last_prime)



我担心我的下一个问题是我该如何运行?


Dick

I''m afraid my next question is "How do I run this"?

Dick


Dick Moores写道:
Dick Moores wrote:

2007年8月12日03:09,Steven Bethard写道:
At 03:09 PM 8/12/2007, Steven Bethard wrote:

>这是怎么回事我会写食谱::

导入itertools

#一个介于2和+无穷大之间的所有数字的迭代器
numbers = itertools.count(2)
#永远生成素数
而True:

#从迭代器中获取第一个数字(总是素数)
prime = numbers.next()
产生素数
#删除(无限)迭代器中的所有数字
#可被我们刚生成的素数整除
numbers = itertools.ifilter(prime .__ rmod __,数字)

类PrimeList(对象):
def __init __(self):
#无限的iterator of primes
self._prime_iter = iter_primes()

#我们见过的最后一个素数
self._last_prime =无

#到目前为止看到的所有素数
self._prime_set = set()
#添加第一个素数(以便设置_last_prime)
self__add_prime()

def __contains __(self,n):
#将素数添加到列表中直到我们超过n
而n self._last_prime:
self._add_prime()

#return如果n是我们的素数之一,则返回True
在self._prime_set中返回n

def _add_prime(self):
#取消迭代器并更新素数集
self._last_prime = self._prime_iter.next()
自我。 _prime_set.add(self._last_prime)
>Here''s how I''d write the recipe::

import itertools

def iter_primes():
# an iterator of all numbers between 2 and +infinity
numbers = itertools.count(2)

# generate primes forever
while True:

# get the first number from the iterator (always a prime)
prime = numbers.next()
yield prime

# remove all numbers from the (infinite) iterator that are
# divisible by the prime we just generated
numbers = itertools.ifilter(prime.__rmod__, numbers)
class PrimeList(object):
def __init__(self):
# infinite iterator of primes
self._prime_iter = iter_primes()

# the last prime we''ve seen
self._last_prime = None

# all primes seen so far
self._prime_set = set()

# add the first prime (so that _last_prime is set)
self._add_prime()

def __contains__(self, n):
# add primes to the list until we exceed n
while n self._last_prime:
self._add_prime()

# return True if n is one of our primes
return n in self._prime_set

def _add_prime(self):
# take a prime off the iterator and update the prime set
self._last_prime = self._prime_iter.next()
self._prime_set.add(self._last_prime)



我担心我的下一个问题是如何运行此?


I''m afraid my next question is "How do I run this"?



我在顶部显示的方式(你在回复中剪断)的方式相同::


The same way I showed at the top (which you snipped in your reply)::


>> plist = PrimeList()
1 in plist
>>plist = PrimeList()
1 in plist



False

False


>> 2 in plist
>>2 in plist



True

True


>> 22 in plist
>>22 in plist



False

False


>> 23 in plist
>>23 in plist



True

True


>> 784 in plist
>>782 in plist



False

False


>> 787 in plist
>>787 in plist



正确


第一行,``plist = PrimeList()``创建一个PrimeList对象,

命名为``plist` `。然后你可以检查一个素数是否在那个

PrimeList对象,就像你可能检查一个普通的``list``或``set``

对象一样 - 使用如上所述的``in``运算符。


请注意,如果你只想迭代所有素数,那么就没有需要

了这个班级。只需在iter_primes()中写下::


为素数:

...


HTH,


STeVe

True

The first line, ``plist = PrimeList()`` creates a PrimeList object and
names it ``plist``. You can then check whether a prime is in that
PrimeList object much like you might check a normal ``list`` or ``set``
object -- using the ``in`` operator as above.

Note that if you just want to iterate over all the primes, there''s no
need for the class at all. Simply write::

for prime in iter_primes():
...

HTH,

STeVe


这篇关于一个关于课程的愚蠢问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆