Python全栈工程师

14-4 函数习题打印三角

2019-07-23  本文已影响5人  BeautifulSoulpy

关于算法
打印搞定,基本上算法就差不多了;
打印看似简单,其实真不简单

反思问题:
卡在哪里了?

  1. 在有思路的基础上,有没有改进的方案?不要放弃(有难度就绕道了),
  2. 发散思维,不要僵化思维:
  3. 记录自己的好点子

函数的封装(怎么去封装?)

  1. 函数写的就是核心算法;
  2. 面试的时候最好封装成函数的形式;

打印练习习题:
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 判断的速度非常快;

下三角
上一篇下一篇

猜你喜欢

热点阅读