Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何计算音乐的总销售额_Ruby_Csv - Fatal编程技术网

Ruby 如何计算音乐的总销售额

Ruby 如何计算音乐的总销售额,ruby,csv,Ruby,Csv,我正在尝试从CSV文件检索信息: require 'csv' total_sales = 0 CSV.foreach('sales-data.csv', headers: true, converters: :all) do |row| # TODO: check if category is "Music" (row[2]) # TODO: if it is music, add total_sales + the row's sales (row[6]) if row[2]

我正在尝试从CSV文件检索信息:

require 'csv'

total_sales = 0

CSV.foreach('sales-data.csv', headers: true, converters: :all) do |row|
  # TODO: check if category is "Music" (row[2])
  # TODO: if it is music, add total_sales + the row's sales (row[6])
  if row[2] = 'music'
    total_sales = total_sales + row[6]
end

puts total_sales.round(2)
运行此代码时,我收到以下错误:

our-sales-report.rb:12: syntax error, unexpected end-of-input, 
expecting keyword_end

通常,每个
if
都应该有一个相应的
end
,而您的则没有。另外,您还需要非常非常小心地避免混淆
=
赋值运算符和
=
比较运算符。正确的代码是:

if row[2] == 'music'
  # ...
end
唯一的例外是后面的
if
子句:

total_sales += row[6] if row[2] == 'music'
我建议初学者一开始就远离这些代码,因为如果它们被滥用,可能会导致思维混乱。请注意,
x+=y
x=x+y
的简写,通常能更清楚地传达正在发生的事情

另一个需要考虑的问题是用这样的方式编写代码:

case row[2]
when 'music'
  total_sales += row[6]
end
这样就不可能做意外的任务

另一件要考虑的事情是把你的<代码>行>代码>转换成实际的列名,例如:

CSV.foreach(...) do |a, b, type, c, d, sales|

其中,
a
b
被更改为表示该列中存在的任何值。这比
行[2]
可读性好得多,通常每个
if
都应该有一个相应的
结尾,而你的没有。另外,您还需要非常非常小心地避免混淆
=
赋值运算符和
=
比较运算符。正确的代码是:

if row[2] == 'music'
  # ...
end
唯一的例外是后面的
if
子句:

total_sales += row[6] if row[2] == 'music'
我建议初学者一开始就远离这些代码,因为如果它们被滥用,可能会导致思维混乱。请注意,
x+=y
x=x+y
的简写,通常能更清楚地传达正在发生的事情

另一个需要考虑的问题是用这样的方式编写代码:

case row[2]
when 'music'
  total_sales += row[6]
end
这样就不可能做意外的任务

另一件要考虑的事情是把你的<代码>行>代码>转换成实际的列名,例如:

CSV.foreach(...) do |a, b, type, c, d, sales|

其中,
a
b
被更改为表示该列中存在的任何值。这比
行[2]

的可读性要高得多,Ruby不是python:取消识别代码不足以关闭块或语句:

if row[2] == 'music'
  total_sales = total_sales + row[6]
end # <------------ this was missing!!!
如果行[2]=“音乐”
总销售额=总销售额+行[6]

end#Ruby不是python:取消识别代码不足以关闭块或语句:

if row[2] == 'music'
  total_sales = total_sales + row[6]
end # <------------ this was missing!!!
如果行[2]=“音乐”
总销售额=总销售额+行[6]
完#请读"。我们需要能够复制问题,该问题需要证明它的最小输入数据,以及所需的输出。请阅读“”。我们需要能够复制这个问题,这个问题需要最少的输入数据来证明它,以及所需的输出。