文章目录
选择结构
条件表达式
- 条件表达式可以是算术表达式,逻辑表达式,关系表达式
- 选择和循环结构中,条件表达式为False的情况:
False,0,0.0,none,空序列对象(空列表,空元祖,空集合,空字典,空字符串等),空range对象,空迭代对象
- 不能出现赋值操作符
单分支结构
if 3<4<10:
print("a")
a=3<4<10
print(a)
print(type(a))
a
True
<class 'bool'>
双分支结构
s=input("请输入一个数字")
if int(s)<10:
print("s is smaller than 10")
else:
print("s is larger than 10")
三元条件运算符
num=input("请输入一个数字:")
print(num if int(num)<10 else "too large")
多分支结构
多个条件判断表达式
score=int(input("enter a number:"))
grade=""
if score<60:
grade="不及格"
elif score<80:
grade="great"
elif score<90:
grade="great"
else:
grade="excellent"
print("score is {0}, grade is {1}".format(score,grade)) #注意用的是花括号
选择结构嵌套
要控制好缩进量
score=int(input("enter a number between 0 and 100:"))
grade=""
if score>100 or score<0:
score = int(input("wrong! enter a number between 0 and 100:"))
else:
if score>=90:
grade="A"
elif score>=80:
grade="B"
elif score>=60:
grade="C"
else:
grade="D"
print("score is:{0},grade is {1}".format(score,grade))
循环结构
循环体里面的语句至少应包含改变条件表达式的语句,以使循环结束
while循环
#计算1到100累加和
i=0
sum=0
while i<=100:
sum=sum+i
i=i+1
print(sum)
for 循环
-
与可迭代对象结合使用
-
for 变量 in 可迭代对象:
循环体语句
-
range的用法:range(起始,终止,步长)包头不包围,是一个迭代器
for x in "abcdefg": #别忘了冒号
print(x)
for x in [1,2,3,4,"a"]:
print(x)
for x in {"name":"gaogao","age":18}: #默认是键
print(x)
for x in {"name":"gaogao","age":18}.keys():
print(x)
for x in {"name":"gaogao","age":18}.values():
print(x)
for x in range(1,10,2):
print(x)
#输出1到100的总和
sum_all=0
sum_even=0
sum_odd=0
for x in range(101):
sum_all+=x
if x%2 == 0:
sum_even+=x
else:
sum_odd+=x
print("总和为:{0},偶数和为:{1},奇数和为:{2}".format(sum_all,sum_even,sum_odd))
嵌套循环
for x in range(5):
for y in range(5):
print(x,end="\t") #每五个一行,用制表符隔开
print() #一行输出结束,换行输出下一行
练习
- 九九乘法表
for m in range(1,10):
for n in range(1,m+1): #乘法表不是全部填满
print("{0}*{1}={2}".format(n,m,n*m),end="\t")
print()
- 列表字典存储表格
r1=dict(name="gaogao",age=18,salary=34000,city="beijing")
r2=dict(name="lili",age=18,salary=33000,city="hunan")
r3=dict(name="wang",age=18,salary=35000,city="changsha")
tb=[r1,r2,r3]
for x in tb:
if x.get("salary")<34000:
print(x)
break语句
用于while或者for循环,用来结束整个循环
当循环嵌套,只跳出最近层循环
如果循环有else,也一起跳出
continue语句
用于结束本次循环,继续下一次循环
整体循环仍然在
#break
while True:
a=input("enter a character,enter q or Q to exit")
if a.upper()=="Q": #这个操作改变了a,返回改变后的a值
print("to the end! exit")
break
else:
print(a)
#continue结束本次循环
num=0
sum_salary=0
salary=[]
while True:
s=input("enter the salary,,q or Q to end")
if s.upper()=="Q": #s.upper()不要忘记括号!!!!!
print("end")
break
if float(s)<0:
continue
num+=1
sum_salary+=float(s)
salary.append(float(s))
print(num,salary,sum_salary/num)
else语句
循环语句后接else:执行完循环语句再执行else
若循环被break中断,else不被执行
sum=0
salary=[]
for i in range(4):
s=input("enter the salary,,q or Q to end")
if s.upper() == "Q": # s.upper()不要忘记括号!!!!!
print("end")
break
if float(s) < 0:
continue
num += 1
salary.append(float(s))
else:
print("the record is finished")
print(num,salary,sum_salary/num)
循环代码优化
遵循以下原则:
- 尽量减少循环内部不必要的计算
- 嵌套循环中,减少内层循环的计算,向外提
- 尽量使用局部变量,查询快
- 连接多个字符用join
- 列表进行插入删除尽量在表尾
zip并行迭代
对多个序列并行迭代
zip()函数在最短序列用完时停止
names=("gaogao","wang","lili") #用元组
ages=(12,16,18)
jobs=("a","b","c")
for name,age,job in zip(names,ages,jobs):
print("{0}-{1}-{2}".format(name,age,job))
names=["gaogao","wang","lili"] #用列表和元组的混合也可以
ages=[12,16,18]
jobs=("a","b","c")
for name,age,job in zip(names,ages,jobs):
print("{0}-{1}-{2}".format(name,age,job))
推导式创建序列
从一个或多个迭代式快速创建序列
可以用多个for
列表推导式
a=[x for x in range(5) if x%2]
print(a)
b=[(x,y) for x in range(5) for y in range(5)] #可以用多个for
print(b)
c=[x for x in "abcdef"]
print(c)
d=[x for x in [{"a":"b","c":"d",},{"a":"b","c":"d",},{"a":"b","c":"d",}]]
print(d)
字典推导式
a="i love you"
s={c:a.count(c) for c in a}
print(s)
集合推导式
a={x**2 for x in range(10) if x%2==0}
print(a)
生成器推导式
生成器是一个可迭代对象,可以用到循环中
生成器只能用一次
a=(x for x in range(10))
for x in a: #可迭代对象
print(x,end=",")
print(tuple(a))
print(tuple(a)) #生成器只能用一次,输出为空元组
练习
- 画同心圆
import turtle
my_color=("red","yellow","blue","green","black")
print(len(my_color))
t=turtle.Pen() #大写P
t.width(4) #调整画笔粗细
t.speed(0) #spped为0时速度最大
a=(x for x in range(5))
for x in a:
t.penup()
t.goto(0,-x*50)
t.pendown()
t.color(my_color[x%len(my_color)]) #用整除获得索引数
t.circle(x*50+50)