0

ユーザーから 10 個の数字を受け取るプログラムを作成しています。次に、10 個の数値の合計、それらの平均、および最小数値と最大数値が表示されます。最後に、「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のブロックが必要です。これが実行されない主な理由です。つまり、パーサーが有効な構文として認識しません。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 より大きい場合ですか?

ここで実行できる最適化も多数あります。良い機会の 1 つは、 のように、コードの繰り返しが多い場合です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 >=100100それは間違っている Rangeと比較します。

于 2013-02-06T01:25:00.633 に答える