0

我正在创建一个接受来自用户的十个数字的程序。然后,它显示十个数字的总和、它们的平均值以及最小和最大数字。最后,它应该显示单词“Jackpot!” 对于输入的每个等于或大于 100 的数字,以及“运气不好”。对于每个小于 100 的数字。

我的代码似乎无法正常工作,也无法在 Ruby 中运行。

puts 'Please enter 10 numbers one at a time.' 
num1=gets.chomp
num2=gets.chomp
num3=gets.chomp
num4=gets.chomp
num5=gets.chomp
num6=gets.chomp 
num7=gets.chomp
num8=gets.chomp
num9=gets.chomp
num10=gets.chomp
value_list=[num1, num2, num3, num4, num5, num6, num7, num8, num9, num10] 
subtotal=0
for x in 0..9
subtotal=subtotal+value_list[x]
puts 'Total: ' + subtotal
average=subtotal/10.to_f
average=sprintf("%.2f",average)
puts 'Average: ' + average
puts 'Smallest value: ' + sprintf("%.2f",value_list.min.to_s)
puts 'Largest value: ' + sprintf("%.2f",value_list.min.to_s)
if num1..num10 >=100
puts 'Jackpot!'
else
puts 'Tough Luck.'
sleep 120
4

2 回答 2

3

一些东西:

  1. 你需要end你的 blocks: for ... end, if ... else ... end, 等等。这是它不能运行的主要原因,即解析器不认为它是有效的语法。

  2. gets.chomp返回一个字符串,但您正在寻找整数。尝试gets.chomp.to_i强制整数类型。

  3. 'Total: ' + subtotal:您将在字符串中添加一个整数,这是不允许的。Ruby 字符串插值是这样的(需要双引号)"Total: #{subtotal}":. 这会将subtotal变量转换为字符串并即时将其插入到另一个字符串中。

  4. 我不确定您要在这里做什么:if num1..num10 >= 100. 如果范围的任何成员大于 100,或者总和大于 100,这是不是这样?

您还可以在这里进行很多优化。一个很好的机会是当你有很多重复的代码时,比如num1 = gets.chomp.to_i; num2 = gets ... etc.

这是您程序的一个版本,(我认为)可以按照您的意愿进行操作。如果您认真学习 Ruby,请查看其中一些方法的文档(<<inject.times):

puts 'Please enter 10 numbers one at a time.' 
value_list = []
10.times do
  value_list << gets.chomp.to_i
end

subtotal = value_list.inject(:+)

puts "Total: #{subtotal}"
puts "Average: #{(subtotal/10.0).round(2)}"
puts "Smallest value: #{value_list.min}"
puts "Largest value: #{value_list.max}" 

if subtotal >= 100
  puts 'Jackpot!'
else
  puts 'Tough Luck.'
end

希望这可以帮助。

于 2013-02-06T01:15:03.507 回答
0

您的代码需要一些end语句,并且您需要在计算之前将输入转换为数字。您还需要for在末尾和if之前关闭'Jackpot!'.

您可以使用以下方法转换所有输入的字符串map

value_list = value_list.map(&:to_i)

在计算小计时,您需要将其数据转换为字符串,或者只是插入数据:

puts "Total: #{subtotal}"

在这之后你需要重做if num1..num10 >=100。它与100错误的 Range 进行比较。

于 2013-02-06T01:25:00.633 回答