Python_day05_控制语句_函数

控制语句

for循环结构和可迭代对象遍历

for循环通常用于可迭代对象的遍历

for 变量 in (20,30,40):
		print(x*3)

举例:

for i in range(15):
    print(i,end='\t')

输出:

0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	

各种遍历:

# 遍历字符串
for x in "GSH":
    print(x,end='\t')

print('*****************')
# 遍历列表
for x in list('abcd'):
    print(x,end='\t')

print('*****************')
# 遍历字典
zd = {'name':'GSH','age':34,'job':'student'}
for x in zd:
    print(x,end='\t') # 遍历字典里所有的key
print('*****************')
for x in zd.keys():
    print(x,end='\t') # 同样是遍历字典里的key
print('*****************')
for x in zd.values():
    print(x,end='\t') # 遍历字典里的value
print('*****************')
for x in zd.items():
    print(x,end='\t')

输出:

G	S	H	*****************
a	b	c	d	*****************
name	age	job	*****************
name	age	job	*****************
GSH	34	student	*****************
('name', 'GSH')	('age', 34)	('job', 'student')

可迭代对象

Python包含下几种可迭代对象:

  1. 序列: 字符串 列表 元祖
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器对象(generator)
range()对象

格式:
range(start, end [,step])
举例:

for i in range(10):
    print(i,end='\t')
print()
for i in range(3,10):
    print(i,end='\t')
print()
for i in range(3,10,2):
    print(i,end='\t')

输出结果:

0	1	2	3	4	5	6	7	8	9	
3	4	5	6	7	8	9	
3	5	7	9	

嵌套循环

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

for i in range(5):  # 先循环输出列
    for j in range(5): # 再循环输出行
        print(i,end='\t')
    print() # 换行

输出结果:

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 m in range(1,10): # 打印列
    s = ''
    for n in range(1,1+m): # 打印行 外循环控制内循环
        s += str.format("{0}*{1} = {2}\t",m,n,m*n)
    print(s)

输出结果:

1*1 = 1	
2*1 = 2	2*2 = 4	
3*1 = 3	3*2 = 6	    3*3 = 9	
4*1 = 4	4*2 = 8	    4*3 = 12	4*4 = 16	
5*1 = 5	5*2 = 10	5*3 = 15	5*4 = 20	5*5 = 25	
6*1 = 6	6*2 = 12	6*3 = 18	6*4 = 24	6*5 = 30	6*6 = 36	
7*1 = 7	7*2 = 14	7*3 = 21	7*4 = 28	7*5 = 35	7*6 = 42	7*7 = 49	
8*1 = 8	8*2 = 16	8*3 = 24	8*4 = 32	8*5 = 40	8*6 = 48	8*7 = 56	8*8 = 64	
9*1 = 9	9*2 = 18	9*3 = 27	9*4 = 36	9*5 = 45	9*6 = 54	9*7 = 63	9*8 = 72	9*9 = 81

break中断

break语句可用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近的一层循环。
举例说明: 不断的进行输入,直到输入Q为止。

while True:
    a = input('请输入一个字符(输入Q或q结束): ')
    if a.upper() == 'Q':
        print('循环结束 退出')
        break
    else:
        print(a)

打印结果:

请输入一个字符(输入Q或q结束): 23
23
请输入一个字符(输入Q或q结束): 24
24
请输入一个字符(输入Q或q结束): 54
54
请输入一个字符(输入Q或q结束): 12
12
请输入一个字符(输入Q或q结束): q
循环结束 退出

continue继续下一次

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

综合练习:

empNum = 0
salarySum = 0
salarys = []
while True:
    s = input('请输入员工的薪资(按Q或者q结束):')
    if s.upper() == 'Q':
        print('录入完成')
        break
    if float(s) < 0:
        print('您输入的小于零,不对')
        continue
    empNum += 1
    salarys.append(float(s)) # 将薪资都添加到列表中
    salarySum += float(s) # 求薪资总和

print("员工总数:",empNum) # 求员工总数
print("录入薪资:",salarys) # 打印salary列表
print("平均薪资",(salarySum/empNum)) # 平均薪资值

输出结果:

请输入员工的薪资(按Q或者q结束):10
请输入员工的薪资(按Q或者q结束):20
请输入员工的薪资(按Q或者q结束):30
请输入员工的薪资(按Q或者q结束):20
请输入员工的薪资(按Q或者q结束):10
请输入员工的薪资(按Q或者q结束):q
录入完成
员工总数: 5
录入薪资: [10.0, 20.0, 30.0, 20.0, 10.0]
平均薪资 18.0

else语句

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

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

或者:

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

举例:

empNum = 0
salarys = []
for i in range(4):
    s = input('请输入员工的薪资(按Q或者q结束):')
    if s.upper() == 'Q': # 如果这里键盘输入了Q,那么则执行break,就不会再执行else内的语句
        print('录入完成')
        break
    if float(s) < 0:
        print('您输入的小于零,不对')
        continue
    empNum += 1
    salarys.append(float(s)) # 将薪资都添加到列表中
else:
    print('四位员工信息已全部录入进去') # 如果将四名员工的工资录入之后,并没有录入q,则不会执行break,这里就会执行else内的语句。

print("员工总数:",empNum) # 求员工总数
print("录入薪资:",salarys) # 打印salary列表

循环代码的优化

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能的向外提
  3. 局部变量查询较快,尽量使用局部变量
  4. 总结: 内层循环的东西尽量往外丢
  5. 连接多个字符串尽量使用join()而不是+
  6. 列表进行元素的插入和删除,尽量在列表尾部进行操作

zip() 并行迭代

for i in [1,2,3]:
    print(i)
print("--------------")
# zip()
names = ("张三","李四","王五")
ages = (18,16,20,25)
jobs = ("老师","程序员","公务员")
for name,age,job in zip(names,ages,jobs): # 依次对应取值
    print("{0} -- {1} -- {2}".format(name,age,job))
print("--------------")
for i in range(3):
    print("{0} -- {1} -- {2}".format(names[i],ages[i],jobs[i]))

输出结果:

1
2
3
--------------
张三 -- 18 -- 老师
李四 -- 16 -- 程序员
王五 -- 20 -- 公务员
--------------
张三 -- 18 -- 老师
李四 -- 16 -- 程序员
王五 -- 20 -- 公务员

推导式创建序列

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

基本语法:
表达式 for item in 可迭代对象
或者:
{表达式 for item in 可迭代对象 if 条件判断}

举例:

>>> [x for x in range(1,5)]
[1, 2, 3, 4]
>>> [x*2 for x in range(1,5)]
[2, 4, 6, 8]
>>> [x*2 for x in range(1,20) if x%5 == 0]
[10, 20, 30]
>>> [a for a in 'abcdefg']
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> cells = [(row,col) for row in range(1,10) for col in range(1,10)] # 可以使用两个循环
>>> cells
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
>>> 
字典推导式:

基本语法:

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

类似于列表推导式,字典推导式也可以增加if判断和多个for循环
练习:
统计文本中的字符出现的次数,并生成一个字典:

>>> my_text = 'i love you,i love my family,i love GSH'
>>> char_count = {c:my_text.count(c) for c in my_text}
>>> char_count
{'i': 4, ' ': 7, 'l': 4, 'o': 4, 'v': 3, 'e': 3, 'y': 3, 'u': 1, ',': 2, 'm': 2, 'f': 1, 'a': 1, 'G': 1, 'S': 1, 'H': 1}
>>>
生成器推导式:

这里生成的是一个’生成器对象’,显然,元祖是没有推导式的。

>>> (x for x in range(1,100) if x%9 == 0)
<generator object <genexpr> at 0x109120ac0>

一个生成器对象只能运行一次,第一次迭代可以得到数据。第二次发现数据已经没有了。

>>> gnt = (x for x in range(1,100) if x%9 == 0)
>>> for i in gnt: # 生成器(此时的gnt)是一个可迭代对象
	print(i,end = '\t')

9	18	27	36	45	54	63	72	81	90	99	
>>> for j in gnt:
	print(j)

	# 这里什么都没打印 说明生成器推导式只可以用一次,不能用第二次了。
>>> 

小练习:

import turtle

t = turtle.Pen()
my_color = ('red','green','yellow','grey')
t.width(4)
t.speed(3)

for i in range(10):
    t.penup()
    t.goto(0,(-1)*i*10)
    t.pendown()
    t.color(my_color[i%len(my_color)])
    t.circle((i+1)*10)

turtle.done() # 这个方法的意思是程序执行完,窗口仍然存在

输出:
在这里插入图片描述

函数

函数的用法和底层分析

把一堆大控制语句包起来就是函数,还可以反复的调用。
函数是可重用的程序代码块。
一个函数(function)就是用来完成一个功能,可以被反复的去掉。
Python中函数有以下几类:

  1. 内置函数 前面使用的str() list() len()等这些都是内置函数,我们可以直接拿来使用。
  2. 标准库函数 我们可以通过import导入进来,然后可以使用这些第三方库的函数。
  3. 用户自定义函数 用户可以自己定义的函数 显然也是开发中适应用户自身需求定义的函数。
    函数定义格式:
def 函数名([参数列表]):
		"'文档字符串'"
		函数体/若干语句

简单的例子:

def test():
    print('*'*10)
    print('*'*10)

test()
test()
test()

形参和实参

def printMax(a,b): # 此时这里的a,b就是形参 只在函数范围内使用
    '''实现两个数的比较,并返回比较大的值'''
    if a > b:
        print('a大')
    if a < b:
        print('b大')

# 实参和形参必须一一对应  才能更好的赋值
printMax(12,34) # 此时的12,34就是实参 形参和实参是最基本的概念

文档字符串(函数的注释)

1.'''三个单引号'''
2.#

def printMax(a,b): # 此时这里的a,b就是形参 只在函数范围内使用
    '''实现两个数的比较,并返回比较大的值'''
    if a > b:
        print('a大')
    if a < b:
        print('b大')

# 实参和形参必须一一对应  才能更好的赋值
printMax(12,34) # 此时的12,34就是实参 形参和实参是最基本的概念

help(printMax.__doc__) # 这里可以输出函数的三个单引号里的说明 __doc__是属性

返回值

  1. 如果函数中包含return语句,则结束函数执行并返回值
  2. 如果函数体重不包含return语句,则返回None值
  3. 要返回多个返回值,我们可以使用列表元祖字典集合将多个值存起来
def print_star(n):
    print('*'*n)

def my_avg(a,b):
    return (a+b)/2

print_star(5)
re = my_avg(12,34)
print(re)

返回多个值的情况:

def test_01(x,y,z):
    return [x*10,y*20,z*30]

print(test_01(12,31,45))

输出:

[120, 620, 1350]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的or函数是一个逻辑运算符,用于判断两个表达式中的任意一个是否为True。如果其中一个表达式为True,则整个or表达式的值为True;只有当两个表达式都为False时,整个or表达式的值才为False。\[2\]这个函数的使用方式类似于C语言中的三元运算符bool ? a : b。你可以使用or函数来完成类似的功能。\[2\]这种方式在某些情况下比使用if语句更简洁,特别是当你需要在两个常量值中进行选择,并且你知道其中一个值总是为True的情况下。\[3\]然而,在一些更复杂的情况下,使用if语句可能更为安全和灵活。例如,在lambda函数中是不允许使用if语句的情况下,你可以使用or函数来实现相同的功能。 #### 引用[.reference_title] - *1* [Python之旅(一些指令or函数)——Day7.13](https://blog.csdn.net/DreamKx/article/details/125756871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python中的and和or(转载)](https://blog.csdn.net/weixin_30525825/article/details/99596584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值