首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自学python

自学python
EN

Stack Overflow用户
提问于 2012-09-19 08:41:18
回答 3查看 133关注 0票数 0
代码语言:javascript
运行
复制
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上。我今晚早些时候写了这个小脚本,它只是打印出一个用户指定范围内的整数列表,并确定其中哪些是质数。我想做的但似乎找不到任何文档的是让脚本计算质数的出现次数,并回显“在您指定的时间间隔内有(空白)质数”。我不知道到哪里去找这类东西。我不想要一个答案,但我希望有人给我指明我需要去的方向。

一如既往的,谢谢。

附言:这确实行得通,我只是想让它“更好”。

EN

回答 3

Stack Overflow用户

发布于 2012-09-19 09:30:15

我不得不指出,只要您输入一个小于11^2 = 121的数字(它会错误地将121标识为质数),您的代码就可以工作。

您编写它的方式是可以的,但是它并没有真正利用Python的更强大的特性。让我们看一下代码:

代码语言:javascript
运行
复制
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变量来跟踪值:

代码语言:javascript
运行
复制
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)

现在,如果您想计算质数的数量,让我们添加一个计数器:

代码语言:javascript
运行
复制
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

最后用一条漂亮的格式化消息将其打印出来:

代码语言:javascript
运行
复制
print 'There are {} primes between 0 and {}'.format(num_primes, y)

答-达!

票数 1
EN

Stack Overflow用户

发布于 2012-09-19 08:47:33

人们判断一个整数是否是质数的一般方法是遍历从1到n的每个整数(其中n是所讨论的整数),并计算因子(记住,如果是n % i == 0i就是n的一个因子)。当然,他们然后测试这个计数是否等于2;如果是,n是质数-如果不是,n不是质数。类似这样的代码(在伪代码中):

设置计数=0

对于从1到n的每个i{ if (n%i为0),则递增"count"}

如果("count“是2),那么"n”是质数

显然,还有更好的方法,但对于刚刚学习的人来说,这应该就足够了。在您的例子中,您希望将此过程应用于整个范围内的每个数字,计算您遇到的质数,并打印结果。

注意:确保代码正确缩进,就像上面提到的注释之一(这对于Python来说是必须的)。

票数 0
EN

Stack Overflow用户

发布于 2012-09-19 08:51:45

据我所知,你对你的算法很满意(即使你显然知道它不是真的正确);你只是在问,要添加什么才能让它跟踪你在打印过程中打印的次数'--> PRIME‘,对吧?

描述就是一条线索。您需要一个计数器变量,它从0开始,然后在每次打印'--> PRIME‘时将该计数器加1。然后,您可以在最后打印该计数器:

代码语言:javascript
运行
复制
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的那些值;一旦有了这些值,您只需计算结果中有多少个元素。

然后你就可以知道如何把它写成列表理解(这在一开始的时候有点棘手,一旦你掌握了它,你的代码就会变得简单得多)。

然后考虑将原始的显式列表构建器转换为生成器函数,和/或将列表理解转换为生成器表达式。这允许您打印出传入的结果(通过迭代生成器),但这意味着您不能再仅仅打印长度来获得总计数,因此您需要一个不同的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12487053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档