3.10 循环语句

一. while(当…) 循环
while 条件
 语句1; 语句2 ; 语句…
end

二. 单行 while 循环
  ( 语句1; 语句2 ; 语句… )   while   条件

三. until(直到…)  循环
我们想输出数字1到9,看程序 E3.10-1.rb,E3.10-2.rb :

a=1
 while a <10
 print a," "
 a=a+1
end
  # => 1 2 3 4 5 6 7 8 9
 
a=1
 until a >=10
 print a," "
 a=a+1
end
  # => 1 2 3 4 5 6 7 8 9
 

一边是while  a <10,一边是until  a >=10,其它代码都一样,结果也一样。从这两个小程序可以看出:  until  条件  =  while  not (条件) 

四. for…in 循环
for  变量   in   对象
    语句1; 语句2 ; 语句…
end
对象可以是数组,区间,集合…, 看程序 E3.10-3.rb:

ruby 代码 
  1. #  E3.10-3.rb   
  2. for  i  in  1..9   
  3.   print  i," "             # => 1 2 3 4 5 6 7 8 9   
  4. end  
  5.     

 

 

五.break , next  &  redo  &  retry
在循环体内,如果遇到:
break ,跳出当层循环;
next ,忽略本次循环的剩余部分,开始下一次的循环;
redo ,重新开始循环,还是从这一次开始;
retry ,重头开始这个循环体。
1).看程序 E3.10-5.rb 。

ruby 代码 
  1. puts "演示break"  
  2. c='a'   
  3.   for i in 1..4   
  4.     if i == 2 and c =='a'   
  5.       c = 'b'   
  6.       print "\n"  
  7.       break  
  8.     end  
  9.     print i,c," "  
  10.   end  
  11.  puts "\n\n"  

 #=>演示break
      1a

变量 c 在循环体之前赋值为 'a' ,程序执行了 2 次,遇到 break ,退出了本层循环,不再执行第 2 次的print i,c," "。

 

2).看程序 E3.10-5.rb 。

ruby 代码 
  1. puts "演示next"    
  2. c='a'   
  3.   for i in 1..4       
  4.     if i == 2 and c =='a'   
  5.       c = 'b'   
  6.       print "\n"  
  7.       next  
  8.     end  
  9.     print i,c," "  
  10.   end  
  11.   puts "\n\n"  

 #=>演示next
  1a
  3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 next ,退出了本次循环,不再执行第 2 次的print i,c," ",开始第 3 次循环,此时,c = 'b',i = 3。

 

3).看程序 E3.10-5.rb 。

ruby 代码 
  1. puts "演示redo"    
  2. c='a'   
  3.   for i in 1..4       
  4.     if i == 2 and c =='a'   
  5.       c = 'b'   
  6.       print "\n"  
  7.       redo  
  8.     end  
  9.     print i,c," "  
  10.   end  
  11.   puts "\n\n"  

 #=>演示redo
  1a
  2b 3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 redo ,重新开始循环,还是从这一次开始 ,此时,c = 'b',i = 2。

 

4).看程序 E3.10-5.rb 。

ruby 代码
  1. puts "演示retry"  
  2. c='a'   
  3.   for i in 1..4       
  4.     if i == 2 and c =='a'   
  5.       c = 'b'   
  6.       print "\n"  
  7.       retry  
  8.     end  
  9.     print i,c," "  
  10.   end  
  11.  puts "\n\n"  

#=>演示retry
  1a
  1b 2b 3b 4b
变量 c 在循环体之前赋值为 'a' ,程序执行到第 2 次,c 又赋值为 'b',遇到 retry ,重头开始这个循环体 ,此时,c = 'b',i = 1。


六. 求50以内的素数。

ruby 代码
  1. #  E3.10-4.rb         求50以内的素数                    
  2. for  i  in  2..50      #50以内                           
  3.   f=true             #起始假定每个数都是素数            
  4.   for  p  in  2...i    #比自身小的正整数(1和自身除外)   
  5.     if  i%p==0      #如果能整除                        
  6.       f=!f           #那么这个数不是素数                
  7.       break          #并且跳出这层循环                  
  8.     end              # if 结束                           
  9.   end                #内层循环结束                      
  10.   print  i," "  if  f    #如果这个数保持起始假定,则打印    
  11. end                  #外层循环结束     

 # => 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
E3.10-6.rb 这个小程序不是最优化的,你可以复制到自己的编辑器内,试着反复重构优化。

 

完整阅读,请看我写的 Ruby语言中文教程all in one    
 

发布了0 篇原创文章 · 获赞 0 · 访问量 580
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章