【问题标题】:Converting a given number to a word using array使用数组将给定数字转换为单词
【发布时间】:2016-03-24 15:15:06
【问题描述】:

我正在尝试为经典的瓶装啤酒输出创建一种方法。

给定一个数字@beers,我想将其转换为数字的单词版本。我想将数字拆分为一个数组,然后将数字列表与单词进行比较:

class BeerSong

  attr_accessor :beers

  def initialize(beers)

    if beers > 99
      beers = 99
    elsif beers < 1
      beers = "Zero"
    end
    @beers = beers
  end


  def worded
    num_name = {      
      90 => "Ninety", 80 => "Eighty", 70 => "Seventy",60 => "Sixty",
      50 => "Fifty",40 => "Forty",30 => "Thirty",20 => "Twenty",
      19 => "Nineteen", 18 => "Eighteen",  17 => "Seventeen", 16 => "Sixteen",
      15 => "Fifteen",14 => "Fourteen", 13 =>"Thirteen",  12 => "Twelve",
      11 => "Eleven", 10 => "Ten",  9 => "Nine",8 => "Eight", 7 => "Seven",
      6 => "Six",5 => "Five",4 => "Four",3 => "Three",2 => "Two",1 => "One"
    }


    worded = ""

    beers = @beers

    split_beers = beers.to_s.split

    num_name.each do |number, name|
      split_number = number.to_s.split
      if beers == number
        worded << name
      else
        number > 19 && split_number[0].to_i == split_beers[0].to_i
        worded << name
        worded << "-"
      end
    end

    num_name.each do |number, name|
      if number < 10 && split_beers[1].to_i == number
        worded << name
      end
    end

    worded

  end

  def print_song

    while @beers.to_i > 2

      puts "#{worded} bottles of beer on the wall,"
      puts "#{worded} bottles of beer,"
      puts "Take one down, pass it around,"
      @beers -= 1
      puts "#{worded} bottles of beer on the wall.\n\n"
    end

    if @beers.to_i == 2
      puts "#{worded} bottles of beer on the wall,"
      puts "#{worded} bottles of beer,"
      puts "Take one down, pass it around,"
      @beers -= 1
      puts "#{worded} bottle of beer on the wall.\n\n"
    end

    if @beers.to_i == 1
      puts "#{worded} bottle of beer on the wall,"
      puts "#{worded} bottle of beer,"
      puts "Take one down, pass it around,"
      puts "Zero bottles of beer on the wall.\n\n"
    end

    if @beers.to_i == 0
      print ""
    end

  end

end

我正在尝试比较第一个数字以获得十位,然后比较第二个数字以获得由连字符分隔的单位。

【问题讨论】:

  • 我现在更新以包括整个班级。道歉
  • 请把它放在问题中
  • 阅读此处了解对此问题的不同看法stackoverflow.com/questions/19445003/…
  • 具体是什么不起作用?
  • 我明白,但将来尽你所能在 SO 中正确地进行空格和缩进。通过使代码更易于阅读和理解,它使每个人的生活更轻松。查看@Jordan 的当前编辑,了解如何最好地实现这一目标。

标签: ruby


【解决方案1】:

你的台词:

split_beers = beers.to_s.split
split_number = number.to_s.split

假设结果是一个数组,但事实并非如此,因为您没有提供要拆分的模式 所以使用默认值。见:http://ruby-doc.org/core-2.0.0/String.html#method-i-split

puts "10".to_s.split.inspect        # gives ==> ["10"]
puts "10".to_s.split('',2).inspect  # gives ==> ["1", "0"]

最后一个是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多