python之选择、循环结构
2021/12/31 20:40:51
本文主要是介绍python之选择、循环结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前置疑问
Q1 双分支与三元运算符之间的转换?
Q2 python循环代码如果简洁优化?
学习内容
1、三种选择结构
2、循环结构
3、break、continue、else关键字
4、推导式生成序列
学习产出
1、选择结构
1.1 单分支结构
>>> if 3: print("ok") ok >>> if a = 3: SyntaxError: invalid syntax
python中条件语句不能用赋值符"="
1.2 双分支结构
>>> a = 56 >>> >>> if a > 60: print("good") else: print("bad") bad
1.3 多分支结构
>>> grade = 80 >>> if grade >= 90: print("A") elif grade >= 80 and grade < 90: print("B") elif grade >= 70 and grade < 80: print("C") elif grade >= 60 and grade < 70: print("D") else: print("E") B #另外一种写法 score = int(input("请输入一个0~100区间的数字:")) degree = "ABCDE" num = 0 if score > 100 or score < 0: print("输入错误!") else: num = score // 10 if num < 6:num = 5 print("分数为{0}, 对应等级为{1}".format(score, degree[9 - num])) 请输入一个0~100区间的数字:46 分数为46, 对应等级为E
A1
1.4 三元运算符
条件为真执行A if 条件表达式 else 条件为假执行B
s = input("please input a number: ") if int(s) < 10: print("good") else: print("false") # 三元运算符的测试 print("good" if int(s) < 10 else "false")
2、循环
循环流程图
- while循环
>>> num = 0 >>> sum = 0 >>> while num <= 100: sum = sum + num num +=1 >>> print("所有的和为{0}".format(sum)) 所有的和为5050
- for循环 用处很多
for 变量 in 迭代对象
对象:列表、元组、字典、集合、迭代器iterator 生成器函数 generator、 文件对象
>>> a1 = [6,5,4,3,2,1] >>> for i in a1: print(i) 6 5 4 3 2 1 >>> >>> a2 = ("t","u","p","l","e") >>> for i in a2: print(i) t u p l e >>> >>> a3 = {6,5,4,3,2,1} #观察集合遍历和元组遍历的区别 >>> for i in a3: print(i) 1 2 3 4 5 6 >>> for i in a4: print(i) p e u l t >>> a5 = {'name':'xiaoming','age':20,'job':'programmer'} >>> for i in a5: print(i) name age job >>> for i in a5.values(): print(i) xiaoming 20 programmer >>> for i in a5.items(): print(i) ('name', 'xiaoming') ('age', 20) ('job', 'programmer') >>> num = 0 >>> sum = 0 >>> for i in range(101): sum = sum + num num += 1 >>> print("所有100和为:{0} ".format(sum)) 所有100和为:5050
- 嵌套循环
#打印九九乘法表 for i in range(1,10): for j in range(1,i+1): print("{0}*{1}={2}".format(i,j,(i*j)), end="\t") print()
>>> r1 = dict(name="xiaoming",age=20, salary=30000, city="A") >>> r2 = dict(name="xiaohong",age=20, salary=20000, city="B") >>> r3 = dict(name="xiaogang",age=20, salary=15000, city="C") >>> >>> L1 = [r1,r2,r3] >>> >>> for i in L1: if i.get("salary") > 15000: print(i) {'name': 'xiaoming', 'age': 20, 'salary': 30000, 'city': 'A'} {'name': 'xiaohong', 'age': 20, 'salary': 20000, 'city': 'B'}
break、continue语句
break用来结束整个循环
continue 结束当前这一次循环
while True: a = input("请输入一个字符(Q或者q退出):") if a == "Q" or a == "q": print("!!!exit") break; else: print(a)
#打印10以内的奇数 for i in range(11): if i % 2 == 0: continue else: print(i)
- else语句
在python中else 还能与for 或者while一起搭配使用,循环正常结束执行else语句,若循环被break中断则不执行else语句,下面是输入员工薪水的代码:
employee = 0 salaryNum = 0 salary = [] for i in range(4): s = input("please input salary(Q or q is exit):") if s == "Q" or s == "q": print("ok-ok-ok") break if float(s) < 0: continue employee += 1 salary.append(float(s)) salaryNum = salaryNum + float(s) else: print("已完成4名员工的薪资输入!!!") print("员工人数{0}".format(employee)) print("录入薪资:",salary) print("平均薪资{0}".format(salaryNum / employee))
A2
- 循环代码优化三个基本准则
减少循环内部的不必要运算
嵌套循环时,处于内部循环的运算,能外面写,就写在外面
局部变量使用较快
相关拼接字符串或者插入列表和删除,都要考虑效率。比如字符拼接join() 效率比 + 好
import time start = time.time() for i in range(1000): result = [] for j in range(100000): result.append(i*1000 + j * 100) end = time.time() print("耗时:{0}".format((end - start))) #优化 start = time.time() for i in range(1000): result = [] m = i * 1000 for j in range(100000): result.append(m + j * 100) end = time.time() print("耗时:{0}".format((end - start)))
- zip()进行迭代
zip()可以一次性对多个序列同时处理,迭代长度取最小的序列长度
>>> names = ("xiaoming","xiaohong","xiaogang","xiaoyang") >>> ages = (18,19,20,21) >>> jobs = ("teacher","programmer","student") >>> for name, age, job in zip(names,ages,jobs): print("{0}-{1}-{2}".format(name,age,job)) xiaoming-18-teacher xiaohong-19-programmer xiaogang-20-student
- 各种序列推导式
列表推导式 [表达式 for item in 可迭代对象]
>>> [i for i in range(1,5)] [1, 2, 3, 4] >>> [i for i in range(2,10) if(i % 2 != 0)] [3, 5, 7, 9]
- 字典推导式
{key:value for item in 可迭代对象}
>>> my_text = 'i love python, i love java, i love machine learning' >>> char_count = {c:my_text.count(c) for c in my_text} >>> char_count {'i': 5, ' ': 9, 'l': 4, 'o': 4, 'v': 4, 'e': 5, 'p': 1, 'y': 1, 't': 1, 'h': 2, 'n': 4, ',': 2, 'j': 1, 'a': 4, 'm': 1, 'c': 1, 'r': 1, 'g': 1}
- 集合推导式
>>> {i for i in range(100) if i % 2 == 0 and i % 3 == 0} {0, 96, 66, 36, 6, 72, 42, 12, 78, 48, 18, 84, 54, 24, 90, 60, 30}
- 生成推导式(元组无推导式)
生成的对象是一次性的,用完之后就没有了
>>> (i for i in range(100) if i % 2 == 0 and i % 3 == 0) <generator object <genexpr> at 0x0000017115EE3C10> >>> generator1 = (i for i in range(100) if i % 2 == 0 and i % 3 == 0) >>> for i in generator1: print(i,end=" ") 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 >>> for i in generator1: print(i,end=" ") >>> >
今日代码
import turtle my_colors = ("red","green","yellow","black") turtle.width(5) turtle.speed(1) for i in range(10): turtle.penup() turtle.goto(0, -i*10) turtle.pendown() turtle.color(my_colors[i%len(my_colors)]) turtle.circle(i*10) turtle.done()
import turtle t = turtle.Pen() t.width = 5 width = 30 num = 18 t.speed(0) x1 = [(-300,300),(-300+width*num,300)] y1 = [(-300,300),(-300,300-width*num)] #划横线时 |x.end - x.start|长度不变, y坐标变 for i in range(19): t.penup() t.goto(-300,300 - 30 * i) t.pendown() t.goto(240,300 - 30 * i) #划竖线时,x坐标变 |y.end - y.start长度不变 for i in range(19): t.penup() t.goto(-300 + 30 * i,300) t.pendown() t.goto(-300 + 30 * i,-240) t.hideturtle() turtle.done()
这篇关于python之选择、循环结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识