目录
-
选择
条件表达式值为 False 的情况:False,0,0.0,空序列,空值None,空range对象,空迭代对象
基本结构
# 单分支
a = input("请输入您的年龄: ")
a = int(a) # input 接收的是字符串类型,需要转换数据类型
if a < 24:
print("年轻真好")
# 多分支
a = int(input("请输入您的考试成绩: "))
if a < 60:
print("不及格")
elif a < 80: # 这里不能用 if ,否则会出现 if-else 配对问题
print("及格")
else: # 这里 else 可以省略,如果省略,上面的 elif 可以用 if 代替
print("优秀")
多分支选择中,不能随意更改判断语句的顺序。例如上述的 elif ,具体指 60<=a<80,或者写完整
三元运算符
# 基本结构 a if 判断语句 else b
a = int(input("Please input your age: "))
print("young" if a < 30 else a)
# 等价于
if a < 30:
print("young")
else:
print(a)
循环的嵌套(通过空格表明运行顺序)
# 打分系统
a = int(input("请输入您的考试成绩: "))
grade = ""
if a < 0 or a > 100:
print("输入有误")
else:
if a > 90:
grade = "A"
elif a > 80:
grade = "B"
elif a > 70:
grade = "C"
elif a > 60:
grade = "D"
else:
grade = "E"
print("Your score is {0}, your grade is {1}".format(a, grade))
# 简单实现方式
a = int(input("请输入您的考试成绩: "))
num = 0
degree = "ABCDE"
if a < 0 or a > 100:
print("输入有误")
else:
num = a//10
if num < 6:
num = 5
print(degree[9-num])
-
循环
while
# 输出 1~10
num = 0
while num < 10:
num += 1
print(num)
for
基本结构
for 变量 in 可迭代对象:
循环语句
可迭代对象:字符串,列表,元组,字典,迭代器变量,生成器
# 字符串
for x in 'ABCDEF':
print(x, end="\t")
print()
# 列表
for x in [10, 20, 30]:
print(x*3, end="\t")
print()
# 元组
for x in (10, 20, 30):
print(x * 4, end="\t")
print()
# 字典
a = {"name" : 'd', "age" : 18, "job" : "student"}
for x in a:
print(x, end="\t")
print()
for x in a.keys():
print(x, end="\t")
print()
for x in a.values():
print(x, end="\t")
print()
for x in a.items():
print(x, end="\t")
print()
# range
sum_all = 0
sum_even = 0
sum_odd = 0
for x in range(101):
sum_all += x
if x % 2 == 0:
sum_even += x
if x % 2 == 1:
sum_odd += x
print("1到100的和是{0},奇数和是{1},偶数和是{2}".format(sum_all, sum_odd, sum_even))
循环嵌套
for x in range(5):
for y in range(5):
print(x, end="\t")
print() # 等价于 print("\n", end="")
---------------------------
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 x in range(1,10):
for y in range(1,x+1):
print("{0}*{1}={2}".format(x, y, x*y), end="\t")
print()
-------------------------------------
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
-------------------------------------
注意 for 和 while 的区别,for 已经自带了累加!!!
break和continue
break: 终止上一层的整个循环过程!!!(和 C 语言一致)
continue: 结束本次循环,开始下一轮循环!!!
循环中的 else
如果循环被 break 中断,则不执行 else!!!
如果循环正常结束,会执行 else 后面的语句!!!(很特殊,大多数语言中没有这个用法)
# example
for x in range(1, 4):
a = input("第" + str(x) +"天的收入:")
if int(a) <= 0:
break
else:
print("三天都没有亏钱!")
# else 执行
-----------------------
第1天的收入:7
第2天的收入:6
第3天的收入:8
三天都没有亏钱!
-----------------------
# else 未执行
-----------------------
第1天的收入:7
第2天的收入:4
第3天的收入:-3
-----------------------
循环的优化问题
1. 尽量减少循环内部的计算(能在循环外完成尽量放在循环外)!
2. 循环嵌套,尽量减少内层循环,尽量外提!
3. 尽量使用局部变量!
其他:
1. 连接多个字符串尽量使用 join() 而不是"+"
2. 对于列表的增加删除操作尽量在尾部!
zip的并行迭代
# zip() 在最短序列用完时停止
names = ["a", "b", "c"]
ages = [15, 25, 26]
cities = ["A", "B"]
for name, age, city in zip(names, ages, cities):
print("{0}--{1}--{2}".format(name, age, city))
# 最短序列是 cities 用完时停止
--------------------
a--15--A
b--25--B
--------------------
# 等价于下面的方法,只不过要注意 range() 括号内部的值得大小,避免超出序列长度
for i in range(2):
print("{0}--{1}--{2}".format(names[i], ages[i], cities[i]))
推导式创建序列
# 创建一个列表
>>> [x*2 for x in range(5)]
[0, 2, 4, 6, 8]
>>> [x*2 for x in range(1,10) if x%5 == 0]
[10]
>>> [(x, y) for x in range(1,5) for y in range(1,5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
# 注意括号!
# 推导式创建只能进行一个变量或一个整体的循环(暂时不知道为什么,鬼扯一哈,注意报错的那种写法)
# 以下两种都正确
>>> [[x, y] for x in range(1,5) for y in range(1,5)]
>>> [x+y for x in range(1,5) for y in range(1,5)]
# 报错
>>> [x,y for x in range(1,5) for y in range(1,5)]
# 字典推导式
# 判断一个字符串中某个字符出现的次数
a = 'i am a single dog, i like the single cat'
cnt = {x:a.count(x) for x in a}
print(cnt)
---------------------
{'i': 5, ' ': 9, 'a': 3, 'm': 1, 's': 2, 'n': 2, 'g': 3, 'l': 3, 'e': 4, 'd': 1, 'o': 1, ',': 1, 'k': 1, 't': 2, 'h': 1, 'c': 1}
---------------------
# 集合
>>> {x for x in range(1,100) if x%9 == 0}
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
# 生成器推导式(生成元组) 生成器只能使用一次
gnt = (x for x in range(4))
print(list(gnt))
print(list(gnt))
---------------------
[0, 1, 2, 3]
[]
---------------------