我正在创建一个程序,接受用户的十个号码。然后,它显示十个数字的总和,它们的平均值,以及最小和最大的数字。最后,它应该显示“Jackpot!”这个词。输入的每个数字的值都大于100,并且“Tough Luck”。对于每个小于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
答案 0 :(得分:3)
一些事情:
您需要end
您的块:for ... end
,if ... else ... end
等。这是它无法运行的主要原因,即解析器无法识别它作为有效的语法。
gets.chomp
返回一个字符串,但您正在寻找整数。尝试gets.chomp.to_i
强制整数类型。
'Total: ' + subtotal
:您将向字符串添加一个整数,这是不允许的。 Ruby字符串插值就像这样(需要双引号):"Total: #{subtotal}"
。这会将subtotal
变量转换为字符串,并将其插入到另一个字符串中。
我不确定你在这里要做什么: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
希望这有帮助。
答案 1 :(得分:0)
您的代码需要一些end
语句,您需要在计算之前将输入转换为数字。
您还需要关闭结尾处的for
和if
之前的'Jackpot!'
。
您可以使用map
转换所有输入的字符串:
value_list = value_list.map(&:to_i)
在计算小计时,需要将其数据转换为字符串,或者仅插入数据:
puts "Total: #{subtotal}"
在此之后,您需要重做if num1..num10 >=100
。它将100
与错误的范围进行比较。