鱼C论坛

 找回密码
 立即注册
楼主: 新手·ing

[技术交流] Python:每日一题 8

  [复制链接]
发表于 2018-8-16 00:06:32 | 显示全部楼层
  1. for i in range(101,201):
  2.     for j in range(2,i//2):
  3.         if i % j == 0:
  4.             break
  5.     else:
  6.         print(i,end =' ')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 23:34:43 | 显示全部楼层
import math as m
n = 0
L = []
for i in range(101,201):
    for a in range(2,int(m.sqrt(i)) + 1):
        if i % a != 0:
            s = 0
        else:
            s = -1
            break
    if s == 0:
        n += 1
        L.append(i)
print('共有%d个素数'%n)
print L
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 21:58:08 | 显示全部楼层
好累,做的题不符合题目,但是训练的目的也是达到了,数学不好,编程好累。。。。。。

第一个,输入某个数字判断该数字是否为质数:
  1. from math import sqrt
  2. import sys
  3. n=int(input("Please input number:"))
  4. if n ==1:
  5.     print(n,'is definitely not sushu')
  6.     sys.exit(0)
  7. for i in range(2,int(sqrt(n))+1):
  8.         if n%i==0 :
  9.             print(n,'is not sushu')
  10.             sys.exit(0)
  11. print(n,'is sushu')
复制代码


第二题:输出某个数字内的所有质数:
  1. from math import sqrt
  2. import sys
  3. Temp_list=[]
  4. n=int(input("Please input number:"))
  5. if n ==1:print('Nothing')
  6. for i in range(2,n+1):
  7.     Temp_list.append(i)
  8. print(Temp_list)
  9. for x in range(0, n-1):
  10.     for k in range(2, int(sqrt(Temp_list[x]))+1):   #判断质数的方法,既不能被2和sqrt(某个数)之间任何一个数整除
  11.         if Temp_list[x] % k == 0:
  12.             Temp_list[x]=0                #由于不能随意删减列表中数值,会影响列表数据的遍历,所以先赋值
  13. print(Temp_list)
  14. Prime_list=list(set(Temp_list))         #去除重复值
  15. del Prime_list[0]                       #删去被特定赋的数值
  16. print(Prime_list)                       #打印某数以内的所有质数
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-23 18:10:24 | 显示全部楼层
  1. for num in range(101,201):
  2.     isPrimeNumber = 0
  3.     for i in range(2,num):
  4.         if num % i == 0:
  5.             isPrimeNumber = 0
  6.             break
  7.         else:
  8.             isPrimeNumber = 1
  9.     if isPrimeNumber == 1:
  10.         print(num)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 09:58:54 | 显示全部楼层
新手·ing 发表于 2017-3-27 19:48
等待被大佬们指点!!!

请问第六行为啥m要加一啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:04:37 | 显示全部楼层
#题目 八   判断101-200之间有多少个素数,并输出所有素数。
import math
n = 0
l = []
for i in range(101, 200):
    for j in range(2, int(math.sqrt(i))+1):
        if i%j == 0 :
            break
        if j >= int(math.sqrt(i)):
            n = n + 1
            l.append(i)
print(l, )
print('素数有:%d'%n)

献上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:09:47 | 显示全部楼层
for i in range(101,200):
    if i%2==0:
        print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:11:04 | 显示全部楼层
for i in range(101,200):
    if i%2==0:
        print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:11:55 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-29 23:26:40 | 显示全部楼层
from math import sqrt
for i in range(101,200,2):
    for j in range(2,i):
        if i%j==0:
            break
        else:
            if j > sqrt(i):
                print(i,end=" ")
                break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-29 23:27:19 | 显示全部楼层
  1. from math import sqrt
  2. for i in range(101,200,2):
  3.     for j in range(2,i):
  4.         if i%j==0:
  5.             break
  6.         else:
  7.             if j > sqrt(i):
  8.                 print(i,end=" ")
  9.                 break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-13 17:13:56 | 显示全部楼层
list1=[ever for ever in range(101,201)]
for i in range(101,201):
    for m in range(2,i):
        num = i % m

        if num == 0:
            list1.remove(i)
            break
print (list1)
print (len(list1))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-19 19:33:52 | 显示全部楼层
import math
list1=[]
list2=[]
count=0
for i in range(101,201):
    for j in range(2,int(math.sqrt(i))+1):
        if i%j==0:
             list1.append(i)
for m in range(101,201):
    list2.append(m)
for a in list2:
    if a not in list1:    #取出不是能整除列表中的元素
         count+=1
         print(a,end="--")
print('总计{}个素数'.format(count))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-21 22:12:30 | 显示全部楼层
  1. import math

  2. count = 0

  3. for i in range(101,200):
  4.     su = True
  5.     for m in  range(2,int(math.sqrt(i))+1):
  6.         if i % m == 0:
  7.            su = False
  8.            break
  9.     if su == True:
  10.         count += 1
  11.         print(i,end=',')

  12. print('\n一个有{}个素数'.format(count))
复制代码


另一种思路
  1. import math
  2. list1 = [ x for x in range(101,200)]
  3. list2 = []
  4. count= 0
  5. for n in range(101,200):
  6.     for m in range(2,int(math.sqrt(n)+1)):
  7.         if n % m ==0:
  8.             list2.append(n)
  9.             break
  10. for primenumber in list1:
  11.    if primenumber not in list2:
  12.         print(primenumber,end=',')
  13.         count += 1
  14. print('\n素数的数量是:',count)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 15:59:03 | 显示全部楼层
本帖最后由 liujian973 于 2018-11-15 16:39 编辑

def fun_factor(start,stop=None):
        '''当只使用一个参数时为从2到该数字间的因素
当使用两个参数时,为第一个参数到第二参数的因素'''
        def if_factor(number):
                import math
                sqrt = int(math.sqrt(number))
                for i in range(3,sqrt+1,2):
                        if number % i ==0:return False
                return True
        for i in range([start,3][stop ==None],[stop,start][stop==None]+1,2):
                if if_factor(i):print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-3 21:59:33 | 显示全部楼层
def num(n):
    for i in range(2,int(n**0.5)+1):
        if n % i == 0:
            break
    else:
        print('%d 是素数'%n )

for i in range(101,200):
    num(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-6 14:57:25 | 显示全部楼层
def su(x):
        for i in range(2,x):
                if x%i==0:
                        return 'false'
                else:
                        return 'true'


for i in range(101,201):
        if su(i):
            print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-21 15:35:00 | 显示全部楼层
本帖最后由 sunrise085 于 2018-12-21 15:36 编辑

写了三个版本,初始版本,比较原始。
第二个版本,学习着使用for循环的else分支,减少了flag的设置。while循环也有else分支
第三个版本,巧用all()做遍历判断。
  1. #初始版本,
  2. for i in range(101,200):
  3.         flag=True
  4.         for j in range(2,int(i**0.5)+1):
  5.                 if i%j == 0:
  6.                         flag=False
  7.                         break
  8.         if flag:
  9.                 print(i)

  10. #使用for循环的else分支,减少标志位的设置
  11. for i in range(101,200):
  12.         for j in range(2,int(i**0.5)+1):
  13.                 if i%j == 0:
  14.                         break
  15.         else:
  16.                 print(i)


  17. #一句话程序,巧用all()做遍历判断
  18. print ([i for i in range(101,200)if all(i%j for j in range(2,int(i**0.5)+1))])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-21 18:32:02 | 显示全部楼层
for i in range(101,201):
        for j in range(2,i//2):
                if(i%j==0):
                        break
        if(j==(i//2-1)):
                print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-3 19:26:47 | 显示全部楼层

你好,看了你的答案定义的函数,并且运行了一下~有两个问题
一个是输出的答案中“1”不是素数,但也被输出了
另一个是“2”是素数,但没有被输出~可以再改进的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 07:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表