51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2446|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-12-3 17:10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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[0])
print(Org[1])
print(Org[2])
print(Org[3])
>>>
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行代码!

事实上,上面的解决办法运用了递归函数,使得原本复杂的代码变得极为简洁。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-23 02:32 , Processed in 0.069428 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表