鱼C论坛

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

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

  [复制链接]
发表于 2018-8-16 00:06:32 | 显示全部楼层
for i in range(101,201):
    for j in range(2,i//2):
        if i % j == 0:
            break
    else:
        print(i,end =' ')
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

第一个,输入某个数字判断该数字是否为质数:
from math import sqrt
import sys
n=int(input("Please input number:"))
if n ==1:
    print(n,'is definitely not sushu')
    sys.exit(0)
for i in range(2,int(sqrt(n))+1):
        if n%i==0 :
            print(n,'is not sushu')
            sys.exit(0)
print(n,'is sushu')

第二题:输出某个数字内的所有质数:
from math import sqrt
import sys
Temp_list=[]
n=int(input("Please input number:"))
if n ==1:print('Nothing')
for i in range(2,n+1):
    Temp_list.append(i)
print(Temp_list)
for x in range(0, n-1):
    for k in range(2, int(sqrt(Temp_list[x]))+1):   #判断质数的方法,既不能被2和sqrt(某个数)之间任何一个数整除
        if Temp_list[x] % k == 0:
            Temp_list[x]=0                #由于不能随意删减列表中数值,会影响列表数据的遍历,所以先赋值
print(Temp_list)
Prime_list=list(set(Temp_list))         #去除重复值
del Prime_list[0]                       #删去被特定赋的数值
print(Prime_list)                       #打印某数以内的所有质数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-23 18:10:24 | 显示全部楼层
for num in range(101,201):
    isPrimeNumber = 0
    for i in range(2,num):
        if num % i == 0:
            isPrimeNumber = 0
            break
        else:
            isPrimeNumber = 1
    if isPrimeNumber == 1:
        print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请问第六行为啥m要加一啊?
想知道小甲鱼最近在做啥?请访问 -> 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)

献上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:09:47 | 显示全部楼层
for i in range(101,200):
    if i%2==0:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:11:04 | 显示全部楼层
for i in range(101,200):
    if i%2==0:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 16:11:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-29 23:27:19 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

count = 0

for i in range(101,200):
    su = True
    for m in  range(2,int(math.sqrt(i))+1):
        if i % m == 0:
           su = False
           break
    if su == True:
        count += 1
        print(i,end=',')

print('\n一个有{}个素数'.format(count))

另一种思路
import math
list1 = [ x for x in range(101,200)]
list2 = []
count= 0
for n in range(101,200):
    for m in range(2,int(math.sqrt(n)+1)):
        if n % m ==0:
            list2.append(n)
            break
for primenumber in list1:
   if primenumber not in list2:
        print(primenumber,end=',')
        count += 1
print('\n素数的数量是:',count)
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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


#一句话程序,巧用all()做遍历判断
print ([i for i in range(101,200)if all(i%j for j in range(2,int(i**0.5)+1))])
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你好,看了你的答案定义的函数,并且运行了一下~有两个问题
一个是输出的答案中“1”不是素数,但也被输出了
另一个是“2”是素数,但没有被输出~可以再改进的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 00:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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