使用.next方法制作一个casear密码有问题

时间:2017-07-17 00:56:32

标签: ruby irb

我不担心如果我的钥匙现在通过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)

2 个答案:

答案 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/