我正在尝试从命令行执行此程序,而我无法使用gets.chomp
,而是返回键值。
我正在输入:ruby name_of_file.rb name_of_file.txt
def caesar_cipher(key)
s = gets.chomp
encoded = ""
s.each_byte do |l|
if ((l >= 65 && l <= 90) || (l >= 97 && l <= 122))
encoded += (l+key).chr
else
encoded += l.chr
end
end
encoded
end
File.readlines(ARGV[0]).map(&:to_i).each {|key| puts caesar_cipher(key)}
我知道程序没有完全执行caesar密码,我只想弄清楚如何从命令行运行它而不必使用pry或irb。
答案 0 :(得分:1)
您想手动输入密码?
使用STDIN.gets
答案 1 :(得分:1)
@vgoff有答案,但这是我如何重写代码以使其更具可读性:
def caesar_cipher(key)
encoded = ""
s = STDIN.gets.chomp
s.each_char do |l|
case l
when 'A' .. 'Z', 'a' .. 'z'
encoded += (l.ord + key).chr
else
encoded += l
end
end
encoded
end
# File.readlines(ARGV[0]).map(&:to_i).each {|key| puts caesar_cipher(key)}
puts caesar_cipher(0)
puts caesar_cipher(1)
我可能会使用each_char
来维护字符编码,而不是将字符拆分为字节。我使用case
语句让我使用两个范围来干净地定义大写和小写字符,并使用ord
来获取字符的实际序数值,而不是字节。< / p>
它更具可读性,但可能无法完全满足您的需求。