如何在Python中在1-100范围内取消选择以7结尾的质数?
list = []
for i in range(2,100):
primeflag=True
for num in list:
if(i%num==0):
primeflag=False
if(primeflag):
print str(i)
list.append(i)
print list
我应该怎么做才能去掉那些以7结尾的质数?
3 个回答
0
在Python中,你可以使用 str
函数把任何数字转换成字符串。
所以,你可以这样做:-
num = 17
str_num = str(num)
接下来,为了检查最后一位数字是否不等于7,你可以访问字符串的最后一个字符,并把它和 '7'
比较。要访问最后一个字符,可以用 str_num[-1]
。
所以,你需要的条件是:-
if str_num[-1] != '7':
# don't add it to list
另外,你的内层循环似乎有点问题。你在用 i
除以 list
中的每一个数字来检查余数,其实你应该只检查到 i ** 0.5
。此外,你可以利用 for
循环的 else
部分,这样就不需要使用一个 boolean flag
。所以,你修改后的代码应该是这样的:
for i in range(2,100):
for num in range(2, int(i ** 0.5) + 1):
if(i % num == 0):
break
else:
if str(i)[-1] != '7':
my_list.append(i)
而 for
的 else
会在 for
循环执行完毕且没有中断时执行。
虽然这和实际问题没有直接关系,但你可以考虑了解一下 埃拉托斯特尼筛法 算法,它可以用来生成给定范围内的质数。
1
有很多方法可以实现你想做的事情,你需要找到最适合你具体问题的方法。
一种解决思路是:
- 定义一个方法 isprime(n) - 你可以自己想办法实现,或者在网上查找相关的实现,我相信你能找到。
然后:
yourlist = [x for x in xrange(2, 100) if isprime(x) and x % 10 != 7]
这是一个不错的初步方法,当然还有更复杂的选项,比如使用生成器、改进的埃拉托斯特尼筛法等等,但在你实现一个可行的方案后,可以再去探索这些其他选项。
1
把你的数字对10取余,然后检查一下结果是不是7,只有在结果是7的情况下,才把这个数字加到最后的列表里。
if(i % 10 != 7):
print str(i)
list.append(i)