如何渲染到红宝石的初始阶段?

时间:2017-06-19 12:54:25

标签: ruby

puts "Enter the String for checking Character Length"

@character = gets.chomp

puts "Are you want to exclude spaces from the enterede string?(yes/no)"

@options = gets.chomp

if @options == "yes" or @options == "Yes"
    @character = @character.gsub(" ", "")
    puts "Are you want to change the case of a string?(upper/lower)"
    @case_choice = gets.chomp
  if @case_choice == "upper"
    @character = @character.upcase
    puts "@result ==== #{@character.inspect}"
        @character = @character.length
        puts "@character === #{@character.inspect}"
  elsif @case_choice == "lower"
    @character = @character.downcase
    puts "@result ==== #{@character.inspect}"
        @character = @character.length
        puts "@character === #{@character.inspect}"
  else
        puts "Please enter valid options"
  end
elsif @options == "no" or @options == "No"
    if @case_choice == "upper"
    @character = @character.upcase
    puts "@result ==== #{@character.inspect}"
        @character = @character.length
        puts "@character === #{@character.inspect}"
  elsif @case_choice == "lower"
    @character = @character.downcase
    puts "@result ==== #{@character.inspect}"
        @character = @character.length
        puts "@character === #{@character.inspect}"
  else
        puts "Please enter valid options"
  end
else
    puts "Please enter valid options"
end

如果用户输入了错误的选项,那么它将进入初始阶段。例如,如果用户输入' jhgh'而不是'是'意味着它应该进入初始阶段。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

使用while循环。像这样:

while !['yes', 'no'].include?(@options.downcase) do
  puts "Please enter valid options"
  @options = gets.chomp
end

if @options.downcase == 'yes'
  # ...
elsif @options.downcase == 'no'
  # You could also just write `else` here
  # Since we already know that this will always be true
  # ...
end

相同的模式可用于@case_choice输入。此外,无需重复此逻辑两次(在初始if语句的每个分支内);您只需将放在第一个if语句之后,以避免重复。

答案 1 :(得分:-1)

默想:

loop do

  puts 'Enter the string to check character length'
  characters = gets.chomp

  loop do
    puts 'Do you want to exclude spaces from the entered string? (y/n)'
    spaces_allowed = gets.chomp.downcase
    if spaces_allowed == 'y' || spaces_allowed == 'n'
      characters = characters.delete(' ') if spaces_allowed == 'n'
      break
    end
    puts 'Please enter valid spaces_allowed'
  end

  loop do
    puts 'Change the case of a string to upper or lower case? (u/l)'
    case_choice = gets.chomp.downcase

    if case_choice == 'u' || case_choice == 'l'
      characters = case case_choice
                  when 'u'
                    characters.upcase!
                  when 'l'
                    characters.downcase!
                  end
      break
    end
    puts 'Please enter valid case.'
  end

  puts "result: #{characters}"
  puts "characters: #{characters.length}"

  puts 'Run again? (y/n)'
  break if gets.chomp.downcase == 'n'
end

这更接近编写“Ruby方式”的代码。还有很多其他方法可以写出它的某些方面,但为了清晰和简单,我选择这样做。