Ruby 如何计算音乐的总销售额
我正在尝试从CSV文件检索信息: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]
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]
完#请读"。我们需要能够复制问题,该问题需要证明它的最小输入数据,以及所需的输出。请阅读“”。我们需要能够复制这个问题,这个问题需要最少的输入数据来证明它,以及所需的输出。