5_选择、循环

目录

选择

基本结构

三元运算符

循环的嵌套(通过空格表明运行顺序)

循环

while

for

基本结构

循环嵌套

break和continue

循环中的 else

循环的优化问题

zip的并行迭代

推导式创建序列


  • 选择

条件表达式值为 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]
[]
---------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值