Bird
Raised Fist0
Rubyprogramming~20 mins

Predicate methods (ending with ?) in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Predicate Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby code using a predicate method?
Consider the following Ruby code snippet. What will it print?
Ruby
def even_or_odd?(num)
  num.even?
end

puts even_or_odd?(7)
A7
Btrue
Cfalse
Dnil
Attempts:
2 left
💡 Hint
Remember, the method checks if the number is even.
❓ Predict Output
intermediate
2:00remaining
What does this predicate method return?
What will be the output of this Ruby code?
Ruby
class String
  def has_vowels?
    !!(self =~ /[aeiou]/i)
  end
end

puts "sky".has_vowels?
Atrue
Bfalse
Cnil
D0
Attempts:
2 left
💡 Hint
Check if the string contains any vowels.
🔧 Debug
advanced
2:00remaining
Why does this predicate method raise an error?
This Ruby code raises an error. What is the cause?
Ruby
def positive?(num)
  num > 0 ? true : false
end

puts positive?(nil)
ANoMethodError because nil can't be compared with >
BSyntaxError due to missing colon in ternary
CReturns false because nil is not positive
DReturns true because nil is treated as zero
Attempts:
2 left
💡 Hint
Think about what happens when you compare nil with a number.
🧠 Conceptual
advanced
1:30remaining
What is the purpose of predicate methods ending with '?' in Ruby?
Why do Ruby methods often end with a question mark '?'? Choose the best explanation.
AThey indicate the method modifies the object
BThey are used only for methods that ask user input
CThey are private methods by convention
DThey always return a boolean value indicating true or false
Attempts:
2 left
💡 Hint
Think about what the '?' symbol suggests in English.
❓ Predict Output
expert
2:30remaining
What is the output of this complex predicate method?
Analyze the code and determine what it prints.
Ruby
class Array
  def all_even?
    all?(&:even?)
  end
end

arr = [2, 4, 6, 7]
puts arr.all_even?
Afalse
BNoMethodError
Cnil
Dtrue
Attempts:
2 left
💡 Hint
Check if every element in the array is even.

Practice

(1/5)
1. What does a predicate method in Ruby always return?
easy
A. A string value
B. A boolean value (true or false)
C. An integer value
D. An array

Solution

  1. Step 1: Understand predicate method purpose

    Predicate methods in Ruby are designed to answer yes/no questions about an object or data.
  2. Step 2: Identify return type of predicate methods

    They always return true or false, which are boolean values.
  3. Final Answer:

    A boolean value (true or false) -> Option B
  4. Quick Check:

    Predicate methods return true/false [OK]
Hint: Predicate methods always answer yes/no questions [OK]
Common Mistakes:
  • Thinking predicate methods return strings or numbers
  • Confusing predicate methods with regular methods
  • Ignoring the question mark at the end
2. Which of the following is the correct way to define a predicate method in Ruby?
easy
A. def valid?; true; end
B. def valid; true; end
C. def valid!; true; end
D. def valid: true; end

Solution

  1. Step 1: Recognize predicate method naming

    Predicate methods must end with a question mark (?).
  2. Step 2: Check method syntax

    def valid?; true; end defines a method named valid? correctly with def and end keywords.
  3. Final Answer:

    def valid?; true; end -> Option A
  4. Quick Check:

    Method name ends with ? and syntax is correct [OK]
Hint: Predicate methods end with ? and use def ... end [OK]
Common Mistakes:
  • Omitting the question mark in method name
  • Using invalid method name characters like ! or :
  • Incorrect method definition syntax
3. What will be the output of this Ruby code?
def empty_string?(str)
  str.empty?
end

puts empty_string?("")
puts empty_string?("hello")
medium
A. false\ntrue
B. true\ntrue
C. true\nfalse
D. false\nfalse

Solution

  1. Step 1: Understand the method behavior

    The method empty_string? calls str.empty? which returns true if str is an empty string.
  2. Step 2: Evaluate the calls

    empty_string?("") returns true because "" is empty; empty_string?("hello") returns false because "hello" is not empty.
  3. Final Answer:

    true\nfalse -> Option C
  4. Quick Check:

    Empty string check returns true, non-empty returns false [OK]
Hint: empty? returns true only for empty strings [OK]
Common Mistakes:
  • Assuming non-empty strings return true
  • Confusing empty? with nil? method
  • Ignoring the question mark in method names
4. Identify the error in this Ruby code:
def positive?(num)
  if num > 0
    true
  else
    false
  end
end

puts positive?("5")
medium
A. ArgumentError because "5" is a string, not a number
B. SyntaxError due to missing end
C. No error, outputs true
D. Returns nil instead of true/false

Solution

  1. Step 1: Analyze method input and comparison

    The method compares num > 0, but "5" is a string, not a number.
  2. Step 2: Understand Ruby type comparison

    Comparing string "5" with integer 0 causes an ArgumentError at runtime.
  3. Final Answer:

    ArgumentError because "5" is a string, not a number -> Option A
  4. Quick Check:

    Comparing string and integer causes ArgumentError [OK]
Hint: Check input types before numeric comparisons [OK]
Common Mistakes:
  • Passing strings instead of numbers
  • Assuming no error on mixed type comparisons
  • Missing end keyword (not the case here)
5. You want to create a predicate method valid_name? that returns true only if a string is not empty and contains only letters. Which implementation is correct?
hard
A. def valid_name?(name) name.nil? && name.match?(/[a-z]/) end
B. def valid_name?(name) name.empty? || name.match?(/\d+/) end
C. def valid_name?(name) name.length > 0 && name.include?(' ') end
D. def valid_name?(name) !name.empty? && name.match?(/^[a-zA-Z]+$/) end

Solution

  1. Step 1: Understand the requirements

    The method must return true only if the string is not empty and contains only letters.
  2. Step 2: Evaluate each option

    def valid_name?(name) !name.empty? && name.match?(/^[a-zA-Z]+$/) end checks that name is not empty and matches only letters using regex /^[a-zA-Z]+$/. This meets the requirements.
  3. Final Answer:

    def valid_name?(name) !name.empty? && name.match?(/^[a-zA-Z]+$/) end -> Option D
  4. Quick Check:

    Not empty and only letters = valid_name? true [OK]
Hint: Use regex and empty? to validate strings in predicates [OK]
Common Mistakes:
  • Using || instead of && for conditions
  • Checking for digits instead of letters
  • Ignoring empty string check
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard