【2】Python 流程控制
来源:互联网 发布:数据串传送和查表程序 编辑:程序博客网 时间:2024/06/03 03:53
Python 流程控制
一、实验介绍
1.1 实验内容
本节介绍Python的流程控制if和for,range函数能够产生一个指定范围的列表,可以用def定义函数,其中有关键字参数、可变参数,lambda可以创建匿名函数。
1.2 实验知识点
- python流程控制
- range函数
- 函数概念
1.实验说明
此实验介绍Python的流程控制及函数。
1.3 实验环境
- python2.7
- Xfce终端
1.4 适合人群
本课程难度为初级,适合没有编程经验的初学者。
二、实验步骤
2.1 if 为条件判断语句
我们用一个猜数的游戏来讲解if的用法:
输出结果:
$ python guess.pyInput the number: 87Sorry, It's higher than that....Game will exit :)$ python guess.pyInput the number: 89Sorry, It's lower than that....Game will exit :)$ python guess.pyInput the number: 88Amazing, You guessed it!Game will exit :)
代码说明
程序运行时,将会提示我们输入数字,然后根据数字来判断我们输入的数字(guess_num)是否和预定义的(true_num)是相等的。
使用raw_input()
函数来获取用户的输入,由于这个函数的特性,它获取的所有的值都会被转化为一个字符串,但是我们需要的是一个整型的数字,所以使用int()
函数,强制转换为整型,以便我们接下来的判断。
第8行开始到13行,我们将输入的猜测数与我们预定义的的数做比较。如果相等,我们打印一个成功的消息。
注意,我们使用了缩进层次来告诉Python每个语句分别属于哪一个块。这就是为什么缩进在Python如此重要的原因。我希望你能够坚持每个缩进层一个制表符,或2个或4个空格的规则。
注意if语句(包括了elif,else)在结尾处包含一个冒号 —— 我们通过它告诉Python下面跟着一个语句块。
然后,我们检验猜测是否小于我们的数,如果是这样的,我们告诉用户它的猜测大了一点。我们在这里使用的是elif从句,它事实上把两个相关联的if else-if else
语句合并为一个if-elif-else语句。这使得程序更加简单,并且减少了所需的缩进数量。
elif和else从句都必须在逻辑行结尾处有一个冒号,下面跟着一个相应的语句块(当然还包括正确的缩进)。
你也可以在一个if块中使用另外一个if语句,等等——这被称为嵌套的if语句。
记住,elif和else部分是可选的。一个最简单的有效if语句是:
if True: print 'It is true'
甚至,我们可以使用三元操作符:
condition1 if exp else condition2
,exp为真执行condition1,否则为condition2,如
print "I'm True" if True else "False"
2.2 for 语句
for 语句用于循环迭代
定义一个列表:
>>> a = ['cat', 'window', 'defenestrate']
循环打印列表内容及内容长度:
>>> for x in a:... print x, len(x)...cat 3window 6defenestrate 12
2.3 range()函数
2.3.1 使用range()函数
>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(10)
生成了一个包含10个值的链表,它用链表的索引值填充了这个长度为10的列表,所生成的链表中不包括范围中的结束值。也可以让range操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为“步长”):
>>> range(5, 10)[5, 6, 7, 8, 9]>>> range(0, 10, 3)[0, 3, 6, 9]>>> range(-10, -100, -30)[-10, -40, -70]
2.3.2 通过range()和len()迭代序列
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']>>> for i in range(len(a)):... print i, a[i]...0 Mary1 had2 a3 little4 lamb
2.4跳出循环:break 和 continue
2.4.1 break 语句
break语句用于跳出最近的一级for或while循环。
>>> for i in range(5):... if i == 3:... break... print i...012>>>
一定要注意,这是很多新手会弄混的地方,break,只是跳出当前循环,不是跳出所有的循环(嵌套循环的情况下)
如上图,当程序第一次执行的时候i=0,里面的 for循环j=0,这时遇到了break,于是退出当前的这层循环(即这里的第二层循环),回到外层循环,于是i从0变成了1,又开始了第2次循环;里面的循环又开始了一次全新的循环j=0,所以看结果,i的值从0到9,而j的值一直是0。
xrange,是range的另一种形式,对xrange的讨论已经超出了本课程的范围,所以可以认为xrange是一个优化版的range,特别是当你需要循环一个特别大的序列的时候。
有兴趣了解一下range和xrange的区别?,记住如果有些东西实在没法理解,就跳过它,等到我们对python有更多了解的时候再回头重新浏览,也许就会豁然开朗了 :)
2.4.2 continue 语句
continue语句是从C中借鉴来的,它表示跳过本次循环继续执行下一次迭代。
>>> for i in range(5):... if i == 3:... continue... print i...0124>>>
了解了break的原理,continue就easy多了,当循环中遇到了continue,在它之后的语句便不再执行,立马对当前循环进行下一次循环(或者是说迭代)。
2.5 pass 语句
pass 语句什么也不做
pass 语句用于那些语法上必须要有什么语句,但程序什么也不做的场合。
>>> while True:... pass # Busy-wait for keyboard interrupt (Ctrl+C)...>>>
用于创建最小结构的类
>>> class MyEmptyClass:... pass...>>>
2.6、Python中的函数
2.6.1 定义函数
关键字 def 引入了一个函数定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。
>>> def fib(n): # write Fibonacci series up to n... """Print a Fibonacci series up to n."""... a, b = 0, 1... while a < n:... print a,... a, b = b, a+b...>>> # Now call the function we just defined:... fib(2000)0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
2.6.2 默认参数值
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise IOError('refusenik user') print complaint
这个函数可以通过几种不同的方式调用:
只给出必要的参数: ask_ok('Do you really want to quit?')
给出一个可选的参数: ask_ok('OK to overwrite the file?', 2)
或者给出所有的参数: ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
>>> i = 5>>> def f(arg=i):>>> print arg>>> i = 6>>> f()
输出:5
重要警告: 默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。
2.6.3.关键字参数
函数可以通过关键字参数的形式来调用,形如keyword = value。
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print "-- This parrot wouldn't", action, print "if you put", voltage, "volts through it." print "-- Lovely plumage, the", type print "-- It's", state, "!"parrot(1000) # 1 positional argumentparrot(voltage=1000) # 1 keyword argumentparrot(voltage=1000000, action='VOOOOOM') # 2 keyword argumentsparrot(action='VOOOOOM', voltage=1000000) # 2 keyword argumentsparrot('a million', 'bereft of life', 'jump') # 3 positional argumentsparrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword
2.6.4 可变参数列表
一个最不常用的选择是可以让函数调用可变个数的参数。这些参数被包装进一个元组。在这些可变个数的参数之前,可以有零到多个普通的参数。
>>> def test(tep, *args):... print args...>>> test(1, 2, 3, 4, 5)(2, 3, 4, 5)
2.6.5 参数列表的分拆
当你要传递的参数已经是一个列表,但要调用的函数却接受一个个分开的参数值. 这时候你要把已有的列表拆开来. 例如内建函数 range() 需要要独立的 start , stop 参数.你可以在调用函数时加一个*
操作符来自动把参数列表拆开。
>>> list(range(3, 6)) # normal call with separate arguments[3, 4, 5]>>> args = [3, 6]>>> list(range(*args)) # call with arguments unpacked from a list[3, 4, 5]
以同样的方式,可以使用 **
操作符拆分字典:
>>> def parrot(voltage, state='a stiff', action='voom'):... print "-- This parrot wouldn't", action,... print "if you put", voltage, "volts through it.",... print "E's", state, "!"...>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}>>> parrot(**d)-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
2.6.6 Lambda 形式
通过 lambda 关键字,可以创建短小的匿名函数。
>>> def make_incrementor(n):... return lambda x: x + n...>>> f = make_incrementor(42)>>> f(0)42>>> f(1)43
lambda表达式作用是什么
2.7文档字符串
第一行应该是关于对象用途的简介。简短起见,不用明确的陈述对象名或类型,因为它们可以从别的途径了解到(除非这个名字碰巧就是描述这个函数操作的动词)。这一行应该以大写字母开头,以句号结尾。
如果文档字符串有多行,第二行应该空出来,与接下来的详细描述明确分隔。接下来的文档应该有一或多段描述对象的调用约定、边界效应等。
Python 的解释器不会从多行的文档字符串中去除缩进,所以必要的时候应当自己清除缩进。这符合通常的习惯。第一行之后的第一个非空行决定了整个文档的缩进格式。(我们不用第一行是因为它通常紧靠着起始的引号,缩进格式显示的不清楚。)留白“相当于”是字符串的起始缩进。每一行都不应该有缩进,如果有缩进的话,所有的留白都应该清除掉。留白的长度应当等于扩展制表符的宽度(通常是8个空格)。
>>> def my_function():... """Do nothing, but document it....... No, really, it doesn't do anything.... """... pass...>>> print my_function.__doc__Do nothing, but document it. No, really, it doesn't do anything.
三、总结
通过本节课程熟悉了python的流程控制(if,else语句,break,continue),range()函数 以及自定义函数。本节的实验内容有点多,希望实验过程中可以多练习,从而达到掌握的目的。
四、作业
请定义一个函数,实现输入n,输出0-n之间的所有素数。
- 【2】Python 流程控制
- 2- python 流程控制篇
- Python中的流程控制
- python流程控制
- 流程控制--python笔记
- python--流程控制语句
- python流程控制结构
- Python中的流程控制
- python 流程控制
- Python 流程控制
- Python的流程控制
- Python基础--流程控制
- python流程控制
- Python流程控制
- Python 流程控制
- python入门--流程控制
- Python流程控制
- 深入 Python 流程控制
- ssm 存储过程分页
- ubuntu14.04安装python3.5并且将其设置为python3默认启动
- Qt常用类QRadioButton
- 初学oracle(4):备份与恢复的概念
- mysql与hive2.1.1安装和配置
- 【2】Python 流程控制
- macOSX中使用python matplotlib模块的问题解决
- Ganglia源码安装
- Linux学习-2
- [队内测试Day10.10]贪心+模拟+BFS
- Navicat Premium远程连接 sqlserver
- css常用背景属性
- [LeetCode] 448.Find All Numbers Disappeared in an Array
- 关于aix 上的/var/preserve的一点知识