Ruby加密程序给了我混合的结果
我写这个程序是为了取一个名字,颠倒名字和姓氏,把字母移一个。当我运行它时,它运行得很好,只是在最后,它用每个其他名称的别名吐出每个名称。它们似乎是指数型的,如果我有三个别名,我会得到九个结果。请帮帮我。ruby新手Ruby加密程序给了我混合的结果,ruby,Ruby,我写这个程序是为了取一个名字,颠倒名字和姓氏,把字母移一个。当我运行它时,它运行得很好,只是在最后,它用每个其他名称的别名吐出每个名称。它们似乎是指数型的,如果我有三个别名,我会得到九个结果。请帮帮我。ruby新手 @aliases = [] @real = [] def alias_machine(name) @real << name name = name.downcase name_array = name.split(' ') first_name = name_arr
@aliases = []
@real = []
def alias_machine(name)
@real << name
name = name.downcase
name_array = name.split(' ')
first_name = name_array[1]
first_name_split = first_name.split('')
last_name = name_array[0]
new_namearray1 = first_name_split.map do |y|
vowels = ["a", "e", "i", "o", "u"]
if y == vowels[0]
y = "e"
elsif y == vowels[1]
y = "i"
elsif y == vowels[2]
y = "o"
elsif y == vowels[3]
y = "u"
elsif y == vowels[4]
y = "a"
elsif y.next == "aa"
y = "b"
elsif y.next == vowels[1]
y = y.next.next
elsif y.next == vowels[2]
y = y.next.next
elsif y.next == vowels[3]
y = y.next.next
elsif y.next == vowels[4]
y = y.next.next
else
y = y.next
end
end
last_name_split = last_name.split('')
new_namearray2 = last_name_split.map do |y|
vowels = ["a", "e", "i", "o", "u"]
if y == vowels[0]
y = "e"
elsif y == vowels[1]
y = "i"
elsif y == vowels[2]
y = "o"
elsif y == vowels[3]
y = "u"
elsif y == vowels[4]
y = "a"
elsif y.next == "aa"
y = "b"
elsif y.next == vowels[1]
y = y.next.next
elsif y == vowels[2]
y.next.next
elsif y.next == vowels[3]
y = y.next.next
elsif y.next == vowels[4]
y= y.next.next
else
y = y.next
end
end
new_namearray1 = new_namearray1.join('')
new_namearray1 = new_namearray1 + " "
new_namearray1 = new_namearray1.capitalize
new_namearray2 = new_namearray2.join
new_namearray2 = new_namearray2.capitalize
lastarray = []
lastarray[0] = new_namearray1
lastarray[1] = new_namearray2
lastarray = lastarray.join
@aliases << lastarray
end
loop do
p "Give us a name"
names = gets.chomp
if names == "Quit"
p "Thanks!"
@aliases.each do |aliases|
@real.each do |real|
p "#{aliases} is actually #{real}"
end
end
break
else
alias_machine(names)
end
end
@别名=[]
@实数=[]
def别名_机器(名称)
@real对于每个名称,将实名和别名附加到每个相应的变量。当程序退出时,您将迭代这两者的组合。这样就得到了指数结果
@aliases.each do |aliases|
@real.each do |real|
p "#{aliases} is actually #{real}"
end
end
您可能只需要一个带有数组的变量。可以使用以下命令存储该对:
@aliases << [name, lastarray]
非常感谢。我有点想它是在那里的最后,但不知道如何解决它!我很感激。是关键字,不能将其用作变量名。应使用替换字符,即first_name。tr('a-z','ecdfighjoklmnpuqrstvawxyzb')
@Stefantr
正是此处使用的工具。这段代码非常长,令人困惑,最终它所做的只是尝试并重新实现它。至少,不要使用长而杂乱的if
语句链,而是尝试使用哈希结构或查找表。您还应该记住,您经常可以将事物链接在一起,例如n2=n2.join.capitalize
或c=[a,b]。join
@aliases.each do |name, alias_name|
p "#{alias_name} is actually #{name}"
end