Как вы получаете вывод в Ruby для сортировки по четным и нечетным числам? - PullRequest
0 голосов
/ 26 февраля 2019

Я получил это назначение в Codecademy.Я хочу напечатать четные числа.

print "Print any number:"
inpt = gets.chomp

def odd_or_even(num)
  if num % 2 == 0
    print "even"
  else
    print "odd"
  end
end

Я не получаю никакого вывода.Проблема в методе или как я написал уравнение?Я пытался изменить оба.

Ответы [ 4 ]

0 голосов
/ 13 марта 2019
i = 20
loop do 
  i -= 1
  next if i % 2 == 1
  print "#{i}"
  break if i <= 0
end
0 голосов
/ 26 февраля 2019

Вы определили метод odd_or_even, но никогда не вызываете его.

У вас есть два варианта:

  1. Используйте более похожий на сценарий подход и работайте сввод без использования методов:

    print 'Print any number: '
    input = gets.to_i
    #              ^ convert the input (which is always a string) to an integer
    if input % 2 == 0
      puts 'even'
      # ^ is the same as `print` but adds a newline character at the end
      #   (unless the string ends with a newline character)
    else
      puts 'odd'
    end
    
  2. Если вы хотите использовать метод, вам нужно определить его и также вызвать его:

    def odd_or_even(num)
      if num % 2 == 0
        puts 'even'
      else
        puts 'odd'
      end
    end
    
    print 'Print any number: '
    input = gets.to_i
    odd_or_even(input)
    # ^ method is called here
    

В Ruby также есть много встроенных помощников.Вы можете добиться того же результата с помощью следующих двух строк:

print 'Print any number: '
puts gets.to_i.odd? ? 'odd' : 'even'

ссылки:

  • #gets получить пользовательский ввод
  • String#to_i преобразовать входные данные в целое число
  • Integer#odd? проверить, является ли целое число нечетным
  • Тройной, если : используйте inline, если expression ? true : false
0 голосов
/ 27 февраля 2019

Я думаю, что вы должны проверить свои входные данные.

В противном случае это может быть ситуация:

'abc'.to_i.even? #=> true

Это потому, что нецифровое String#to_i возвращает 0.

Как видите, это нехорошо.

def odd_or_even(number)
  number.odd? ? 'odd' : 'even'
end

puts 'Print any number:'
input = gets.chomp

if input =~ /\D/
 puts 'It is not a number'
else
  puts "It's #{odd_or_even(input.to_i)}"
end

Сначала мы проверяем данные с помощью регулярных выражений.Если это не число, мы не будем проверять, является ли оно нечетным или четным.

Примечание:

Очень часто мы используем =~ оператор длясовпадение String и Regexp.

/\D/ означает любой нецифровый символ.

0 голосов
/ 26 февраля 2019

Я вижу две проблемы с тем, что вы опубликовали - первый gets.chomp будет возвращать string, и вы действительно хотите integer, поэтому вы захотите сделать gets.to_i (или Integer(gets)если вы хотите защититься от нечисловых вводов).Во-вторых, print не включает разрыв строки, так что это может быть источником вашей проблемы «без вывода» - возможно, вместо этого попробуйте переключиться на puts?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...