iFangyi 发表于 2015-12-3 17:10:49

第一个Python小程序_自动化学习笔记

本帖最后由 iFangyi 于 2015-12-3 17:14 编辑

最近在学习Python,想捣鼓点东西出来,顺便写点学习笔记,督促一下自己。
Python目前有2.7和3.4两个版本,有一定差别,一些2.7的程序可能在3.4上运行不起来,但是由于2.7目前还是主流,所以也就先从2.7入手学习。
Python的安装可以参考如下网址:Python安装

就从一道习题开始吧,以下代码请注意Python应有的缩进。:)
现有一个公司的部门结构如下,请使用Python列出列表里所有的元素:
Org=['SW','MED','HWD',['VAL',['VPM','VQ','Auto',['APP',['WAD','LS']]]]]

如何理出列表里的元素呢?
方法:直接打印
print(Org)
>>>
['SW', 'MED', 'HWD', ['VAL', ['VPM', 'VQ', 'Auto', ['APP', ['WAD', 'LS']]]]]
但是这样看起来有个问题,列出的元素里还有列表,如何去掉这些列表?
方法一:多次打印
print(Org)
print(Org)
print(Org)
print(Org)
>>>
SW
MED
HWD
['VAL', ['VPM', 'VQ', 'Auto', ['APP', ['WAD', 'LS']]]]

方法二:试试For循环
for each_item in Org:
    print(each_item)
>>>
SW
MED
HWD
['VAL', ['VPM', 'VQ', 'Auto', ['APP', ['WAD', 'LS']]]]

依然有列表,怎么办?多次循环?好吧,试一下:
for each_item in Org:
    if isinstance(each_item, list):
      for each_item1 in each_item:
            if isinstance(each_item1, list):
                for each_item2 in each_item1:
                  if isinstance(each_item2, list):
                        for each_item3 in each_item2:
                            if isinstance(each_item3, list):
                              for each_item4 in each_item3:
                                    print(each_item4)
                            else:
                              print(each_item3)
                  else:
                        print(each_item2)
            else:
                print(each_item1)
    else:
      print(each_item)
>>>
SW
MED
HWD
VAL
VPM
VQ
Auto
APP
WAD
LS
恩,不错,每个包含在多层嵌套里的元素都被打印出来了,可是代价太大了,足足用了18行代码,要知道Java那么多代码但只有其中的9行代码价值180亿美金,并不是代码越多越好,而且现在的嵌套只有4层,那如何对付5层6层甚至更多曾嵌套呢,难道也是用for循环一层一层写下去么?
我们观察到,在这几层循环中有一些代码是重复的,比如下面:
for each_item3 in each_item2:
                            if isinstance(each_item3, list):
                              for each_item4 in each_item3:
                                    print(each_item4)
                            else:
                              print(each_item3)
是否可以把这些重复的语句想办法合并一下,要知道计算机可是最喜欢干也最擅长干重复的事情了,那么下面就把重复的代码定义为一个模块,起个名字叫做print_list:
def print_list(your_list):
    for each_item in your_list:
      if isinstance(each_item, list):
         print_list(each_item) #这里是问题关键,这个模块引用了自己作为模块的一部分!
      else:
            print(each_item)
Look,print_list这个模块已经写好,他有一个参数“your_list”,其实这个模块就是一个函数,函数的名称是print_list,他有一个参数“your_list”。那么我们来运行一下这个函数:
>>>
SW
MED
HWD
VAL
VPM
VQ
Auto
APP
WAD
LS
没错,你成功了,只要6行代码!

事实上,上面的解决办法运用了递归函数,使得原本复杂的代码变得极为简洁。:lol

iFangyi 发表于 2015-12-3 20:03:25

:D:lol

radxiaohe 发表于 2015-12-7 22:45:32

:lol:lol顶一个
页: [1]
查看完整版本: 第一个Python小程序_自动化学习笔记