关于算法:
打印搞定,基本上算法就差不多了;
打印看似简单,其实真不简单
反思问题:
卡在哪里了?
- 在有思路的基础上,有没有改进的方案?不要放弃(有难度就绕道了),
- 发散思维,不要僵化思维:
- 记录自己的好点子
函数的封装(怎么去封装?)
- 函数写的就是核心算法;
- 面试的时候最好封装成函数的形式;

打印练习习题:
1.编写一个至少接受2个参数的函数,返回最大值和最小值;
2.左右两种打印方式;要求数字必须对齐;
1.要求:编写一个至少接受2个参数的函数,返回最大值和最小值;
考虑的东西:
1.元素个数
2.元素类型
方法 : 元素个数判断
1.max min
2.排序方法 : 费时间,效率低下;
def double_values(*args):
return(min(args),max(args)) #封装成元祖
# 写法的差别:
print(double_values(*range(10))) # 差别: 一个元祖
print(*double_values(*range(10))) # 解开,两个值;
-------------------------------------------------------------
(0, 9)
0 9
作业提交:
def maxmin(*args):
if len(args)<2:
print('输入的元素少于两个,请重新输入!')
else:
return(min(args),max(args))
2.编写一个函数,接受一个参数n,n为正整数,左右两种打印方式,要求数字必须对齐
陷阱题目:
看起来是一个有限问题,要你去算每一行;实际是一个无限问题
n的问题:要看你对算法有没有了解;
最好的策略:空间换时间;
思路一:
一行行打印,前面追加空格,每一个空格的宽度等于数字字符串的宽度;
def triangle_print(n):
for i in range(1,n+1):
for j in range(n,0,-1):
if i<j:
print((' ')*len(str(j)),end=' ')
else:
pass
print(j,end = ' ')
print()
----------------------------------------------------------------------------------
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
思路二:右对齐方式,右对齐,最大的问题不知道最后一行多宽?
def triangle_print(n):
tail=" ".join([str(i) for i in range(n,0,-1)])
width=len(tail)
for i in range(1,n):
print("{:>{}}".format(" ".join([str(j) for j in range(i,0,-1)]),width))
print(tail)
triangle_print(12)
-------------------------------------------------------------
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
思路三:
总结:
1. if 判断的速度非常快;

网友评论