написание программы, которая предлагает пользователю ввести степень в градусах Цельсия и конвертировать ее в градусы Фаренгейта - PullRequest
0 голосов
/ 06 апреля 2019

плохо знаком с кодированием и не уверен, что я делаю здесь не так.это то, что я до сих пор:

put "Enter degrees in Celsius:"
Celsius = gets.chomp

def celsius_to_fahrenheit (c)

fahrenheit = (c * 9/5)+32
end

puts "The temperature is #{celsius_to_farenheit (Celsius)} in Farenheit"

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Здесь зафиксировано:

puts "Enter degrees in Celsius:"
celsius = gets.chomp

def celsius_to_fahrenheit(c)

        fahrenheit = (c.to_f * 9/5)+32
end

puts "The temperature is #{celsius_to_fahrenheit(celsius)} in Farenheit"
  1. Неправильно вызванная функция celsius_to_farenheit
  2. Неправильно вызванная функция put (должно быть puts)
  3. c была String, а не int / float.Не могу сделать математику для строки
  4. Цельсия была заглавной.Это плохая форма.Начало переменной с заглавной буквы обычно обозначает класс.Это не «неправильно», но это неправильно.

В целом, ваша самая большая ошибка - не читать журналы ошибок.Когда вы запустите программу, она выдаст ошибки, указывающие на ваши ошибки.Один за другим вы должны исправлять ошибки, пока ваша программа не скомпилируется / запустится.Не просто случайно исправить ошибки.Прочитайте сообщение, подумайте о том, что вы сделали и что вы пытаетесь сделать, затем исправьте ошибку.

Traceback (most recent call last):
test.rb:1:in `<main>': undefined method `put' for 
main:Object (NoMethodError)
Did you mean?  puts
               putc

Это означает, что вы пытаетесь вызвать функцию (ошибочную функцию put) в верхней части файла.

Traceback (most recent call last):
test.rb:9:in `<main>': undefined method 
`celsius_to_farenheit' for main:Object (NoMethodError)
Did you mean?  celsius_to_fahrenheit

Тот же симптом, другое заболевание.

Traceback (most recent call last):
    1: from test.rb:9:in `<main>'
test.rb:6:in `celsius_to_fahrenheit': 
undefined method `/' for "666666666":String (NoMethodError)

Посмотрите, как это говорит мне все, что мне нужно знать?

Я преобразовал это значение "c" вплавать.По умолчанию ввод пользователя должен интерпретироваться как строка.Вы должны «преобразовать» (преобразовать) переменную в число с плавающей точкой, если вы хотите, чтобы ввод пользователя интерпретировался как число с плавающей точкой, а не как строка.

Причина, по которой вы видите 666666666, заключается в том, что Руби пытается быть модной.Если вы умножаете строку на int, N, вы получите эту строку, повторенную N раз.

напр."hello world" * 2 # hello worldhello world

0 голосов
/ 06 апреля 2019

Вот как должен быть код.

puts "Enter degrees in Celsius:"
Celsius = gets.chomp.to_f

def celsius_to_farenheit (c)
fahrenheit = (c * 9/5)+32
end

puts "The temperature is #{celsius_to_farenheit (Celsius)} in Farenheit"

Есть определенные ошибки, которые вы делаете

  1. Имя функции, когда вы ее определяете и затем вызываете, отличаются. Они должны быть точно такими же. Вы определили его как "celsius_to_fahrenheit", но назвали его "celsius_to_farenheit"
  2. Ввод времени выполнения, который вы фактически указываете (gets.chomp), является строкой. Так что конвертируйте его в float используя ".to_f". Вы можете сделать это, когда присваиваете переменную (по Цельсию), как я, или даже когда вы передаете аргумент функции
  3. Вы неправильно назвали пут вместо первой в первой строке
...