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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章