你好,欢迎查看我的第一个笔记。本人是某不知名大学数学系大一新生,由于对计算机感兴趣,所以跟着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=" ")
关于这段代码,我们可以提出以下问题:
- 为什么"flag=True"这步要放第一层循环里面?
- 为什么要用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的遍历