2013-02-11 3 views
-1

Salut, je suis en train d'écrire du code pour convertir les chaînes de porc latinRuby Pig Latin plusieurs arguments

def translate(str) 
    alpha = ('a'..'z').to_a 
    vowels = %w[a e i o u] 
    consonants = alpha - vowels 

    if vowels.include?(str[0]) 
    str + 'ay' 
    elsif str[0..1] == 'qu' 
    str[2..-1]+'quay' 
    elsif consonants.include?(str[0]) && str[1..2]=='qu' 
    str[3..-1]+str[0..2]+'ay' 
    elsif consonants.include?(str[0]) && consonants.include?(str[1]) && consonants.include?(str[2]) 
    str[3..-1] + str[0..2] + 'ay' 
elsif consonants.include?(str[0]) && consonants.include?(str[1]) 
    str[2..-1] + str[0..1] + 'ay' 
elsif consonants.include?(str[0]) 
    str[1..-1] + str[0] + 'ay' 
elsif str[0..1] == 'qu' 
str[2..-1]+'quay' 
else 

    return str 
    end 
end 

Ce code fonctionne parfaitement pour convertir une chaînes de mots, par exemple: traduire (« singe »). Ce que j'essaye de faire est de permettre à ce code d'accepter aussi plusieurs mots (dans la même chaîne) ... en suivant les critères ci-dessus pour convertir en latin, exemple: translate ("please help") => "easyplay elphay"

merci beaucoup!

Répondre

0

Puisque vous savez déjà comment traduire un mot pourquoi ne pas simplement diviser la tâche en deux méthodes:

def translate(str) 
    str.split.map { |word| translate_word(word) }.join 
end 

def translate_word(str) 
    # Your old translate code here 
end 
+0

awesome merci ... n'a pas examiné cela dans mon cours d'examen encore .... je vais regarder dans . à votre santé –

0

Ce que je ferais pour cela est:

utiliser la méthode #split à faites votre variable str dans un tableau de mots (ou 1 mot si c'est seulement 1 mot). Par la suite, vous pouvez utiliser le tableau # chaque méthode pour parcourir chaque index de tableau. -à-dire

str = "hello" 
str = str.split(" ") # str now equals ["hello"] 

pour plusieurs variables:

str = "hello world" 
str- str.split(" ") #now equals ["hello", "world"] 

vous pouvez utiliser la méthode .each:

str.each do |<variable name you want to use>| 
    <how you want to manipulate the array> 
    end 

pour le porc programme latin vous pouvez faire:

str.each do|element| 
    if vowels.include?(element) 
    <do whatever you want here> 
    elsif 
    <do whatever> 
    else 
    <do whatver> 
    end 
end 

ce sera itérer à travers chaque élément dans le tableau et le traduire (s'il n'y a qu'un seul élément, il fonctionnera encore)

Questions connexes