本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
Python专栏 传送门
提示:本文的环境配置是Python3的开发环境。目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
本节主要内容:上一期写了六个案例,这期再续六个案例巩固一下。同样都是学习其它语言见过的典型题
什么是素数?除了1和它本身能被其它数整除。1不属于素数,所以咱们就从2开始遍历
num=int(input("请输入一个数"))
if (num == 1):
print ("不是素数")
else:
for j in range(2,k):
if num%j == 0:
print ("不是素数")
break
else:
print ("是素数")
优化一下第五行,如果把这个数开根号,num=a2,如果比a小的数都没被整除那他就是素数,就不需要考虑比a大的数了
num=int(input("请输入一个数"))
if (num == 1):
print ("不是素数")
else:
k=int(math.sqrt(num)+1) #因为这里用了强转,根号会取下界,所以加1
for j in range(2,k):
if num%j == 0:
print ("不是素数")
break
else:
print ("是素数")
'''
请输入一个数20
不是素数
'''
找最大公约数有很多算法
穷举法:num1>num2。从num2开始遍历,与num1和num2做除法每次-1,直到num1和num2都可以整除
更相减损法:
任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止
则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数
辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,如此反复,直到最后余数是0为止
辗转相除法程序运行时间最短,所以这里就以辗转相除法为例子,另外两种也很容易实现
num1=int(input("请输入第一个数"))
num2=int(input("请输入第二个数"))
#判断大小
if num2>num1:
num1=num2
num2=num1
if num1%num2==0:
num3 = num2
print ("%d和%d的最大公约数是%d"%(num1, num2,num3))
else:
while num1%num2 != 0:
num3 = num1%num2
num1 = num2
num2 = num3
print ("%d和%d的最大公约数是%d"%(num1, num2, num3))
计算出Π的近似值︰ Π 4 \frac{Π}{4} 4Π≈1-1/3+1/5-1/7+1/9-…(计算到最后一项的值小于10-6为止)
num=1
i=1
sum=0
while True:
if 1/num>0.0000001:
sum = sum + (1/num)*i
num = num + 2
i = i*-1
else:
break
print ("Π/4=", sum)
'''
Π/4= 0.7853981133974449
'''
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
首先看下乘法表,有什么规律?公式
j*i
,利用公式反推原理,公式中的j就可以代表列数,公式里的i可以代表行数。所以用两个for嵌套一下
for i in range(1,10):
for j in range(1,i+1):
print(j,"*",i,"=",j*i,end="\t")
print()
水仙花数为一个三位数,并且每一位上的数字的立方和等于该数。求所有三位数的水仙花数
for i in range(100,1000):
a = i//100%10 # 计算百位数字
b = i//10%10 # 计算十位数字
c = i%10 # 计算个位数字
if a*a*a+b*b*b+c*c*c==i:
print(i,end=" ")
找出100以内的完全数(比如6=1+2+3,6就是一个完全数,一个数刚好等于它的因子和)
for i in range(1,101):
sum=0
for j in range(1,i):
if i%j==0:
sum=sum+j
if sum==i:
print(i,end=" ")
这六个题,没什么太难的地方,主要就是考虑逻辑,学过其它语言的伙伴应该也见过这些例题,初学的小伙伴看不懂第一个题的优化也没关系,第二个题辗转相除看不懂也没关系!可以用穷举法很好理解,总而言之多敲多练!