看官是否记得,在上一部分的时候,有一讲专门介绍if语句的:[从if开始语句的征程](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/111.md)。在学习if语句的时候,对python编程的基础知识了解的还不是很多,或许没有做什么太复杂的东西。本讲,要对它进行一番复习,通过复习提高一下。如果此前有的东西忘记了,建议首先回头,看看前面那讲。
## 基本语句结构
~~~
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
~~~
只有当“判断条件”的值是True的时候,才执行下面的执行语句。
那么,在python中,怎么知道一个判断条件是不是真呢?这个问题我们在[眼花缭乱的运算符](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/110.md)中已经讲解了一种数据类型:布尔类型。可以通过一个内置函数bool()来判断一个条件的结果True还是False。看看下面的例子,是不是能够理解bool()的判断规则?
~~~
>>> bool("")
False
>>> bool(0)
False
>>> bool('none')
True
>>> bool(False)
False
>>> bool("False")
True
>>> bool(True)
True
>>> bool("True")
True
>>> bool(3>4)
False
>>> bool("b">"a")
True
>>> bool(not "")
True
>>> bool(not True)
False
~~~
忘记了怎么办?看下面的语句:
~~~
if 忘记:
复习-->眼花缭乱的运算符一讲
~~~
在执行语句中,其实不一定非要把bool()写上的。如同这样:
~~~
>>> x = 9
>>> if bool(x>7): #条件为True则执行下面的
... print "%d more than 7"%x
... else:
... print "%d not more than 7"%x
...
9 more than 7
>>> if x>7:
... print "%d more than 7"%x
... else:
... print "%d not more than 7"%x
...
9 more than 7
~~~
以上两个写法是等效的,但是,在实际的编程中,我们不用if bool(x>7)的格式,而是使用if x>7的样式,还要特别提醒,如果写成if (x>7),用一个括号把条件表达式括起来,是不是可以呢?可以,但也不是python提倡的。
~~~
>>> if (x>7): #不提倡这么写,这不是python风格
... print "%d more than 7"%x
...
9 more than 7
~~~
## 拉出来溜溜
平时总有人在不服气的时候说“是骡子是马,拉出来溜溜”,赵本山有一句名言“走两步”。其本质都是说“光说不练是假把式”。今天收到一个朋友的邮件,也询问,在学习python的时候,记不住python的内容。其实不用记,我在前面的课程中已经反复讲过了。但是,在应用中,会越来越熟练。
下面就做一个练习,要求是:
1. 接收任何字符和数字的输入
2. 判断输入的内容,如果不是整数是字符,就告诉给用户;如果是小数,也告诉用户
3. 如果输入的是整数,判断这个整数是奇数还是偶数,并且告诉给用户
在这个练习中,显然要对输入的内容进行判断,以下几点需要看官注意:
* 通过raw_input()得到的输入内容,都是str类型
* 要判断一个字符串是否是由纯粹数字组成,可以使用str.isdigit()(建议看官查看该内置函数官方文档)
下面的代码是一个参考:
~~~
#! /usr/bin/env python
#coding:utf-8
print "请输入字符串,然后按下回车键:"
user_input = raw_input()
result = user_input.isdigit()
if not result:
print "您输入的不完全是数字"
elif int(user_input)%2==0:
print "您输入的是一个偶数"
elif int(user_input)%2!=0:
print "您输入的是一个奇数"
else:
print "您没有输入什么呢吧"
~~~
特别提醒列为,这个代码不是非常完善的,还有能够修改的地方,看官能否完善之?
再来一个如何?
已知一个由整数构成的list,从中跳出奇数和偶数,并且各放在一个list中。
请看官在看下面的参考代码之前,自己写一写。
~~~
#!/usr/bin/env python
#coding:utf-8
import random
numbers = [random.randint(1,100) for i in range(20)] #以list解析的方式得到随机的list
odd = []
even = []
for x in numbers:
if x%2==0:
even.append(x)
else:
odd.append(x)
print numbers
print "odd:",odd
print "even:",even
~~~
用这个例子演示一下if在list解析中的应用。看能不能继续改进一些呢?
可以将循环的那部分用下面的list解析代替
~~~
#!/usr/bin/env python
#coding:utf-8
import random
numbers = [random.randint(1,100) for i in range(20)] #以list解析的方式得到随机的list
odd = [x for x in numbers if x%2!=0]
even = [x for x in numbers if x%2==0]
print numbers
print "odd:",odd
print "even:",even
~~~
## 一个有趣的赋值--三元操作符
对赋值,看官应该比较熟悉了吧,如果要复习,请看[《赋值,简单也不简单》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/127.md)以及[《正规地说一句》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/201.md)的相关内容。
这里说的有趣赋值是什么样子的呢?请看:
~~~
>>> name = "qiwsir" if "laoqi" else "github"
>>> name
'qiwsir'
>>> name = 'qiwsir' if "" else "python"
>>> name
'python'
>>> name = "qiwsir" if "github" else ""
>>> name
'qiwsir'
~~~
总结一下:A = Y if X else Z
什么意思,结合前面的例子,可以看出:
* 如果X为真,那么就执行A=Y
* 如果X为假,就执行A=Z
> > > x = 2 y = 8 a = "python" if x>y else "qiwsir" a 'qiwsir' b = "python" if x<y else "qiwsir" b 'python'
再看看上面的例子,是不是这样执行呢?
if语句似乎简单,但是在编程时间中常用到。勤加练习吧。
- 第零部分 独上高楼,望尽天涯路
- 唠叨一些关于Python的事情
- 为什么要开设本栏目
- 第一部分 积小流,至江海
- Python环境安装
- 集成开发环境(IDE)
- 数的类型和四则运算
- 啰嗦的除法
- 开始真正编程
- 初识永远强大的函数
- 玩转字符串(1):基本概念、字符转义、字符串连接、变量与字符串关系
- 玩转字符串(2)
- 玩转字符串(3)
- 眼花缭乱的运算符
- 从if开始语句的征程
- 一个免费的实验室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比较
- 画圈还不简单吗
- 再深点,更懂list
- 字典,你还记得吗?
- 字典的操作方法
- 有点简约的元组
- 一二三,集合了
- 集合的关系
- Python数据类型总结
- 深入变量和引用对象
- 赋值,简单也不简单
- 坑爹的字符编码
- 做一个小游戏
- 不要红头文件(1): open, write, close
- 不要红头文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 穷千里目,上一层楼
- 正规地说一句话
- print能干的事情
- 从格式化表达式到方法
- 复习if语句
- 用while来循环
- 难以想象的for
- 关于循环的小伎俩
- 让人欢喜让人忧的迭代
- 大话题小函数(1)
- 大话题小函数(2)
- python文档
- 重回函数
- 变量和参数
- 总结参数的传递
- 传说中的函数条规
- 关于类的基本认识
- 编写类之一创建实例
- 编写类之二方法
- 编写类之三子类
- 编写类之四再论继承
- 命名空间
- 类的细节
- Import 模块
- 模块的加载
- 私有和专有
- 折腾一下目录: os.path.<attribute>
- 第三部分 昨夜西风,亭台谁登
- 网站的结构:网站组成、MySQL数据库的安装和配置、MySQL的运行
- 通过Python连接数据库:安装python-MySQLdb,连接MySQL
- 用Pyton操作数据库(1):建立连接和游标,并insert and commit
- 用Python操作数据库(2)
- 用Python操作数据库(3)
- python开发框架:框架介绍、Tornado安装
- Hello,第一个网页分析:tornado网站的基本结构剖析:improt模块、RequestHandler, HTTPServer, Application, IOLoop
- 实例分析get和post:get()通过URL得到数据和post()通过get_argument()获取数据
- 问候世界:利用GAE建立tornado框架网站
- 使用表单和模板:tornado模板self.render和模板变量传递
- 模板中的语法:tornado模板中的for,if,set等语法
- 静态文件以及一个项目框架
- 模板转义
- 第四部分 暮然回首,灯火阑珊处
- requests库
- 比较json/dictionary的库
- defaultdict 模块和 namedtuple 模块
- 第五部分 Python备忘录
- 基本的(字面量)值
- 运算符
- 常用的内建函数
- 扩展阅读(来自网络文章)
- 人生苦短,我用Python