我有这个代码:
def encrypt(x)
index = 0
alphabet = "abcdefghijklmnopqrstuvwxyz"
while index < x.length
letter = x[index]
if letter == ' '
print ' '
index += 1
elsif letter == "z"
print "a"
index += 1
else
letter = alphabet[letter].next!
index += 1
print letter
end
end
end
def decrypt(x)
number = 0
alphabet = "abcdefghijklmnopqrstuvwxyz"
while number < x.length
green = x[number]
if green == ' '
print ' '
number += 1
else
red = alphabet.index(green)
red = red.to_i
blue = red - 1
yellow = alphabet[blue]
print yellow
number += 1
end
end
end
如果我添加一个大写字母,例如:
encrypt("Dhd d hd h")
它返回:
undefined method `next!' for nil:NilClass
(repl):13:in `encrypt'
(repl):39:in `initialize'
或者如果我尝试使用两种方法:
encrypt(decrypt("Dhddhdh"))
它返回
undefined method `length' for nil:NilClass
(repl):4:in `encrypt'
(repl):39:in `initialize'
我认为这是由于论点中有空格,并为此添加了if
/else
,但运气不佳。有人能给我指正确的方向吗?
在这两种情况下,您的字母白都应该包括小写和下大写字符:
alphabet="abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
代码的另一个问题是,我建议您返回一个值:
def encrypt(x)
index = 0
encrypted = ""
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
while index < x.length
letter = x[index]
if letter == ' '
encrypted << ' '
elsif letter == "z"
encrypted << "a"
elsif letter == "Z"
encrypted << "A"
else
letter = alphabet[letter].next!
encrypted << letter
end
index += 1
end
encrypted
end
解密方法:
def decrypt(x)
index = 0
decrypted = ""
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
while index < x.length
letter = x[index]
if letter == ' '
decrypted << ' '
elsif letter == "A"
decrypted << "Z"
else
blue = alphabet.index(letter) - 1
decrypted << alphabet[blue]
end
index += 1
end
decrypted
end