在使用 .next 方法制作凯撒密码时遇到问题
having trouble with .next method making a casear cipher
我不担心如果我的密钥现在通过 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)
您还没有使用密钥,所以它总是会执行 abc -> bcd。如果你真的不担心 "Z" 会变成 "AA",你可以试试这个:
def cipher(text, key)
text.chars.map { |c| (c.ord + key).chr }.join
end
由于'Z'.next => 'AA'
和'z'.next #=> 'aa'
,我们可以使用[-1]
到select最后一个字母。
在下面的代码中,我们使用 times
方法对每个字符执行 next!
次 n
次。 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/
我不担心如果我的密钥现在通过 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)
您还没有使用密钥,所以它总是会执行 abc -> bcd。如果你真的不担心 "Z" 会变成 "AA",你可以试试这个:
def cipher(text, key)
text.chars.map { |c| (c.ord + key).chr }.join
end
由于'Z'.next => 'AA'
和'z'.next #=> 'aa'
,我们可以使用[-1]
到select最后一个字母。
在下面的代码中,我们使用 times
方法对每个字符执行 next!
次 n
次。 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/