python简单项目实现第1弹(判断质数/排序/求区间所有质数)

你好,欢迎查看我的第一个笔记。本人是某不知名大学数学系大一新生,由于对计算机感兴趣,所以跟着B站上老师学习python语言。每道题目我都尽我所能地讲清楚,如果有什么看不懂的地方欢迎在评论区留言,大家一起学习共同进步。

项目1:判断输入的数是否为质数

思路1:

遍历(2,x)之间的数,判断它是否为整数

代码解释:

x=int(input("input your num"))

for i in range(2,x):#为什么用(2,x)?
        if float(x/i).is_integer():
         print(f"because of {i},not zhi num")#如果程序执行完毕没有出现,表明是质数
         break
  • 其中第3行用(2,x)的原因:质数定义为除去1与其自身外没有其他因数的数。为了除去1,我们从2开始,又因为range左闭右开的特性,右界写x(取不到x)
  • var.).is_integer()是float类型的内置函数,如果var的小数部分为0返回Ture,否则False

思路2:

遍历(2,x)之间的数,判断是否整除

代码:
x=int(input("input your num"))
flag=False
for i in range(2,x):
        if x%i==0:
         flag=True
         num=i
         break
if flag:
        print(f"{x}是合数,因为{num}")
else:
        print(f"{x}是质数")

项目2:输入3个数,按从小到大输出

思路1: 

冒泡排序

代码:
a=int(input("输入a"))
b=int(input("输入b"))
c=int(input("输入c"))
list=[a,b,c]
n=len(list)
for x in range(n-1):
    for y in range(n-x-1):
        if list[y]>list[y+1]:
            list[y],list[y+1]=list[y+1],list[y]
print(list)
解读:

先贴一张冒泡排序原理流程图,然后我再对图进行介绍:

目的:对列表n[9,2,8,7,6]进行升幂排序

操作:我们依次把相邻的两个数做升幂排序,每做一次都会把相邻两个数较大者放后面位置,每做一轮都会把最大的值放列表末尾。重复此操作最终达到将整体升幂排列的效果

思路2:

直接调用sort方法

代码:
a=int(input("a="))
b=int(input("b="))
c=int(input("c="))
list=[a,b,c]
list.sort()
print(list)

项目3:输入一个区间,求区间中所有质数

代码:
a=int(input("a="))
b=int(input("b="))
for i in range(a,b+1):#遍历【a,b】间所有数
    flag = True  # 默认是质数
    for j in range(2,i):
        if i%j==0:
         flag=False
         break
    if flag:
        print(i,end=" ")

关于这段代码,我们可以提出以下问题:

  1. 为什么"flag=True"这步要放第一层循环里面?
  2. 为什么要用break?

下面对这几个问题进行探索:

1.我们第一层循环遍历的i所代表的是闭区间[a,b]中的所有数,flag是对所有[a,b]的数初始化为True,表示默认所有数为质数(一旦条件被破坏:i%j==0,赋flag为False)。既然要对每一个数初始化,当然就应该放在第一个循环内部。

2.先谈谈break和continue的区别,如下图

注意:语句块3与语句块2,if判断,三者同级

break:完全跳出最近的那个循环,开始外层循环迭代

continue:部分跳出最近的循环,开始下一次最近循环迭代

接下来说说为什么用break,因为一旦出现flag=False,表明i已经不是质数了(内层循环是用来验证i是质数这个命题的)既然i已经判断为非质数了,就不用再往后验证了,直接返回i的遍历

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值