Python随堂笔记 结构案例练习(二)

2022.4.1 作业

文章目录

    • 前言
    • 判断一个数是否是素数并输出
    • 输入两个正整数,找出最大公约数并输出
    • 计算Π/4
    • 打印九九乘法表
    • 水仙花数
    • 完全数
    • 小结

前言

本文章是 【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都可以整除

更相减损法:

  1. 任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步

  2. 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止

则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数

辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,如此反复,直到最后余数是0为止

辗转相除法程序运行时间最短,所以这里就以辗转相除法为例子,另外两种也很容易实现

Yes
No
num1%num2==0
最大公约数是num2
num3=num1%num2
num1=num2,num2=num3
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

计算出Π的近似值︰ Π 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=" ")

小结

这六个题,没什么太难的地方,主要就是考虑逻辑,学过其它语言的伙伴应该也见过这些例题,初学的小伙伴看不懂第一个题的优化也没关系,第二个题辗转相除看不懂也没关系!可以用穷举法很好理解,总而言之多敲多练!

你可能感兴趣的:(Python语言基础,python,pycharm)