![](https://img.haomeiwen.com/i10341196/d7ae4ad07dde0d78.png)
for循环
for循环是一个计次循环,通常适用于枚举或遍历序列,以及迭代对象中的元素。一般应用在循环次数已知的情况下。
语法如下:
for 迭代变量 in 对象:
循环体
1.进行数值循环
在使用for循环时,最基本的应用就是进行数值循环。
可以利用数值循环输出3遍"笑傲江湖",代码如下:
for i in [1,2,3]:
print('笑傲江湖')
运行结果如下:
笑傲江湖
笑傲江湖
笑傲江湖
利用数值循环输出列表的值,如输出["明白","科技","与您","同行"]中的值,代码如下:
for i in ["明白","科技","与您","同行"]:
print(i)
运行结果如下:
明白
科技
与您
同行
其中,迭代变量用于保存读取出的值;对象为要遍历的迭代的对象,该对象可以是任何有序的序列对象,如字符串、
列表和元组等;循环体为一组被重复执行的语句。
2.遍历字符串
使用for循环语句除了可以循环数值,还可以逐个遍历字符串。例如,下面的代码可以将横向显示的字符串转为纵向
显示:
for ch in string:
print(ch)
天
道
殷
勤
for循环和range()函数
tips:
"类真"和"类假"的值:
其他数据类型中的某些值,条件认为它们等价于True和False。在用于条件时,0、0.0和''(空字符串)
被认为是False,其他值被认为是True。例如:
name=''
while not name:
print('Enter your name:')
name=input()
print('How many guests will you have?')
numOfGuests=int(input())
if numOfGuests:
print('Be sure to have enough room ofr all your guests.')
print('Done')
讲解:如果用户输入一个空字符给name,那么while语句的条件就会是True,程序继续要求输入名字。
如果numOfGuests不是0,那么条件就被认为是True,程序就会为用户打印一条提醒信息。
可以用not name!=''代替not name,用numOfGuests!=0代替numOfGuests,但使用类真和类假的
值会让代码更容易阅读。
正文:
在代码中,for语句看起来像for i in range(5):这样,总是包含以下部分:
·for关键字;
·i一个变量名;
·in关键字;
·调用range()方法,最多传入3个参数;
·冒号;
·从下一行开始,缩进的代码块(称为for子句)。
例子:
print('My name is')
for i in range(5):
print('Jimmy Five Times (' + str(i)+ ')')
讲解:for循环子句中的代码运行了5次。第一次运行时,变量i被设为0.子句中的print()调用将打印出Jimmy Five Time(0)。
Python完成for循环子句内所有代码的一次迭代之后,执行将回到循环的顶部,for语句让i增加1。
也可以在循环中使用continue语句。continue语句将让for循环变量继续下一个值,就像程序已经到达程序的末尾并返回开始
一样。实际上,只能在while和for循环内部使用continue和break语句。如果试图在别处使用这些语句,Python将报错。
循环技巧
当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
当在序列中循环时,用 enumerate() 函数可以将索引位置和其对应的值同时取出
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe
当同时在两个或更多序列中循环时,可以用 zip() 函数将其内元素一一匹配。
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
... print('What is your {0}? It is {1}.'.format(q, a))
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
当逆向循环一个序列时,先正向定位序列,然后调用 reversed() 函数
>>> for i in reversed(range(1, 10, 2)):
... print(i)
...
9
7
5
3
1
如果要按某个指定顺序循环一个序列,可以用 sorted() 函数,它可以在不改动原序列的基础上
返回一个新的排好序的序列
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
... print(f)
...
apple
banana
orange
pear
有时可能会想在循环时修改列表内容,一般来说改为创建一个新列表是比较简单且安全的
>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
... if not math.isnan(value):
... filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]
while循环语句
语法:
while 条件表达式
循环体(被重复执行的语句)
只要while的条件为True,while子句中的代码就会执行。在代码中,while语句总是包含
下面部分:
·关键字;
·条件(求值为True或False的表达式);
·冒号;
·从新行开始,缩进的代码块(称为while子句)。
在while子句结束时,程序执行跳到while语句开始处。while子句常被称为"while循环",或就是
"循环"。
spam=0
while spam<5:
print('Hello,world.')
spam=spam+1
输出结果是输出"Hello,world."重复了5次!,打印5次停下来是因为,在每次循环迭代末尾,spam中的整数
都增加1。这意味着循环将执行5次,然后spam<5变为False。
在while循环中,条件总是在每次“迭代”开始时检查。如果条件为True,子句就会执行,然后,再次检查条件。
当条件第一次为False时,while子句就跳过。
![](https://img.haomeiwen.com/i10341196/901f5a1919d6e055.png)
for 循环
demo:
DECLARE
a number(30) := 0;
BEGIN
for i in 1 .. 10 loop
--INSERT INTO FW_TEST(NAME) VALUES('bbb' + i);
sys.dbms_output.put_line('bbb' || i);
end loop;
commit;
END;
说明:
DECLARE:
申明变量语句,变量名可以在BEGIN...END语块中使用。
BEGIN...END
语句块,相当于java中的{}.
for i in 1 .. 10 loop ... end loop
for循环语法,变量i,从1开始,直到10才遍历结束
倒序循环:
begin
for x in reverse 1..10 loop -- reverse大到小
DBMS_OUTPUT.PUT_LINE('内:x='||x);
end loop;
DBMS_OUTPUT.PUT_LINE('endget');
end;
或者:
[<<label_name>>]
FOR index_name IN
[ REVERSE ]
lower_bound .. upper_bound
LOOP
statement...
END LOOP [label_name];
【语法说明】
index_name:循环计数器,是一个变量,它可以得到当前的循环指数。需要注意的是,不能为其手工赋值。
REVERSE:可选项,指定循环方式。默认的循环方式由下标(lower_bound)到上标(upper_bound)。使用该选项则从上标界到下标界。
lower_bound:循环范围的下标界。
upper_bound:循环范围的上标界。
下标和上标之间的".."不能省略。
SQL> --for..loop
SQL> begin
for v_rlt in -3..3 loop
dbms_output.put_line('v_rlt = '||v_rlt);
end loop;
dbms_output.put_line('FOR循环已经结束!');
end;
/
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
FOR循环已经结束!
PL/SQL procedure successfully completed
loop循环
[<<label_name>>]
LOOP
statement...
END LOOP [label_name]
【语法说明】
<<label_name>>:LOOP结构的标签,是可选项。
LOOP:LOOP循环开始标志。
statement:LOOP语句中循环执行的语句序列。
END LOOP:LOOP循环结束标志,可以添加LOOP结构的标签。
1.基本的LOOP语句
实例:要求声明变量,每次循环都需要为变量增加数字1,并输出结果。当变量值大于3时,退出循环操作。
a、利用EXIT...WHEN结束循环操作。
SQL> set serveroutput on;
SQL> --exit when
SQL> declare
v_rlt number(8):=-3;
begin
<<fst_loop>>
loop
dbms_output.put_line('v_rlt = '||v_rlt);
v_rlt:=v_rlt+1;
exit fst_loop when v_rlt > 3;
end loop;
dbms_output.put_line('LOOP循环已经结束!');
end;
/
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
b、利用IF...EXIT语句结束循环
SQL> --if exit
SQL> declare
v_rlt number(8):=-3;
begin
<<fst_loop>>
loop
dbms_output.put_line('v_rlt = '||v_rlt);
v_rlt:=v_rlt+1;
if v_rlt > 3 then
dbms_output.put_line('变量的值已经大于3,当前值为'||v_rlt);
exit fst_loop;
end if;
end loop fst_loop;
dbms_output.put_line('LOOP循环已经结束!');
end;
/
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
变量的值已经大于3,当前值为4
LOOP循环已经结束!
PL/SQL procedure successfully completed
v_rlt = 3
LOOP循环已经结束!
PL/SQL procedure successfully completed
while循环
使用while ....loop ....end loop ;
Create Or Replace Procedure Count_Number Is
i Number(10);
t Number(10);
Begin
i := 1;
t := 0;
while i<=100 loop
t:=t+i;
i:=i+1;
Dbms_Output.Put_Line('it''s :' || t);
end loop;
---Dbms_Output.Put_Line('it''s :' || t);
End Count_Number;
或者:
[<<label_name>>]
WHILE boolean_expression
LOOP
statement...
END LOOP [label_name];
【语法说明】
boolean_expression:布尔表达式。
statement:语句序列,当boolean_expression为TRUE时,该语句序列可获得执行权。
SQL> --while...loop
SQL> declare
v_rlt number(8):=-3;
begin
<<while_loop>>
while(v_rlt < 4)
loop
dbms_output.put_line('v_rlt = '||v_rlt);
v_rlt:=v_rlt+1;
end loop while_loop;
dbms_output.put_line('WHILE循环已经结束!');
end;
/
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
WHILE循环已经结束!
PL/SQL procedure successfully completed
exit和break和continue之间的区别
begin
for my_cu in (select ename from emp where
deptno=10)loop
for my in (select ename,deptno from emp
where deptno=10) loop
dbms_output.put_line(my_cu.ename);
dbms_output.put_line(my.ename);
if my_cu.ename =’CLARK’ then
dbms_output.put_line(0);
–return;
– exit;
continue;
elsif my.ename =’KING’ then
dbms_output.put_line(1);
end if;
end loop;
dbms_output.put_line(2);
end loop;
dbms_output.put_line(3);
end;
第一种:使用return的时候,直接跳出存储过程或者函数
第二种:使用exit的时候,跳出本次循环转而执行本循环
的上一级循环的下一次循环。就次案列来说my_cu.ename=
‘CLARK’为真时,直接跳出my的循环转而取执行my_cu的下
一次循环
第三种:使用continue的时候,本次循环后面的代码部分不
执行,转而执行本循环的下一次循环。就此案列而言,
my_cu.ename=’CLARK’为真的时候,后面的代码不执行,继
续my的下一次循环
网友评论