《python 与数据挖掘 》一 2.3 流程控制

本节书摘来自华章出版社《python 与数据挖掘 》一书中的第2章,第2.3节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问“华章计算机”公众号查看。

2.3 流程控制

流程控制是一门程序语言的基本,掌握Python流程控制语句就已经能够实现很多算法了。本节主要介绍Python的条件分支结构if语句和两种主要循环结构while语句和for语句,并在最后详细讲解Python函数的用法。如果读者有一定的编程基础,对条件分支、循环和函数这3种结构比较熟悉,那么本节的内容是简单的。如果读者初入编程,请认真阅读本节,这些内容是你日后编程的基础。

2.3.1 if语句

如果你的任务是输出两个数a和b之间的较大者,那么你的思路应该是这样的:
如果a大于b:输出a
否则:输出b
如果想通过Python实现上面的思想,就必须借助if语句实现条件分支。在介绍if语句前,我们先来了解布尔表达式的相关内容。
1.布尔表达式
在3.2节中我们简单介绍过布尔值,而布尔表达式是返回一个布尔值(或称为真值)的表达式。首先下面的值作为布尔表达式的时候,会直接返回假(False):
False ,None ,0 , "" , () ,[] , {}
也就是说,标准值False和None,数字0和所有空序列都为False,其余的单个对象都为True。
在表达式运算的过程中,True会视为数值1,False会视为数值0,这与其他编程语言是相似的。逻辑表达式是布尔表达式的一种,逻辑表达式指的是带逻辑操作符或比较操作符(如>,==)的表达式。逻辑表达式返回的是False或者True。代码清单2-2举了一些带True和False的表达式运算的例子:
代码清单2-2 布尔表达式

print "布尔表达式"
print True,False
# result: True,False
print True == 1
# result: True
print True + 2
# result: 3
print True + False*3
# result: 1
print 3 > 2
# result: True
print (1 < 3)*10
# reuslt: 10
*代码详见:示例程序/code/2-3.py

2.条件分支
到目前为止的程序都是一条一条语句顺序执行的,现在我们的程序开始有了选择和判断的能力。if语句能够设置分支,有且只有1条分支会被执行,这和我们日常语言中的“如果”是一样的。if语句的一般格式如下:
if 布尔表达式1:
分支一
elif 布尔表达式2:
分支二
else:
分支三
程序会先计算第一个布尔表达式,如果结果为真,则执行第一个分支的所有语句。如果为假,则计算第二个布尔表达式,如果第二个布尔表达式结果为真,则执行第二个分支的所有语句。如果结果仍然为假,则执行第三个分支的所有语句。如果只有两个分支,那么不需要elif,直接写else即可,如果有更多的分支,那么就需要添加更多的elif语句。Python中没有switch和case语句,多路分支只能通过if-elif-else来实现。注意整个分支结构中是有严格的退格缩进要求的。代码清单2-3给出一些例子。
代码清单2-3 条件分支

print "条件分支"
# 例1  判断天气
weather = 'sunny'
if weather =='sunny':
    print "shopping"
elif weather =='cloudy':
    print "playing football"
else:
    print "learning python"
#result: shopping

# 例2  选择两个数的较大者
import math
a = math.pi
b = math.sqrt(9.5)
if a>b:
    print a
else:
    print b
# result: 3.14159265359
# 例3  3个数简单排序
first = 1
second = 2
third = 3
if second<third:
    t = second
    second = third
    third = t
if first<second:
    t = first
    first = second
    second = t
if second<third:
    t = second
    second = third
    third = t
print first,'>',second,'>',third
# result: 3 > 2 > 1
*代码详见:示例程序/code/2-3.py

2.3.2 while循环

  1. while语句
    计算机比人类愚蠢得多,但计算机的优势是它能够无休止地进行计算。2016年3月谷歌的人工智能机器AlphaGo击败棋力世界排名前十的李世石,这个新闻引起了强大轰动。很多人不理解人工智能为何能够超越人脑。可以这样简单地理解,AlphaGo能够日夜不停地自我对弈,不断提高实力,而且速度比人类快得多,它的胜利是可以预见的。
    回归正题,似乎我们现有的知识要让程序重复地做一件事,就只能重复地写相同的代码,显然这不合理。为此,我们需要掌握一个重要的概念——循环。while循环是最常用的循环之一,它的格式如下:
    while 布尔表达式:
    程序段
    只要布尔表达式为真,那么程序段将会被执行,执行完毕后,再次计算布尔表达式,如果结果仍然为真,那么再次执行程序段,直至布尔表达式为假。举一个例子,如果要计算1到1000的和是多少,那么可以:
    ```javascript
    a=1000
    s=0
    while a:
    s+=a
    a-=1
2. break和continue
下面看两个简单的语句,它们只有嵌套在循环中才起作用,分别是break语句和continue语句。它们的作用如下:
break:跳出最内层循环。
continue:跳到最内层循环的首行。
简单来说,break用于中止循环,注意,如果一个while语句嵌套在另一个while语句内,即程序中有双层循环,内层循环中的break语句仅仅退出内层循环并回到外层循环。而continue语句是中断当前的循环并回到循环段的开头重新执行程序。首次接触continue的读者可能比较难理解,代码清单2-4举出了一些例子。
代码清单2-4 while语句
```javascript
print '''while语句'''

# 例1 1到1000求和
a = 1000
s = 0
while a:
    s+=a
    a-=1
print s
#result: 500500

# 例2 简单计算
while True:
    s = input('1+2=')
    if s ==3:
        print '答案正确'
        break
    if s>=0 and s<=9:
        continue
print '答案是个位数'
*代码详见:示例程序/code/2-3.py

2.3.3 for循环

for循环在Python中是一个通用的序列迭代器,可以遍历任何有序的序列。for语句可作用于字符串、列表、元组,这些数据结构在2.4节将会详细介绍,本节我们的例子需要用到这些数据结构。程序语言的学习是一个循环的学习过程,与其他学科不同,程序语言的知识是相互紧扣的。读者阅读本节有困难的话可以先跳到2.4节。
1. for语句
Python中的for语句接受可迭代对象,如序列和迭代器作为其参数,每次循环调取其中一个元素。在代码清单2-5中,我们给出了for循环对字符串、列表的遍历。Python的for循环看上去像伪代码,非常简洁,如代码清单2-5所示。
代码清单2-5 for语句

print '''简单for循环'''
# 对列表和字符串进行迭代
for a in ['e','f','g']:
print a,
# result:e f g
print
for a in 'string':
print a,
# result:string
*代码详见:示例程序/code/2-3.py

  1. range()函数
    如果你希望Python能像C语言的格式进行循环,就需要一个数字序列,range()函数能够快速生成一个数字序列。如:
    >>>range(5)
    [0,1,2,3,4]
    那么Python中for i in range(5)的效果和C中for(i=0;i<5;i++)的效果是一样的。而range(a,b)能够返回列表[a,a+1,…,b-1](注意不包含b),这样for循环就可以从任意起点开始,任意终点结束。range()函数经常和len()函数一起用于遍历整个序列。len()函数能够返回一个序列的长度,for i in range(len(L))能够迭代整个列表L。虽然直接使用for循环似乎也可以实现这个目的,但是直接使用for循环难以对序列进行修改(因为每次迭代调取的元素并不是序列元素的引用),而通过range()和len()函数可以快速通过索引访问序列并对其进行修改。请看下面的代码清单2-6:
    代码清单2-6 range()函数
    ```javascript
    print '''range()函数'''
    print range(2,9)
    # result: [2, 3, 4, 5, 6, 7, 8]
    print range(2,9,3) #相邻元素的间隔为3
    # result: [2, 5, 8]

print '-'*70

直接使用for循环难以改变序列元素

L = [1,2,3]
for a in L:
a+=1 #a不是引用,L中对应的元素没有发生改变
print L

result: [1,2,3]

range()与len()函数遍历序列并修改元素

for i in range(len(L)):
L[i]+=1 #通过索引访问
print L

result: [2,3,4]

*代码详见:示例程序/code/2-3.py

3.循环中的else语句
for循环同样支持break和continue语句。循环语句可以有一个else语句,当for循环迭代整个列表后或while循环条件变为假时,循环并非通过break语句终止时,便会执行这个else语句。下面给出一个实现简单搜索质数的例子(见代码清单2-7)。
代码清单2-7 循环中的else语句
```javascript
print '''循环中的else语句'''
# 简单搜索质数
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,'是一个质数' # 仅含有普通因子,说明这是一个质数
*代码详见:示例程序/code/2-3.py
时间: 2024-11-03 21:56:13

《python 与数据挖掘 》一 2.3 流程控制的相关文章

python中循环for while,流程控制 if语句

1. if 语句  代码如下 复制代码 i = 10 n = int(raw_input("enter a number:")) if n == i:    print "equal"el if n < i:    print "lower" else:    print "higher" 2. while语句  代码如下 复制代码 while True: passelse:  pass #else语句可选,当while

《Python数据科学实践指南》——2.4 流程控制

2.4 流程控制 到目前为止,我们所编写的程序都是线性的程序,程序中的语句按照顺序依次被执行,这样的程序能实现的功能非常有限,而且还需要编写大量的代码,损失了编写程序执行任务的大部分优势.事实上,可以使用条件判断及循环这两种常用的方式更有效率地编写程序. 2.4.1 条件判断 带有条件判断的程序又称为"分支程序",这样的程序由如三个部分构成. 这样的代码可以执行某些规则的比较,比如下面这段程序: if sex == "man": print("he&quo

《Python数据科学实践指南》一2.4 流程控制

2.4 流程控制 到目前为止,我们所编写的程序都是线性的程序,程序中的语句按照顺序依次被执行,这样的程序能实现的功能非常有限,而且还需要编写大量的代码,损失了编写程序执行任务的大部分优势.事实上,可以使用条件判断及循环这两种常用的方式更有效率地编写程序. 2.4.1 条件判断 带有条件判断的程序又称为"分支程序",这样的程序由如三个部分构成. 一个条件判断,对一个表达式求值,结果是True或False. 一个代码块,如果条件判断为True,则执行这部分代码. 一个可选的代码块,如果条件

Python 流程控制实例代码_python

首先,介绍if-else条件语句.if语句是用来根据表达式的真假来有选择的执行特定的程序块,控制程序的流程.用法同java等语言.对于else if,有一个elif的简写方式. 例如: 复制代码 代码如下: if x > 3: print("greater") elif x == 3: print("eq") else: print("small") 接下来介绍while语句.while语句的作用是在条件表达式为真时,重复执行特定的程序块.

《python 与数据挖掘 》 一 导读

前 言 为什么要写本书? Python是什么? Python是一种带有动态语义的.解释性的.面向对象的高级编程语言.其高级内置数据结构,结合动态类型和动态绑定,使其对于敏捷软件开发非常具有吸引力.同时,Python作为脚本型(胶水)语言连接现有的组件也十分高效.Python语法简洁,可读性强,从而能降低程序的维护成本.不仅如此,Python支持模块和包,鼓励程序模块化和代码重用. Python语言的解释性使其语法更接近人类的表达和思维过程,开发程序的效率极高.习惯使用Python者,总习惯在介绍

《python 与数据挖掘 》一 第2章 Python基础入门

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第1章,第2.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 第2章 Python基础入门 本章是Python的基础章节,读者可以在这章中学习到丰富的Python基础知识.首先我们会从操作符和最简单的数字数据入手,然后就是流程控制,到这里读者能够对Python程序结构有一个清晰的认识.接着是较复杂的数据结构,主要涉及Python最常用的五大内建数据类型:列表,字符串,元组,

《python 与数据挖掘 》一第3章 函  数

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第3章,第3.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 第3章 函 数 本章将介绍如何使用Python编写函数.函数是Python为了代码效率的最大化,减少冗余而提供的最基本的程序结构.在上一章中,我们学会了众多流程控制的语句,在中大型的程序中,同一段代码可能会被使用多次,如果程序由一段又一段冗余的流程控制语句组成,那么程序的可读性会变差.所以,我们需要使用函数去封装

py 流程控制

py 流程控制 python通过缩进来识别代码块,不同于c的一对大括号.所以缩进不能少! 1.逻辑运算 py中真假用True与False表示. 逻辑运算符: or and not(或且非) ==(这个同c) 2.if语句 3.循环-for 4.循环-while

《python 与数据挖掘 》一 2.6 上机实验

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第2章,第2.6节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 2.6 上机实验 1.实验目的掌握Python流程控制语句,合理运用循环进行程序设计.掌握Python数据结构,并能熟练运用进行程序设计.掌握Python的文件读写,并能编写读取数据集的程序.2.实验内容实验一冒泡排序是一个经典的排序算法,任意给定一个Python的列表SList ,要求使用Python实现冒泡排