FAQ: Redacted! - Control Flow Know-How

This community-built FAQ covers the “Control Flow Know-How” exercise from the lesson “Redacted!”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Learn Ruby

FAQs on the exercise Control Flow Know-How

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head here.

Looking for motivation to keep learning? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

Why does using do-end not work for this exercise? The solution uses both {} and end. Why?

3 Likes

I am confused about an error message I am receiving. Below is my code:

puts "Enter some text: "
text = gets.chomp
puts "Enter redacted word:"
redacted = gets.chomp
words = text.split(" ")
words.each do |word|
  if word == redacted
    print "REDACTED "
  else
    print word + " "
  end
end

and here is the output on the screen:

Enter some text: 
the quick brown fox jumps over the lazy dog
Enter redacted word:
the
REDACTED quick brown fox jumps over REDACTED lazy dog

and here is the error message I am getting:

Make sure to print each word from the user's text to the console unless that word is the word to be redacted; if it is, print REDACTED (all caps!).

What am I doing wrong?

Thanks

This seems to be a very counter-intuitive “bug” in the validator. I just noticed that it is explicitly looking for a variable called “redact”

my code is:

puts "Enter a string: "
text = gets.chomp
puts “Enter the redacted word: "
redacted = gets.chomp <-------- Notice how my variable is called “redacted”
words = text.split(” ")
words.each do |word|
if word == redacted
print "REDACTED "
else
print word + " "
end
end

once I changed the variable name to “redact” the validator passed my code. I believe it should not be like that, or at least instructions about the variable name should be present in the reading

From the lesson instructions:

Redacted!

Getting the User’s Input

First things first: we’ll need to get the user’s input.

Instructions

1.

Use puts to prompt the user for input two times. For the first puts , declare a variable called text and set it equal to the user’s input via gets.chomp .

For the second puts , declare a variable called redact and set it equal to the user’s input using gets.chomp .

Many of the lessons on Codecademy require specific items (variable names, syntax, formatting, etc.). Imagine if you were writing the SCT code, and had to account for every possible name or method a person could come up with. I’ll admit it can be annoying at times when we write code that works, but isn’t accepted because it isn’t exactly what the SCT is looking for, but that’s just part of it. One thing it accomplishes though, is teaching us to pay very close attention to detail. Happy Coding!

Thank you for your answer.

I would like to point out that these instructions, although they answer our questions and solve our doubts are not the ones for this assignment. The one you mentioned is the first one from this lesson. However, when it comes to the specific assignment there is no reminder of this detail.

This might be what cause the confusion.

What am I doing wrong?

Hi!

My code is partly working. Could someone please advice?

If repeated word is “i” it’s replaced by “REDACTED”

but if it’s another repeated word, like "dog"it doesn’t replace but skips to else.

Thank you!

like below

Thanks

Hello, @css0717777612! Welcome to the forum.
it appears that in your words = text.split("") line that you did not include a space between the double quotes like this " ". You want to split the user’s input into an array of words, so you want to split on the space between the words. The way you have it, you are splitting the user’s input into an array of single characters. 'Hello, World!' becomes ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

I would also suggest that in your words.each you consider changing |words| to |word| and also change the subsequent words to word like so:

words.each do |word|
  if word == redact
    print "REDACTED "
  else
    print word + " "
  end
end 

In my opinion this improves the readability and clarity of your code since we are examining one word at a time. Happy coding!

Thank you very much! Now, it’s working.

1 Like

A tip to save you time. I noticed that I was getting credit from CodeAcademy for my code (i.e. I was being told my code was correct) BUT my output was not working - it was not redacting the word I was telling it to redact. I realized the reason it wasn’t working is b/c I had a space after the redacted word I was typing in. In other words:
"Word to redact: tacos " --> does NOT work
“Word to redact: tacos” --> does work

**The space may have mattered in this situation because the word I was redacting was at the end of the sentence. Here is what was in my console:
Please enter text: melissa loves tacos
What text to redact: tacos -----------------> in this line, do not have a space after “tacos”
melissa loves REDACTED

Hi all,

I think i’ve got my code right but i keep getting the below message:
Make sure to print each word from the user’s text to the console unless that word is the word to be redacted; if it is, print REDACTED (all caps!).

I’ve posted a screenshot of my code below:
image
Can someone help? I’ve been stuck on this one for a while now and can’t work out what I’m doing wrong

Cheers