python基础训练 day3
小白打卡第三天。
- 第一题
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
看到题目,首先反映是排序算法,其次想到了python中的sorted()函数。
list_0 = []
for i in ['x', 'y', 'z']:
you_input = int(input(f'请输入{i}'))
list_0.append(you_input)
print(sorted(list_0))
啪的一下,很快啊!
# 运行结果
请输入x5
请输入y4
请输入z9
[4, 5, 9]
直接上sorted()是不是有点草率了。。。起不到训练效果,然后就多想了一点。定义一个新列表,在用min()函数选取list_0中的最小值,建立索引然后把老列表中最小的值去掉,在新列表中加进去。
list_0 = []
for i in ['x', 'y', 'z']:
you_input = int(input(f'请输入{i}'))
list_0.append(you_input)
print(list_0)
list_1 = []
for i in ['x', 'y', 'z']:
i = min(list_0)
list_0.pop(list_0.index(i))
list_1.append(i)
print(list_1)
之前好像看到过排序算法的总结,查了一下,好家伙一共有10种排序算法。
一并附上:
(1)冒泡排序;(2)选择排序;(3)插入排序;(4)希尔排序;(5)归并排序;
(6)快速排序;(7)基数排序;(8)堆排序;(9)计数排序;(10)桶排序。
# 运行结果
请输入x5
请输入y4
请输入z9
[5, 4, 9]
[4, 5, 9]
- 第二题
# 斐波那契数列。
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34。
在学习的时候练习过,递归基操:
def feibo(n):
if n == 1:
return 1
if n == 2:
return 1
return feibo(n-1) + feibo(n-2)
print(feibo(8))
运行结果
21
但是递归它效率太低,空间复杂度(好像是这个词来着…)太高,所以可以用另一种方法
def feibo(n):
x1 = 1
x2 = 1
i = 2
while True:
if n == 1:
return x1
if n == 2:
return x2
x1, x2 = x2, x1+x2
if i == n:
return x1
i += 1
print(feibo(8))
运行结果
21
完成第三日打卡!
世上无难事,只要肯攀登