2013-03-02 79 views
1

我是編程新手,我試圖回答這個基本問題。基本Ruby gets.chomp

寫一個程序,詢問一個人的最愛號碼。讓你的程序添加一個數字,然後將結果建議爲一個更大更好的最喜歡的數字。

這是我到目前爲止,但它不會轉換爲數字。

puts "What is your favorite number?" 
    number = gets.chomp 
    number = number.to_i + 1 
    puts "I suggest " + number + " as a bigger and better number" 
+0

基本問題從哪裏來?這是家庭作業還是一個公益廣告或者你應該自己找出答案的答案? – 2013-03-02 03:23:36

+0

你的問題是什麼? – sawa 2013-03-02 07:44:05

回答

11

更仔細的錯誤你:

What is your favorite number? 
42 
number.rb:4:in `+': can't convert Fixnum into String (TypeError) 
    from number.rb:4:in `<main>' 

4號線:

puts "I suggest " + number + " as a bigger and better number" 

的問題是,紅寶石不會隱式轉換number成字符串(如"foo" + 42在Ruby中無效)。有一對夫婦的解決方案:對number

  1. 呼叫to_s將其轉換爲字符串串聯之前:

    puts "I suggest " + number.to_s + " as a bigger and better number" 
    
  2. 使用Ruby string interpolation

    puts "I suggest #{number} as a bigger and better number" 
    

選項2比較習慣,我建議使用它。

1

你可以這樣來做:

print 'What is your favorite number? ' 
number = gets.chomp 
puts "I suggest #{number.to_i + 1} as a bigger and better number" 

還有就是不要太多關於代碼的解釋,但有幾件事情要考慮:

  1. 如果你正在呈現平淡文字使用'text'而不是"text"。 「在雙引號的情況下,Ruby會做更多的工作,首先,它會查找替換(以反斜槓字符開頭的序列 ),並用一些二進制值替換它們」 - 編程ruby 1.9.3
  2. 總是嘗試減少代碼行數。

這裏的東西真的很微不足道,但是當你編寫一個大的程序,網頁等時,它確實有所作爲。

+2

爲了迴應#1 ......我已經看到了這麼多種語言,而且這些建議很愚蠢。算法考慮完全超過字符串插值對代碼的影響。閱讀Big O符號並使用分析器查找代碼中的真實瓶頸 - 字符串插值將永遠不會成爲問題,除非它處於數百萬次重複的循環中。 – DGM 2013-03-02 04:42:23

+1

+1 @DGM。我已經完成了基準測試,並且在沒有插值發生時,''test''和''test''之間幾乎沒有什麼區別。如果有,那麼這是一個可以接受的成本,並且隨着變量被插入到字符串中將以某種方式發生,然而它已經完成。 – 2013-03-02 05:06:34

4

正如在許多其他問題在Ruby中有很多的方法可以做到這一點....沒有上述所著的三種解決方案有兩個:

puts "What is your favorite number?" 
number = gets.chomp.to_i 
puts "I suggest %d as a bigger and better number" % [number + 1] 

和一個至極幾乎是一樣的:

puts "What is your favorite number?" 
number = gets.chomp.to_i 
num = number + 1 
puts "I suggest %d as a bigger and better number" % [num]