x=0
y = raw_input("""Up to what number would you like to locate primes?: """)
for i in range(int(y)):
x = x + 1
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
elif x==2 or x==3 or x==5 or x==7:
print x, '--> PRIME'
elif x==1:
print x
else:
print x
我已经休息了一周半,我想我应该把我的时间花在学习Python上。我今晚早些时候写了这个小脚本,它只是打印出一个用户指定范围内的整数列表,并确定其中哪些是质数。我想做的但似乎找不到任何文档的是让脚本计算质数的出现次数,并回显“在您指定的时间间隔内有(空白)质数”。我不知道到哪里去找这类东西。我不想要一个答案,但我希望有人给我指明我需要去的方向。
一如既往的,谢谢。
附言:这确实行得通,我只是想让它“更好”。
发布于 2012-09-19 09:30:15
我不得不指出,只要您输入一个小于11^2 = 121的数字(它会错误地将121标识为质数),您的代码就可以工作。
您编写它的方式是可以的,但是它并没有真正利用Python的更强大的特性。让我们看一下代码:
x=0
y = raw_input("""Up to what number would you like to locate primes?: """)
for i in range(int(y)):
x = x + 1
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
elif x==2 or x==3 or x==5 or x==7:
print x, '--> PRIME'
elif x==1:
print x
else:
print x
在Python中,for i in range(int(y))
会将i
设置为0,1,2,...,y-1。因此,您不需要单独的x
变量来跟踪值:
y = raw_input("""Up to what number would you like to locate primes?: """)
for x in range(int(y)):
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
在Python语言中,您可以使用in
针对多个选项快速测试相等性(测试容器成员资格的特殊情况),因此可以将x==2 or x==3 or x==5 or x==7
重写为x in (2, 3, 5, 7)
。
现在,如果您想计算质数的数量,让我们添加一个计数器:
num_primes = 0
y = raw_input("""Up to what number would you like to locate primes?: """)
for x in range(int(y)):
if x == 1:
# 1 actually passes the modulo tests and would be considered prime in the original code
print x
elif (x%2 and x%3 and x%5 and x%7) or x in (2, 3, 5, 7):
num_primes += 1 # this increments num_primes by 1
print x, '--> PRIME'
else:
print x
最后用一条漂亮的格式化消息将其打印出来:
print 'There are {} primes between 0 and {}'.format(num_primes, y)
答-达!
发布于 2012-09-19 08:47:33
人们判断一个整数是否是质数的一般方法是遍历从1到n
的每个整数(其中n
是所讨论的整数),并计算因子(记住,如果是n % i == 0
,i
就是n
的一个因子)。当然,他们然后测试这个计数是否等于2;如果是,n
是质数-如果不是,n
不是质数。类似这样的代码(在伪代码中):
设置计数=0
对于从1到n的每个i{ if (n%i为0),则递增"count"}
如果("count“是2),那么"n”是质数
显然,还有更好的方法,但对于刚刚学习的人来说,这应该就足够了。在您的例子中,您希望将此过程应用于整个范围内的每个数字,计算您遇到的质数,并打印结果。
注意:确保代码正确缩进,就像上面提到的注释之一(这对于Python来说是必须的)。
发布于 2012-09-19 08:51:45
据我所知,你对你的算法很满意(即使你显然知道它不是真的正确);你只是在问,要添加什么才能让它跟踪你在打印过程中打印的次数'--> PRIME‘,对吧?
描述就是一条线索。您需要一个计数器变量,它从0开始,然后在每次打印'--> PRIME‘时将该计数器加1。然后,您可以在最后打印该计数器:
x=0
y = raw_input("""Up to what number would you like to locate primes?: """)
primes = 0
for i in range(int(y)):
x = x + 1
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
primes += 1
elif x==2 or x==3 or x==5 or x==7:
print x, '--> PRIME'
primes += 1
elif x==1:
print x
else:
print x
print 'There were', primes, 'within your specified interval'
接下来,您可能需要编写一个函数来为您执行检查;然后,如果函数返回True,则递增计数器并打印数字。
然后,您可以将过滤范围(int(Y))的代码更改为一个新的列表,该列表仅包含函数返回true的那些值;一旦有了这些值,您只需计算结果中有多少个元素。
然后你就可以知道如何把它写成列表理解(这在一开始的时候有点棘手,一旦你掌握了它,你的代码就会变得简单得多)。
然后考虑将原始的显式列表构建器转换为生成器函数,和/或将列表理解转换为生成器表达式。这允许您打印出传入的结果(通过迭代生成器),但这意味着您不能再仅仅打印长度来获得总计数,因此您需要一个不同的解决方案。
https://stackoverflow.com/questions/12487053
复制相似问题