2016-05-25 73 views
-2

我知道這似乎很個人,但我有一個關於修改用戶輸入的問題。如何修改Ruby中過多的用戶輸入?

所以我想創建這個「代碼語言」的解碼器,但一些修正部分沒有正確糾正。我想這可能是因爲gsubs太多了。

例如我有什麼

puts "Hello world:" 
user_input = gets.chomp 
user_input.downcase! 

if 
user_input.include? "a" 
    user_input.gsub!(/a/, "b") 

user_input.include? "b" 
    user_input.gsub!(/b/, "c") 

user_input.include? "c" 
    user_input.gsub!(/c/, "d") 

user_input.include? "d" 
    user_input.gsub!(/d/, "e") 

user_input.include? "e" 
    user_input.gsub!(/e/, "f") 

user_input.include? "f" 
    user_input.gsub!(/f/, "g") 

user_input.include? "g" 
    user_input.gsub!(/g/, "h") 

user_input.include? "h" 
    user_input.gsub!(/h/, "i") 

user_input.include? "i" 
    user_input.gsub!(/i/, "j") 

user_input.include? "j" 
    user_input.gsub!(/j/, "k") 

user_input.include? "k" 
    user_input.gsub!(/k/, "l") 

user_input.include? "l" 
    user_input.gsub!(/l/, "m") 

user_input.include? "m" 
    user_input.gsub!(/m/, "n") 

user_input.include? "n" 
    user_input.gsub!(/n/, "o") 

user_input.include? "o" 
    user_input.gsub!(/o/, "p") 

user_input.include? "p" 
    user_input.gsub!(/p/, "q") 

user_input.include? "q" 
    user_input.gsub!(/q/, "r") 

user_input.include? "r" 
    user_input.gsub!(/r/, "s") 

user_input.include? "s" 
    user_input.gsub!(/s/, "t") 

user_input.include? "t" 
    user_input.gsub!(/t/, "u") 

user_input.include? "u" 
    user_input.gsub!(/u/, "v") 

user_input.include? "v" 
    user_input.gsub!(/v/, "w") 

user_input.include? "w" 
    user_input.gsub!(/w/, "x") 

user_input.include? "x" 
    user_input.gsub!(/x/, "y") 

user_input.include? "y" 
    user_input.gsub!(/y/, "z") 

user_input.include? "z" 
    user_input.gsub!(/z/, "a") 

end 
puts "#{user_input}" 

感謝您的幫助!

+0

你期望看到什麼?我們可以告訴你它在做什麼,但是你必須告訴它應該做什麼。 –

+0

@MichaelGaskill嗯,我需要這樣做,因爲我之前說過,我想創建一個「翻譯器」式的代碼,所以我希望它能夠改變我寫入代碼/語言 – AppleiPad556

+1

你說過了是不正確的,但是沒有人能說出什麼是不正確的。目前,它轉化爲某種東西,但不是你期望的東西。你期望什麼*精確*請爲這些輸入提供一些示例輸入和預期輸出。請解釋算法應該如何工作,例如,爲什麼要將'e'轉換爲'f'? –

回答

1

這裏有幾個問題。

首先,if紅寶石中的陳述並不像您認爲的那樣運行。您可以將條件放在關鍵字if後面的行上(儘管它不是真的推薦),但是在此之後,語句的「主體」(只有在條件爲真時才執行的部分)繼續,直到您到達end關鍵字。縮進意味着什麼。所以只要輸入包含a,所有gsub!行都將運行。如果它不包含a,則除puts之外的任何內容都不會運行。

其次,gsub!修改接收器。假設用戶的輸入是abcabc。第一個gsub!呼叫用b s代替a s,因此之後user_inputbbcbbc。第二個gsub!呼叫用c s代替所有b s,包括曾經是a s的那些,因此之後user_inputcccccc。在程序結束時,字符串中的每個字母都被更改爲z,然後最後所有字母都變回a。唯一會留下的是非字母字符,如空格,標點符號,數字等。

(第三,在運行gsub!之前,您並不需要檢查字符串是否包含特定字母。 user_input不包含b,比方說,那麼user_input.gsub!(/b/,'c')就是不會做任何事情。)

+0

感謝您的建議! 你有什麼想法如何真正使它的工作? – AppleiPad556

+0

*真*取決於你想要做什麼。如果,正如我懷疑的那樣,你只是試圖將輸入中的所有字符移動1個字母(基本Ceasar轉換),這可以在[tr'方法](http:// stackoverflow.com/questions/26749065/what-is-the-difference-between-tr-and-gsub)。不過,我建議你還要學習一些關於Ruby代碼的基本結構,使用這些資源:[link](https://www.codecademy.com/learn/ruby)[另一個鏈接](http: //learnrubythehardway.org/book/) – philomory

+0

使用你提供的關於tr命令的鏈接,我設法做到了,並且簡化了它,只需在一組中合併字母即可。謝謝你的包! – AppleiPad556

相關問題