循环结构

(二)for循环

for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下:

for 变量 in 可迭代对象:
	循环体语句
# 遍历一个列表或元组
for i in (10,20,30):
    print(i)

Python for循环输出99 python for循环输出对象_字符串

可迭代对象
  1. 序列。包括:字符串、列表、元组
  2. 字典
  3. 生成器(iterator)
  4. 迭代器(generator)
  5. 文件对象
# 遍历字符串
for c in "kdjff12":
    print(c)

# 遍历字典
dic = {"name":"Cairo","age":18,"job":"programmer"}

# 默认遍历字典的key
for key in dic:
    print(key)

for key in dic.keys():
    print(key)

# 遍历字典的value
for value in dic.values():
    print(value)

# 遍历字典的整个键值对
for item in dic.items():
    print(item)

Python for循环输出99 python for循环输出对象_字符串_02

range对象

range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:

range(start, end [,step])

生成的数值序列从 start 开始到 end 结束(不包含 end)。若没有填写 start,则默认从 0 开始。step 是可选的步长,默认为 1。

【操作】利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和, 计算 1-100 之间奇数的累加和。

sum_all = 0
sum_even = 0
sum_odd = 0

for i in range(1,101):
    sum_all += i
    if i&1 == 1:
        sum_odd += i
    else:
        sum_even += i

print("sum_all",sum_all)
print("sum_even",sum_even)
print("sum_odd",sum_odd)

Python for循环输出99 python for循环输出对象_Python for循环输出99_03

(三)嵌套循环

一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。

【操作】打印如下图案
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4

for i in range(5):
    for j in range(5):
        print(i,end=" ")
    print()

Python for循环输出99 python for循环输出对象_条件判断_04


【操作】利用嵌套循环打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        mul = i*j
        print("{0}*{1}={2}".format(i,j,mul),end=" ")
    print()

Python for循环输出99 python for循环输出对象_迭代_05

【操作】用列表和字典存储下表信息,并打印出表中工资高于 15000 的数据

Python for循环输出99 python for循环输出对象_条件判断_06

p1 = {"name":"高小一","age":"18","salary":30000,"city":"Beijing"}
p2 = {"name":"高小二","age":"19","salary":20000,"city":"Shanghai"}
p3 = {"name":"高小五","age":"20","salary":10000,"city":"Shenzhen"}

p = [p1,p2,p3]

for i in p:
    if i["salary"] > 15000:
        print(i)

Python for循环输出99 python for循环输出对象_字符串_07

(四)break语句

break语句可用于while和for循环,用来结束整个循环。当有循环嵌套时,break语句只能跳出最近一层的循环。

【操作】使用break语句结束循环

while True:
    a = input("please input a character:")
    if a.upper() == "Q":
        print("end!")
        break
    else:
        print(a)

Python for循环输出99 python for循环输出对象_字符串_08

(五)continue语句

continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层

【操作】要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和 薪资明细,以及平均薪资

staff = 0
staff_salary = []
while True:
    salary =input("please input the salary :")
    if salary.upper() == "Q":
        print("exit!")
        break
    salary = float(salary)
    if salary < 0:
        continue
    else:
        staff += 1
        staff_salary.append(salary)

print("Staff number is ",staff)
print("Staff salary details:",staff_salary)
print("Staff average salary",sum(staff_salary)/staff)

Python for循环输出99 python for循环输出对象_迭代_09

(六)else语句

while、for循环可以带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:

while 条件表达式:
	循环体 
else:
	语句块 

for 变量 in 可迭代对象:
	循环体 
else:
	语句块

(七)循环代码优化技巧【极其重要

编写循环程序时,遵守以下三个原则可以大大提高运行效率,避免不必要的计算:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能外提
  3. 局部变量查询较快,尽量使用局部变量
  4. 连接多个字符串,使用join()而不使用+
  5. 列表进行元素插入和删除,尽量在列表尾部操作
#循环代码优化测试
import time
start = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        result.append(i*1000+m*100)
end = time.time()
print("耗时:{0}".format((end-start)))
start2 = time.time()
for i in range(1000):
    result = []
    c = i*1000
    for m in range(10000):
        result.append(c+m*100) 
end2 = time.time()
print("耗时:{0}".format((end2-start2)))

Python for循环输出99 python for循环输出对象_字符串_10

(八)zip并行迭代

通过zip()函数对多个序列进行并行迭代,zip()函数在==最短序列“用完”==时就会停止。

names = ("Cairt","Quiin","Lias","Baly")
ages = (18,29,35,23)
jobs = ("teacher","programmer","manager")

for item in zip(names,ages,jobs):
    name,age,job = item
    print("{0}--{1}--{2}".format(name,age,job))

for name,age,job in zip(names,ages,jobs):
	print("{0}--{1}--{2}".format(name,age,job))

Python for循环输出99 python for循环输出对象_迭代_11

推导式创建序列

推导式是从一个或者多个迭代器generator快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。

1. 列表推导式(最常用)

推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。

列表推导式生成列表对象,语法如下:

[表达式 for item in 可迭代对象 ] 
[表达式 for item in 可迭代对象 if 条件判断]
# 可以使用两个循环
cells = [(row,col) for row in range(1,10) for col in range(1,10)]

2. 字典推导式

字典的推导式生成字典对象,格式如下:

{key_expression : value_expression for 表达式 in 可迭代对象}

类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。

【操作】统计文本中字符出现的次数

my_text = "i love you, i love sxt, i love Cairo"
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)

3. 集合推导式

集合推导式生成集合,和列表推导式的语法格式类似:

{表达式 for item in 可迭代对象 } 
 {表达式 for item in 可迭代对象 if 条件判断}

Python for循环输出99 python for循环输出对象_Python for循环输出99_12

4. 生成器推导式(生成元组)

元组是没有推导式的,一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。

Python for循环输出99 python for循环输出对象_条件判断_13

综合练习

【操作】绘制多个同心圆

import turtle
p = turtle.Pen()
my_colors = ("red","green","yellow","black")

p.width(4)
p.speed(1)

for i in range(10):
    p.penup()
    p.goto(0,-i*10)
    p.pendown()
    p.color(my_colors[i%len(my_colors)])
    p.circle(15+i*10)

turtle.done()

Python for循环输出99 python for循环输出对象_条件判断_14

【参考】控制颜色的方法

my_colors = ("red","green","yellow","black")
p.color(my_colors[i%len(my_colors)])

【操作】绘制18*18棋盘

第五章 函数用法和底层分析

  • 函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现
  • 在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。

(一)函数简介

  1. 一个程序由一个个任务组成;函数就是代表一个任务或者一个功能
  2. 函数是代码复用的通用机制。
Python函数的分类
  1. 内置函数
    前面使用的str()\list()\len()等这些都是内置函数,可以直接拿来使用
  2. 标准库函数
    可以通过import导入库,然后使用其中定义的函数
  3. 第三方库函数
    python社区也提供了很多高质量的库,下载安装这些库之后,也是通过import语句导入,然后可以使用这些第三方库的函数
  4. 用户自定义函数

(二)函数的定义和调用

Python 中,定义函数的语法如下:

def 函数名 ([参数列表]) : 
	'''文档字符串''' 
	函数体/若干语句

要点:

  1. 我们使用 def 来定义函数,然后就是一个空格和函数名称;
    (1) Python 执行 def 时,会创建一个函数对象,并绑定到函数名变量上
  2. 参数列表
    (1) 圆括号内是形式参数列表,有多个参数则使用逗号隔开
    (2) 形式参数不需要声明类型,也不需要指定函数返回值类型
    (3) 无参数,也必须保留空的圆括号
    (4) 实参列表必须与形参列表一一对应
  3. return 返回值
    (1) 如果函数体中包含 return 语句,则结束函数执行并返回值;
    (2) 如果函数体中不包含 return 语句,则返回 None 值
  4. 调用函数之前,必须要先定义函数,即先调用 def 创建函数对象
    (1) 内置函数对象会自动创建
    (2) 标准库和第三方库函数,通过 import 导入模块时,会执行模块中的 def 语句