如何创建程序以接受用户的十个号码?

时间:2013-02-06 01:01:39

标签: ruby syntax-error

我正在创建一个程序,接受用户的十个号码。然后,它显示十个数字的总和,它们的平均值,以及最小和最大的数字。最后,它应该显示“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

2 个答案:

答案 0 :(得分:3)

一些事情:

  1. 您需要end您的块:for ... endif ... else ... end等。这是它无法运行的主要原因,即解析器无法识别它作为有效的语法。

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

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

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

  5. 你可以在这里做很多优化。一个很好的机会就是你有很多重复的代码,如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语句,您需要在计算之前将输入转换为数字。 您还需要关闭结尾处的forif之前的'Jackpot!'

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

value_list = value_list.map(&:to_i)

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

puts "Total: #{subtotal}"

在此之后,您需要重做if num1..num10 >=100。它将100与错误的范围进行比较。