我不担心如果我的钥匙现在通过Z或大写字母会发生什么。我想要的只是我的结果。 text = abc key = 2并打印" cde"。我哪里错了?
puts "What would you like to cipher?"
text = gets.chomp
puts " what number key would you like?"
key = gets.chomp.to_i
def casear_cipher(text,key)
ciphered_text = []
text.chars.each do |letter|
ciphered_text = letter
ciphered_text = ciphered_text.next
end
end
puts casear_cipher(text,key)
答案 0 :(得分:1)
你还没有使用密钥,所以它总是只做abc - > BCD。如果你真的不担心“Z”会转到“AA”,你可以试试这个:
def cipher(text, key)
text.chars.map { |c| (c.ord + key).chr }.join
end
答案 1 :(得分:1)
自'Z'.next => 'AA'
和'z'.next #=> 'aa'
以来,我们可以使用[-1]
来选择最后一个字母。
在下面的代码中,我们使用next!
方法对每个字符n
次执行times
次。 next!
修改字符,而next
则不修改字符。
def casear_cipher(text, n)
text.chars.map do |c| n.times { c.next! }
c[-1]
end.join
end
p casear_cipher('abc',2) #=> "cde"
p casear_cipher('xyz',2) #=> "zab"
p casear_cipher('ZEBRA',2) #=> "BGDTC"
有关这些方法的更多信息,请访问http://www.ruby-doc.org/core-2.4.1/