我正在尝试向用户询问名称,以便我们可以创建假名。
假名将:
交换名字和姓氏
将所有元音(a,e,i,o,u)更改为下一个元音,所以' a'会成为' u' u'会成为'
将所有辅音(除了元音之外)改为字母表中的下一个辅音,所以' d'会成为' f'' n'会成为'
我无法在程序结束时获得大写的名字和姓氏。关于如何做到这一点的任何建议?
我也在尝试使用数据结构来存储输入的假名称。当用户退出程序时,遍历数据结构并打印用户输入的所有数据。像Vussit Gimodoe这样的句子实际上是Felicia Torres"或者" Felicia Torres也被称为Vussit Gimodoe
# ---- Swap First and Last Name ----
def name_swap(name)
name.split.reverse.join(' ')
end
# ---- Change all the vowels ----
def vowel_change(name)
vowels = ['a', 'e', 'i', 'o', 'u']
name = name.downcase.split('')
new_name = name.map do |vow|
if vowels.include?(vow)
vowels.rotate(1)[vowels.index(vow)]
elsif vowels == 'u'
vowels.replace('a')
else
vow
end
end
new_name.join
end
# ---- Change the constant ----
def constant_change(name)
constants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']
name = name.downcase.split('')
new_name = name.map do |letter|
if constants.include?(letter)
constants.rotate(1)[constants.index(letter)]
elsif constants == 'z'
constants.replace('b')
else
letter
end
end
new_name.join.capitalize!
end
# ---- User Interface and Data Storage----
valid_input = false
agents ={}
user_input = ""
secret_name = ""
until valid_input
puts "Hello Secret Agent, to begin please enter the name you would like to change. When you are finished, type 'quit' !"
user_input = gets.chomp.downcase
if user_input == "quit"
puts "Thank You!"
valid_input = true
else
secret_name = name_swap(vowel_change(constant_change(user_input)))
puts "Your secret name is #{secret_name} "
end
agents[user_input] = secret_name
end
agents.each do |name, scramble|
puts"#{name} is also known #{scramble}"
end
问题是当我返回最终的代理名称时,名称是小写的,我需要大写的名字和姓氏。它还退出以退出直接循环作为名称。
答案 0 :(得分:2)
看看这个:https://ruby-doc.org/core-2.2.0/String.html#method-i-capitalize-21
您可以在打印秘密名称之前执行此操作:
output = output.split.each { |name| name.capitalize! }.join(' ')
和原始名称相同:
original_name = original_name.split.each { |name| name.capitalize! }.join(' ')
Ruby docs的例子:
a = "hello"
a.capitalize! #=> "Hello"
a #=> "Hello"
a.capitalize! #=> nil
或者使用Rails'如果您使用Rails,则为titleize
方法。
答案 1 :(得分:0)
在rails中,您有一个名为titleize
说,试一试
output = name_swap(vowel_change(constant_change(original_name))).titleize
original_name = original_name.titleize