day10_loop

本文介绍了Python中的循环结构,包括while循环和for循环的使用,强调了range()函数在循环中的作用。同时,讲解了循环的中断控制,如break用于完全退出循环,continue用于跳过当前循环轮次。还提到了循环的嵌套以及break和continue在嵌套循环中的影响。最后,通过实例展示了如何使用这些控制结构来解决实际问题,如计算奇数和打印乘法口诀表。
摘要由CSDN通过智能技术生成

day10_loop

循环

用来处理一些重复的任务。

python提供两种循环方式:while/for

基本操作

while

condition = True
while condition:
    print("只要condition为真,就执行这里面的代码")
    condition = False

print("因为condition被赋值为false了,所以循环结束,执行外层代码")

while执行流程:

  1. 判断condition是否为true

  2. 如果为true,执行内部代码,否则不执行

  3. 当内部代码执行完成之后,再次运行执行 1,2的步骤,直到condition为False

while-else

while condition:
	print("如果condition为True,则执行这里的代码")
elseprint("如果condition为False,则执行这里的代码")

while-else有点类似高级的if-else结构

注意:else结构里的代码,只有当condition为False时,才会执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4UgHAgH-1631705893452)(./img/day10_while_else.png)]

如上图,因为循环是由break跳出的循环,condition的值不为false,所以并没有执行else语句块里的内容

可以看到,当condition==0时(隐式转换,0的boolean值为False),此时并没有再次进入循环体,而是跳入了else语句块中,然后才结束整个while-else块。

for

for i in range(10):
	print(i)
# 使用到了in关键字和range()函数

for循环被用于遍历序列(字符串,列表,字典,元组,集合等)

in 是用来比较包含关系的,a in b表示判断a是否在b当中,当b为字符串时,判断的是a是否是b的子集,当b为列表集合等时,判断的则是a是否为b的元素。

当这个结构用在for上面时,就起到了遍历序列的效果。

for 特例:遍历字典

字典存放的是键值对的数据,所以在使用for遍历时,需要特别注意自己取到的值

通过上面的代码,可以很清晰的看到,默认遍历的到的值是字典中key的值,但是可以通过字典的items方法,来获取字典的key值和value值,然后同时赋值给key和value变量,这样一次性就遍历出了字典的全部数据。

range()

target = 10
i = range(target)
print(i)

range()用来返回一个数字序列,默认从0开始,步长为1,最大值比target小1

高级用法:

range(start, stop, step)

中断

细心的朋友应该有看到,在while循环的时候又一个break。这个break的作用就是用来结束一层循环的。

在日常生活中我们会碰到两种情况:

  1. 正在看书,但是累了,所以停下来休息一会儿,然后接着看。
  2. 正在看书,但是到点吃饭了,所以就停止看书,去吃饭了。

循环里面也有类似的需求,所以就有了中断,在python里使用continue和break来应付着两种情况

# 计算 从0到10的奇数的和
count = 0
start = 1
while True:
    if start % 2 == 0:
        if start == 10:
            break
        start += 1
        continue
    
    count += start
    print("start is:",start)
    start += 1
print(count)

很明显,continue就是用来停止一轮循环的,当遇到continue之后,循环会立即停止这一轮循环,并重新开始。

break 是用来停止整个循环用的。

循环的嵌套

和if-else一样,循环也可以嵌套使用,这个并没有什么好说的,但是,有一点需要注意,那就是break和continue的作用域。

break和continue只用作用在对应的循环层

存在多层嵌套时,内部一层的循环中,出现了break或continue,此时break和continue只能影响内部层的循环。

在上面使用两层for嵌套来打印乘法口诀表。

在第二层的for循环中有break,但是并没有影响到第一层的for循环

ue,此时break和continue只能影响内部层的循环。

[外链图片转存中…(img-t7O0ArVa-1631705893464)]

在上面使用两层for嵌套来打印乘法口诀表。

在第二层的for循环中有break,但是并没有影响到第一层的for循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你的代码中只考虑了一个表中的连续天数,并且返回的值只是总的连续天数。如果你需要返回每个人的开始连续和结束时间以及每个人的连续天数,那么你需要对代码进行一些修改。以下是修改后的代码示例: ``` CREATE OR REPLACE TYPE continuous_days_type AS OBJECT ( person_id NUMBER, start_date DATE, end_date DATE, continuous_days NUMBER ); / CREATE OR REPLACE TYPE continuous_days_table_type AS TABLE OF continuous_days_type; / CREATE OR REPLACE FUNCTION check_continuous_days RETURN continuous_days_table_type IS date_array DBMS_UTILITY.uncl_array; person_id NUMBER; start_date DATE; end_date DATE; day_diff NUMBER; continuous_days NUMBER := 1; continuous_days_table continuous_days_table_type := continuous_days_table_type(); BEGIN -- 查询指定表中的日期数据,并按照人员和日期升序排序 SELECT person_id, cday BULK COLLECT INTO date_array FROM HR_ABSENCE ORDER BY person_id ASC, cday ASC; -- 按照人员和日期顺序比较相邻两个日期之间的天数差 FOR i IN 2..date_array.count LOOP IF date_array(i-1).person_id <> date_array(i).person_id THEN -- 如果遇到新的人员,将前一个人员的信息添加到返回结果中 continuous_days_table.extend; continuous_days_table(continuous_days_table.last) := continuous_days_type( person_id => person_id, start_date => start_date, end_date => end_date, continuous_days => continuous_days ); -- 重置连续天数和起始日期 continuous_days := 1; start_date := date_array(i).cday; ELSE -- 如果是同一个人员,比较相邻两个日期之间的天数差 day_diff := date_array(i).cday - date_array(i-1).cday; IF day_diff = 1 THEN continuous_days := continuous_days + 1; end_date := date_array(i).cday; ELSE -- 如果不连续,将前一个人员的信息添加到返回结果中 continuous_days_table.extend; continuous_days_table(continuous_days_table.last) := continuous_days_type( person_id => person_id, start_date => start_date, end_date => end_date, continuous_days => continuous_days ); -- 重置连续天数和起始日期 continuous_days := 1; start_date := date_array(i).cday; END IF; END IF; -- 记录当前人员编号 person_id := date_array(i).person_id; END LOOP; -- 添加最后一个人员的信息到返回结果中 continuous_days_table.extend; continuous_days_table(continuous_days_table.last) := continuous_days_type( person_id => person_id, start_date => start_date, end_date => end_date, continuous_days => continuous_days ); -- 返回结果 RETURN continuous_days_table; END; / ``` 这个函数返回一个自定义类型 `continuous_days_type` 的数组,每个元素表示一个人员的连续天数信息,包括人员编号、开始连续时间、结束连续时间和连续天数。你可以根据需要对返回结果进行展示或者其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值