Ответ 1
Добавьте .to_i
к вашим вызовам gets.chomp
. Вы пытаетесь выполнять математические операции над текстом. При вводе с консоли все начинается как текст, даже если это числовой текст.
Я пытаюсь ответить на следующий вопрос из книги Криса Пайн "Учись программировать":
Високосные годы. Напишите программу, которая запрашивает начальный год и год окончания, а затем переносит все високосные годы между ними (и включая их, если они также високосные годы). Високосные годы - это годы, делящиеся на 4 (например, 1984 и 2004). Однако годы, делящиеся на 100, не являются високосными (например, 1800 и 1900 годы), если они также не делятся на 400 (например, 1600 и 2000 годы, которые фактически были високосные годы). Какой беспорядок!
При запуске моего кода появляется следующая ошибка:
leap_year.rb: 12: in +': no implicit conversion of Fixnum into String (TypeError)
from leap_year.rb:12:in
'
Вот мой код:
#leap years
puts 'What is the starting year?'
starting_year = gets.chomp
puts 'What is the ending year?'
ending_year = gets.chomp
while starting_year <= ending_year
if starting_year%4 == 0 && (starting_year%100 != 0 && starting_year%400 == 0)
puts starting_year
end
starting_year+=1
end
Добавьте .to_i
к вашим вызовам gets.chomp
. Вы пытаетесь выполнять математические операции над текстом. При вводе с консоли все начинается как текст, даже если это числовой текст.
Это потому, что вход от gets.chomp
равен String
. Вы не можете выполнять modulo (%
) на String
. Сначала вам нужно преобразовать его в целое число.
Попробуйте это...
puts 'What is the starting year?'
starting_year = gets.chomp.to_i
puts 'What is the ending year?'
ending_year = gets.chomp.to_i
while starting_year <= ending_year
if starting_year%4 == 0 && (starting_year%100 != 0 && starting_year%400 == 0)
puts starting_year
end
starting_year+=1
end
Теперь это работает?