流程控制

流程控制

python提供了分支结构和循环结构,if 分支机构,while、for-in循环,还有break和Contiue来控制循环结构

4.1 if 分支结构

s_age = input("请输入您的年龄:")
age = int(s_age)
if age > 20 :
    # 只有当age > 20时,下面用整体缩进的代码块才会执行
    # 整体缩进的语句是一个整体,要么一起执行,要么一起不执行
    print("年龄已经大于20岁了")
    print("20岁以上的人应该学会承担责任...")

运行结果:

请输入您的年龄:21
年龄已经大于20岁了
20岁以上的人应该学会承担责任...

4.1.1 if 条件的类型

# 定义空字符串
s = ""
if s :
    print('s不是空字符串')
else:
    print('s是空字符串')
# 定义空列表
my_list = []
if my_list:
    print('my_list不是空列表')
else:
    print('my_list是空列表')
# 定义空字典
my_dict = {}
if my_dict:
    print('my_dict不是空字典')
else:
    print('my_dict是空字典')

各种空类型python都会当做False处理

4.1.2 pass 语句

s = input("请输入一个整数: ")
s = int(s)
if s > 5:
    print("大于5")
elif s < 5:
    # 空语句,相当于占位符
    pass
else:
    print("等于5")

当程序暂时不想处理时,使用一个占位符pass 来占位

4.2循环结构

循环语句包括:初始化语句、循环条件、循环体、迭代语句

4.2.1 while 循环

# 循环的初始化条件
count_i = 0
# 当count_i小于10时,执行循环体
while count_i < 10 :
    print("count:", count_i)
    # 迭代语句
    count_i += 1
print("循环结束!")

# 下面是一个死循环
count_i2 = 0
while count_i2 < 10 :
    print("不停执行的死循环:", count_i2)
    count_i2 -=1
print("永远无法跳出的循环体")

4.2.2 使用while循环遍历列表和元组

a_tuple = ('fkit', 'crazyit', 'Charli')
i = 0
# 只有i小于len(a_list),继续执行循环体
while i < len(a_tuple):
    print(a_tuple[i]) # 根据i来访问元组的元素
    i += 1

运行结果

fkit
crazyit
Charli

小程序

src_list = [12, 45, 34,13, 100, 24, 56, 74, 109]
a_list = [] # 定义保存整除3的元素
b_list = [] # 定义保存除以3余1的元素
c_list = [] # 定义保存除以3余2的元素
# 只要src_list还有元素,继续执行循环体
while len(src_list) > 0:
    # 弹出src_list最后一个元素
    ele = src_list.pop()
    # 如果ele % 3等于0(能被3整除)
    if ele % 3 == 0 :
        a_list.append(ele) # 添加元素
    elif ele % 3 == 1:
        b_list.append(ele) # 添加元素
    else:
        c_list.append(ele) # 添加元素
print("整除3:", a_list)
print("除以3余1:",b_list)
print("除以3余2:",c_list)

4.2.3 for-in循环

用于遍历范围、列表、元素和字典等可迭代对象包含的元素

s_max = input("请输入您想计算的阶乘:")
mx = int(s_max)
result = 1
# 使用for-in循环遍历范围
for num in range(1, mx + 1):
    result *= num
print(result)

4.2.4 使用for-in循环遍历和元组

循环遍历元组

a_tuple = ('crazyit', 'fkit', 'Charlie')
for ele in a_tuple:
    print('当前元素是:', ele)

计算列表中所有数值元素的总和、平均值

src_list = [12, 45, 3.4, 13, 'a', 4, 56, 'crazyit', 109.5]
my_sum = 0
my_count = 0
for ele in src_list:
    # 如果该元素是整数或浮点数
    if isinstance(ele, int) or isinstance(ele, float):
        print(ele)
        # 累加该元素
        my_sum += ele
        # 数值元素的个数加1
        my_count += 1
print('总和:', my_sum)
print('平均数:', my_sum / my_count)

上面使用了isinstance()函数,判断某个变量是否为指定的类型

for-in也可以根据索引来遍历列表或元组

a_list = [330, 1.4, 50, 'fkit', -3.5]
# 遍历0到len(a_list)的范围
for i in range(0, len(a_list)) :
    # 根据索引访问列表元素
    print("第%d个元素是 %s" % (i , a_list[i]))

4.2.5使用for-in循环遍历字典

  • items():返回字典中所有key-value对的列表
  • keys(): 返回字典中所有key的列表
  • values(): 返回字典中所有的value的列表
my_dict = {'语文': 89, '数学': 92, '英语': 80}
# 通过items()方法遍历所有key-value对
# 由于items方法返回的列表元素是key-value对,因此要声明两个变量
for key, value in my_dict.items():
    print('key:', key)
    print('value:', value)
print('-------------')
# 通过keys()方法遍历所有key
for key in my_dict.keys():
    print('key:', key)
    # 在通过key获取value
    print('value:', my_dict[key])
print('-------------')
# 通过values()方法遍历所有value
for value in my_dict.values():
    print('value:', value)

统计列表中各元素的出现次数

src_list = [12, 45, 3.4, 12, 'fkit', 45, 3.4, 'fkit', 45, 3.4]
statistics = {}
for ele in src_list:
    # 如果字典中包含ele代表的key
    if ele in statistics:
        # 将ele元素代表出现次数加1
        statistics[ele] += 1
    # 如果字典中不包含ele代表的key,说明该元素还未出现国
    else:
        # 将ele元素代表出现次数设为1
        statistics[ele] = 1        
# 遍历dict,打印出各元素的出现次数
for ele, count in statistics.items():
    print("%s的出现次数为:%d" % (ele, count))

4.2.6 for表达式

for表达式用于利于其他区间、元组、列表等元素等可迭代对象创建新的列表。语法格式如下:

【表达式 for 循环计数器 in 可迭代对象】

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)
b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)
# 使用for表达式创建生成器
c_generator = (x * x for x in a_range if x % 2 == 0)
# 使用for循环迭代生成器
for i in c_generator:
    print(i, end='\t')
print()
d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)
dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))
print(dd_list)
            
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# 3_list列表包含120个元素
print(e_list)

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要y能整除x,就将它们配对在一起
result = [(x, y) for x in src_b for y in src_a if y % x == 0]
print(result)

4.2.7常用工具函数

使用zip函数可以把两个列表“压缩”成一个zip对象(可迭代对象),这样就可以使用一个循环并行遍历两个列表。

books = ['疯狂Kotlin讲义', '疯狂Swift讲义', '疯狂Python讲义']
prices = [79, 69, 89]
# 使用zip()函数压缩两个列表,从而实现并行遍历
for book, price in zip(books, prices):
    print("%s的价格是: %5.2f" % (book, price))

使用reversed()函数接收各种序列(元组、列表、区间等)参数,然后返回一个“反序排列”的迭代器

>>> a=range(10)
>>> [x for x in reversed(a)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

使用sorted()函数 接收一个可迭代对象作为参数,返回一个对元素排序的列表。

>>> a=[321,43,321,3,431,3214,54]
>>> sorted(a)
[3, 43, 54, 321, 321, 431, 3214]
>>> sorted(a,reverse=True)
[3214, 431, 321, 321, 54, 43, 3]
>>> b=['dsa','dafdg','gfdhadsa','gfdhgsa']
>>> sorted(b,key=len)
['dsa', 'dafdg', 'gfdhgsa', 'gfdhadsa']

4.3控制循环结构

python语言没有提供goto语句来控制程序的跳转,这样虽然提供了程序的可读性,但灵活性降低,python提供看continue和break来控制循环结构

4.3.1使用break结束循环

break用于完全结束一个循环,跳出循环体。

# 一个简单的for循环
for i in range(0, 10) :
    print("i的值是: ", i)
    if i == 2 :
        # 执行该语句时将结束循环
        break
# 一个简单的for循环
for i in range(0, 10) :
    print("i的值是: ", i)
    if i == 2 :
        # 执行该语句时将结束循环
        break
else:
    print('else块: ', i)
exit_flag = False
# 外层循环
for i in range(0, 5) :
    # 内层循环
    for j in range(0, 3 ) :
        print("i的值为: %d, j的值为: %d" % (i, j))
        if j == 1 :
            exit_flag = True
            # 跳出里层循环
            break
    # 如果exit_flag为True,跳出外层循环
    if exit_flag :
        break   

4.3.2使用continue忽略本次循环剩下的语句

continue的功能和break类似,continue只是忽略当次循环剩下的语句,接着开始下次循环,并不会终止循环

# 一个简单的for循环
for i in range(0, 3 ) :
    print("i的值是: ", i)
    if i == 1 :
        # 忽略本次循环的剩下语句
        continue
    print("continue后的输出语句")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值