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?

2 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

1 Like

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

2 Likes

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!

1 Like

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.

1 Like

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!

5 Likes

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

2 Likes

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

3 Likes

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

2 Likes

Hello @array6593765464 :slight_smile:

I know this reply comes very late but it might be helpful for someone else.
You’re actually calling the .each method on words, which isn’t a part of the variables declared above.
Instead, you should declare a new variable called wordsand assign the value of the variable text, followed by calling the .split method to create an array of single words separated by space.
Finally you should call the.each method on the new variable words.

words = text.split(" ")
words.each do |word|
  if(word == redact)
    print "REDACTED "
  else
    print word + " "
  end
end
3 Likes

The code for this exercise seems to be broken. I’d guess it’s because of a Ruby update but not sure.

EDIT: The solution is working in Firefox. I was having these issues in Chrome

When running the solution code

puts "Enter some text: "
text = gets.chomp

puts "Enter words to redact: "
redact = gets.chomp

words = text.split(" ")
words.each { |word| 
  if word == redact
    print "REDACTED "
  else
 		print word + " "
  end }

the entered text prints before you are prompted for the word to redact. After entering the redacted word, nothing happens. Here is the console output:

image

(the grey text is the user input)

are you sure this end is in the right place? I’m using do instead of {} and I have to put two ends, one for the block and another one for the whole code. Shouldn’t the last } work as an end?

1 Like

Late reply, and you might’ve already figured it out, but using do-end does indeed work! If you’re code isn’t working, you might want to post it in a code block or with a screenshot.

Perhaps you forgot to include end for your if/else statement. There should be two ends in total.

Hi there! here I let the solution that worked for me

puts "Text to search through: "
text = gets.chomp

puts "Word to redact: "
redact = gets.chomp

words = text.split(’,’) <---------------------------------" , "

words.each do |x|
if x == redact
print “REDACTED”
else
print x + " "
end
end

Hey guys, My code gives me the correct output however it was not similar to the one in the solution:

puts “Enter the sentence”
text = gets.chomp

puts “What word would you like redacted?”
redact = gets.chomp

words = text.split (" ")

words.each do |word|

if word == redact
print "REDACTED "
else print word + " "
end

end

In the solution, they do not run the do loop
it goes as:

words.each do { |word|

if word == redact

print "REDACTED "

else

print word + " "

end }

Can someone tell me the difference between running the do and putting curly brackets here? Is that doing the same thing?

Thanks

SOLVED: replace with "REDEACTED " not “REDACTED”. :man_facepalming:
I’m getting the error 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!).

However, my code seems to be working perfectly. Not sure what’s wrong here

puts "Text to be censored: "
text = gets.chomp

puts "word to be redacted: "
redact = gets.chomp

words = text.split(" ")

words.each do |word|
  if word == redact
    print "REDACTED"
  else
    print "#{word} "
  end
end

Screenshot of console:
Screenshot 2021-02-12 at 15.45.20