Python学习日志
RBHGO的主页欢迎关注
温馨提示:创作不易,如有转载,注明出处,感谢配合~
目录
第3.5课:Python分支结构和循环结构的应用
这一篇主要是想给大家整合一些分支结构和循环结构的经典例题,所以并不算是单独成的一篇文章,以后要是想穿插列出一些知识点,也会用**.5**的方式。主要是现在的我们基础还比较薄弱,那么大量的练习就是提升的最简单方法。希望大家先看题目然后自己先凭借自己来做这些练习,然后再看看我的,如果我的有问题也请及时联系我修改。
例子1:输出斐波那契数列
说明:斐波那契数列(兔子数列、黄金分割数列),斐波那契数列除了前两位都是1 外,从第三个数2 开始每前两个数之和就是第三个数。列出来大概就是1、1、2、3、5、8、13、21、34······
“输入一个N,输出n个斐波那契数列‘’这个题目的关键是我们的明确前一个甚至两个数并不在循环之中,所以我们得给他们单独赋值,这样这个程序才能顺利得开始。
num = int(input('请输入一个正整数n = '))
total = 0
x = 1
y = 1
print(x, y, sep='\n')
for _ in range(2, num):
total = x + y
print(total)
x = y
y = total
sep 就是为了让输出的每一个结果都换行。通过这个程序,我们就能顺利的拿到1-n的任意一个斐波那契数列,当然不建议把n弄得太大,后面得斐波那契数很大。
例子2:寻找水仙花数
说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:13 + 53 + 33 = 153。
‘’找出100-999之间的水仙花数‘’这个题目的关键是将一个三位数拆分为个位、十位、百位,这一点利用Python中的// (整除)和% (求模)运算符其实很容易做到,代码如下所示。
for num in range(100, 1000):
x1 = num // 100
x2 = (num // 10) % 10
x3 = num % 10
if num == x1 ** 3 + x2 ** 3 + x3 ** 3:
print(f'100-999中的水仙花数是{num}')
例子3:单位转换
”英制单位英寸与公制单位厘米互换“这个题比较简单,是单独对分支结构的应用。只要了解单位之间的倍数关系,写出来应该不难。以英寸和厘米做一个例子,给到其他的单位转化是都是大同小异。
length = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸' or unit == 'inch':
print('%.2f英寸 = %.2f厘米' % (length, length * 2.54))
elif unit == 'cm' or unit == '厘米' or unit == 'centimeter':
print('%.2f厘米 = %.2f英寸' % (length, length / 2.54))
else:
print('请输入有效的单位')
例子4:找出完美数
说明:完美数是满足除自身外所有因子的和等于这个数这个条件的数。例如6 = 1 + 2 + 3、 28 = 1 + 2 + 4 + 7 + 14都是完美数
”找出1-10000之间的完美数“这个题目其实并不难,但是明显能看到代码运行到第四个前明显的有延迟,计算机在这里进行的运算量很大,如果把范围再扩大,这个程序明显不够好,我们应该如何改善这个问题呢?
for num in range(1, 10001):
n = 0
for i in range(1, num - 1):
if num % i == 0:
n += i
if n == num:
print(num)
我们试想一下,一个数比如3600,60是他的因子,那么30也是,15也是,所以我们判断是否是例子数的因子,只需要判断出小的,然后直接加上其他的,省略多余的判断过程,是不是程序的运行速度就大大增加了。实现同样效果的程序,下面的程序不到一秒就输出了1-10000里的完美数。
温馨提示:为了避免同一个因子加两次的情况出现,例如36开方是6,同时36除以6也能除的尽,所以要多设置一个分支结构。
for num in range(2, 10001):
n = 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
n += i
if i != num // i:
n += num // i
if n == num:
print(num)
例子5:三角形只知三边求面积周长
"输入一个三角形三条边的长度,如果能构成三角形就计算周长和面积"这个题目,也是一个比较简单的题。关键就在与知不知道海伦公式:三角形知三条边求面积公式,还有就是是否习惯用while 和bool 值来做循环。
while True:
sl1 = float(input('请输入三角形的边:'))
sl2 = float(input('请输入三角形的边:'))
sl3 = float(input('请输入三角形的边:'))
p = (sl1 + sl2 + sl3) / 2
if sl1 + sl2 > sl3 and sl1 + sl3 > sl2 and sl2 + sl3 > sl1:
print(f'三角形的周长:{sl1 + sl2 + sl3}')
print(f'三角形的面积:{(p * (p - sl1) * (p - sl2) * (p - sl3)) ** (1 / 2)}')
break
else:
print('不能构成三角形,请您重新输入')
例子6:判断(寻找)质数
说明:质数指的是只能被1和自身整除的正整数(不包括1)。
x = int(input('请输入一个正整数: '))
if x > 1:
for i in range(2, x):
if (x % i) == 0:
print(f'{x}不是质数')
break
else:
print(f'{x}是质数')
break
else:
print(f'{x}不是质数')
这个题还有另一种做法
x = int(input('请输入一个正整数: '))
is_prime = True
for i in range(2, x):
if (x % i) == 0:
print(f'{x}不是质数')
break
if x > 1 and is_prime:
print(f'{x}是质数')
else:
print(f'{x}不是质数')
总结
还是那句话:分支结构和循环结构非常重要,是构造程序逻辑的基础,一定要通过大量的练习来达到融会贯通。刚才讲到这些例子都非常经典,如果你能很顺利的完成这些代码,那么分支和循环结构的知识你就已经掌握了。
感谢学习陪伴,您的点赞,评论就是我更新的动力
|