循环

作者: 蝉时雨丶 | 来源:发表于2020-04-16 18:20 被阅读0次
python-logo.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子句就跳过。


PLSQL.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的下一次循环

相关文章

网友评论

      本文标题:循环

      本文链接:https://www.haomeiwen.com/subject/rgudvhtx.html