Python黑帽编程2.4 流程控制

Python黑帽编程2.4 流程控制
本节要介绍的是Python编程中和流程控制有关的关键字和相关内容。
2.4.1 if …..else
先上一段代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
x=int(input('请输入一个整数:'))
if x==0:
print '%d ==0' % x
elif x<0:
print '%d <0' % x
else:
print '%d >0' % x
这段代码使用if,elif和else三个关键字,每一个关键字后面跟一个布尔表达式,以冒号结尾。跟在条件判断语句下面的是子语句,就是我们在此条件下要做的事情。
我将上面的代码保存到ifelse.py运行结果如下:

图2
2.4.2 for 语句
Python 中的 for 语句和C中的略有不同。通常的循环可能会由用户来定义迭代步骤和中止条件,Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。例如:
words = ['cat', 'window', 'defenestrate']
for word in words:
print(word,len(word))
运行结果如下:

图3
在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列,可以迭代它的副本。使用切割标识就可以很方便的做到这一点:
words = ['cat', 'window', 'defenestrate']
for word in words[:]:
if len(word)>6:
words.insert(0,word)
print words
上面的代码通过切片操作得到了words的一个拷贝,循环过程中可以修改words列表但是不会对循环造成影响。运行结果如下:

图4
2.4.3 while语句
while和if的区别在于,if如果表达式为true的话会一次执行内部的代码,而while会循环执行,直到表达式为false。例如:
count=0
while(count<9):
print 'the index is:',count
count +=1
运行结果如下:

图5
2.4.5 range和xrange
使用range函数可以很方便的生成一个等差系列。range函数完整的声明如下:
range(start,end,step =1)
下面我们通过一小段代码看看range的使用方法:
a=range(5)
b=range(2,5)
c=range(2,5,2)
print a
print b
for i in c:
print "value is",i
这段代码示例了三种使用方式:
1) 只有一个参数时,传入值为end,起始值为0,步长为1;
2) 传递两个参数时,传入值为start和end,步长为1;
3) 传递三个参数时,传入值为start,end和步长。
xrange和range使用方法一样,区别有以下两点:
1) xrange不生成完整的列表,效率更高;
2) xrange只有在for循环中使用才有意义。
break 语句和 C中的类似,用于跳出最近的一级for或while循环。
循环可以有一个else子句,它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行。
例如下面的代码:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
print(n, 'is a prime number')
上面的代码循环一个包含从2到9的一个系列,内部的循环实际是判断该数是不是素数。if语句如果为true的话证明找到了除2和本身以外的分解因子,证明这个数不是素数,接着会执行break,此时会跳出当前循环,因为有了break语句,和当前for循环对应的else语句也不会执行。在相反的情况下,如果是素数,当前循环会执行完毕,else子句会执行。结果如下:

图6
continue 语句是从 C 中借鉴来的,它表示循环继续执行下一次迭代,如下所示:
for num in range(2,10):
if(num %2 ==0):
continue
print num
这是一段输出奇数的代码,结果如下:

图7
pass 语句什么也不做,相当于汇编的nop指令。它用于那些语法上必须要有什么语句,但程序什么也不做的场合。通常我们使用pass语句来进行占位,比如规划程序功能和结构的时候,我们想好要定义哪些类,哪些方法,但是还没有具体实现的时候。比如:
def funcname(parameter_list):
pass
class classname(object):
pass
if a==0:
pass
else:
pass
2.4.7 小结
流程控制的内容,就到此为止,下一节介绍函数。
第2.5节《函数》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单“网络安全”—>”Python黑帽编程”进入即可。
本节视频教程获取方法,请扫描二维码,在菜单“网络安全”——>”Python黑帽编程”中找到对应的本文2.2.7节,有详细方法。
由于教程仍在创作过程中,在整套教程完结前,感兴趣的同学请关注我的微信订阅号(xuanhun521,下方二维码),我会第一时间在订阅号推送图文教程和视频教程。问题讨论请加qq群:Hacking (1群):303242737 Hacking (2群):147098303。

关注之后,回复请回复“Python”,获取更多内容。
Python黑帽编程2.4 流程控制的更多相关文章
- Python 黑帽编程大纲(变化中)
Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...
- Python黑帽编程2.3 字符串、列表、元组、字典和集合
Python黑帽编程2.3 字符串.列表.元组.字典和集合 本节要介绍的是Python里面常用的几种数据结构.通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储.查询 ...
- Python黑帽编程2.8 套接字编程
Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- Python黑帽编程 3.4 跨越VLAN
Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...
- Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016
Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
随机推荐
- 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】
一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...
- [Idea] 在idea中使用jetty debug
1.添加jetty的maven插件 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId> ...
- POJ 2991–Crane【线段树+几何】
题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...
- 多个jar包合并成一个jar包的办法
步骤: 1.将多个JAR包使用压缩软件打开,并将全包名的类拷贝到一个临时目录地下. 2.cmd命令到该临时目录下,此时会有很多.class文件,其中需要带完整包路径 3.执行 jar -cvfM te ...
- 如何在Meteor中使用npm模块?
首先,请在AtmosphereJs上搜索有无相关的封装包.尽量采用已有的封装包,而不是自己封装. 有两种方法在项目中使用来自npm的模块. 封装为Meteor包并在项目中添加包.使用meteor cr ...
- 展开easyui 树节点到某个点
$(function () { $('#tt').tree({ url: '/IS/Department/JsonTree?companyID=@(Request.QueryString[" ...
- 压力测试相关之ab命令
1. 短时压力测试工具 ab 命令(apache的工具) 关键指标: Requests per second: 98.52 [#/sec] (mean) ###平均每秒的请求数 Tim ...
- ContactsUtil 工具类 - 转载
import java.util.HashMap; import java.util.Map; //http://www.open-open.com/code/view/1432300986802 / ...
- linux系统CentOS7
linux系统CentOS7 到http://mirrors.sohu.com/mysql/下载想要的mysql版本 这里用到的是 mysql-5.6.33-linux-glibc2.5-x86_64 ...
- 【BZOJ3036】绿豆蛙的归宿 概率与期望
最水的概率期望,推荐算法合集之<浅析竞赛中一类数学期望问题的解决方法> #include <iostream> #include <cstdio> using na ...