python学习-第4课

一、python函数定义

def functionname(parameters):
    function_suite

functionname:函数名
parameters:参数

function_suite:逻辑运行模块

示例

def hello(name):
    print("hello {0}".format(name))

二、条件控制

格式:

if 条件判断1:
    逻辑操作1
elif 条件判断2:
    逻辑操作2
else:
     逻辑操作3

如果 "条件判断1" 为 True 将执行 "逻辑操作1" 块语句
如果 "条件判断1" 为False,将判断 "条件判断2:"
如果"条件判断2:" 为 True 将执行 "逻辑操作2" 块语句
如果 "条件判断2" 为False,将执行"逻辑操作3"块语句

示例:

age = input("please input your age: ")
if age.strip().isdigit():
    if int(age)>=18:
        print("你是一个成年人")
    else:
        print("你是一个未成年人")
else:
    print("你输入的年龄不符合要求!")

三、循环语句

格式:

while 判断条件:

    执行语句……

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
当判断条件假false时,循环结束

示例:

cout=0
while cout<9:
    print(cout)
    cout+=1

死循环:

死循环 while条件永远为true
while 1:
    age = input("please input your age: ")
    if age.strip().isdigit():
        if int(age)>=18:
            print("你是一个成年人")
            break
        else:
            print("你是一个未成年人")
            break
    else:
        print("你输入的年龄不符合要求!")
        continue

四、break语句

break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句break语句用在while和for循环中。
如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。

示例:
for i in "welkwowosdiewldssd":
    if i =="s":
        break       #直接中断循环,不再打印后面的字符
    print("当前字母为{0}".format(i))

var = 0;
while var <20:
    print(var)
    var += 1
    if var==9:
        break       #直接中断循环,不再打印后面的字符

五、continue语句

continue 语句跳出本次循环,而break跳出整个循环。
continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。

for i in "welkwowosdiewldssd":
    if i =="s":
        continue       #跳过打印s字符,继续打印后面的字符
    print("当前字母为{0}".format(i))

var = 0;
while var <20:
    var += 1
    if var==9:
        continue  #跳过打印数字9,继续打印后面不于20的数字
    print(var)

六、range和xrange区别

xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器

要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
xrange 和 range 这两个基本上都是在循环的时候用
range会直接生成一个list对象;而xrange则不会直接生成一个list,而是每次调用返回其中的一个值
xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表

七、迭代器和生成器

 7.1.迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
示例:
import sys

l1=["a","b","c","d",1,2,3,4,5]
it=iter(l1)
while 1:
    try:
        print(next(it))
    except StopIteration:
        sys.exit(1)
结果
a
b
c
d
1
2
3
4
5

7.2.生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
import sys
def fibonacci(n):  # 生成器函数 - 斐波那契
    a, b, count = 0, 1, 0
    while 1:
        if (count > n):
            return
        yield a
        a, b = b, a + b
        count += 1
结果
0 1 1 2 3 5 8 13 21 34 55 

f = fibonacci(10)  # f 是一个迭代器,由生成器返回生成


while 1:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit(1)
什么情况下需要使用 yield?
一个函数 f,f 返回一个 list,这个 list 是动态计算出来的(不管是数学上的计算还是逻辑上的读取格式化),并且这个 list 会很大(无论是固定很大还是随着输入参数的增大而增大),这个时候,我们希望每次调用这个函数并使用迭代器进行循环的时候一个一个的得到每个 list 元素而不是直接得到一个完整的 list 来节省内存,这个时候 yield 就很有用。

如上面的例子,当执行到  yield a时,就会返回生成的a
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。

七、练习题

1、求阶乘0! + 1! +2! + 3! + 4! +………………n!的和

num = int(input("please input a number: "))
sums = 0
result = 1
for i in range(1,num+1):
    result *= i
    sums +=result
print("{0} 阶乘的和是:{1}".format(num,sums))

2、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

while 1:
    s1 = input("please input info: ")
    strs, ints, space, other = 0, 0, 0, 0
    if s1 == "quit":
        exit(1)
    for i in s1:
        if i.isalpha():
            strs += 1
        elif i.isdigit():
            ints += 1
        elif i.isspace():
            space += 1
        else:
            other += 1


    print("英文字母有{0},数字有{1},空格有{2},其它字符有{3}".format(strs,ints,space,other))












猜你喜欢

转载自blog.csdn.net/biankm_gz/article/details/79816754
今日推荐