2014-03-02 67 views
0

我目前跳到Ruby培訓,我有一些基本的Python知識,我希望可以幫助我,但我不清楚Ruby的'for'循環如何工作,我的感覺是,他們的工作方式與蟒蛇。Ruby的for循環如何工作(與Python相比)?

一個例子可能是以下Python代碼:

print('Interest Calculator: ') 
sumnum = eval(input('Enter your initial sum: ')) 
initnum = sumnum 
rate = eval(input('Enter your interest rate: ')) 
noy = eval(input('Enter the number of years to calculate  your interest for: ')) 
for i in range(noy): 
    sumnum = initnum * (1 + rate) 

print('The value of your initial investment of £%s' %initnum, 'over the course of', noy, 'years is £%s' %sumnum) 

將會產生如下(我把隨機號碼):

Interest Calculator: 
Enter your initial sum: 250 
Enter your interest rate: 3 
Enter the number of years to calculate your interest for: 7 
The value of your initial investment of £250 over the course of 7 years is £1000 

什麼將一個Ruby等價的for循環這裏是?

我試圖做到這一點,像這樣:

puts 'Interest Calculator: ' 
puts 'Enter your initial sum: ' 
sumnum = gets 
initsum = sumnum 
puts 'Enter your interest rate: ' 
rate = gets 
puts 'Enter number of years for your interest: ' 
noy = gets 
for i in noy do 
sumnum = initsum * (1 + rate) 
end 

puts "The value of your investment of £#{initsum} over the course of #{noy} years is £#{sumnum}" 

然而,這產生以下錯誤:

Interest Calculator: 
Enter your initial sum: 
250 
Enter your interest rate: 
3 
Enter number of years for your interest: 
7 
~/RubymineProjects/ExploreRuby/InterestRate.rb:9:in `<top (required)>': undefined method `each' for "7\n":String (NoMethodError) 
from -e:1:in `load' 
from -e:1:in `<main>' 

Process finished with exit code 1 

任何幫助深表感謝。

回答

2

變化:

for i in noy do 
sumnum = initsum * (1 + rate) 
end 

到:

noy.to_i.times do 
sumnum = initsum.to_i * (1 + rate) 
end 

,如果你堅持使用for環路,則:

for i in (1..noy.to_i) do 
    sumnum = initsum.to_i * (1 + rate) 
end 

for環路紅寶石是一個包裝周圍each所以你打算迭代的對象必須響應eachnoy在這種情況下是一個字符串的不是Enumerable對象

+1

+1良好的抓... –

0

在紅寶石使用「的」使用「各自」,這是更習慣的方法通常寫入。 如果您想了解更多關於'vs vs each'的信息,您可以登錄right here

的單行襯墊(消除「做」打開你的塊)可能是:

noy.to_i.times { sumnum = initsum.to_i * (1 + rate) } 
end 
+0

這是得心應手。謝謝! – CuriOne