2016-03-25 3 views
-2

Я пишу этот код, чтобы проверить, четное ли число и делится на 7. Цель состоит в том, чтобы использовать «& &» или «||». Поскольку я хочу как четное число, так и делимое на 7, это будет «& &». Это мой код.И синтаксис (||; &&) с двумя аргументами

input = gets.to_i 
def divisible_by_seven?(input) 

    div_by_seven = input % 7 
    is_even = is_even?(input) 

    if div_by_seven == 0 && is_even == true 
     return "is divisible by 7 and is even" 

    elsif div_by_seven == 0 && is_even == false 
     return "is divisible by 7 but is not even" 

    elsif div_by_seven != 0 && is_even == true 
     return "is not divisible by 7 but is even" 

    else 
     return "is not divisible by 7 and is not even" 
    end  
end 

puts "#{input} #{is_even_and_divisible_by_seven?(input)}" 

Есть ли способ лучше написать это?

+0

Is "делится на 5" на линии 8, как предполагается, будет «делится на 7 «? –

+0

Что такое 'is_even_and_divisible_by_seven?'? Что такое 'is_even?'? – sawa

+0

Быстрое улучшение было бы заменить 'is_even == true' на' is_even' и 'is_even == false' с'! Is_even'. –

ответ

0

Конечно, есть.

def is_even_and_divisible_by_seven?(input) 
    case [(input % 7).zero?, input.even?] 
    when [true, true] then "is divisible by 7 and is even" 
    when [true, false] then "is divisible by 7 but is not even" 
    when [false, true] then "is not divisible by 7 but is even" 
    when [false, false] then "is not divisible by 7 and is not even" 
end 

input = gets.to_i 
puts "#{input} #{is_even_and_divisible_by_seven?(input)}" 

или

def is_even_and_divisible_by_seven?(input) 
    [(input % 7).zero?, input.even?] 
end 

input = gets.to_i 
x, y = is_even_and_divisible_by_seven?(input) 
puts "#{input} is#{" not" unless x} divisible by 7 "\ 
    "#{x == y ? "and" : "but"} is#{" not" unless y} even" 
+0

Спасибо @sawa, но я работаю, чтобы использовать код && operation – Orirere

+0

Это не в вопросе. – sawa

+0

'&&' нельзя переопределить, потому что это не метод. Также не может '||'. – Aetherus

0

Быстрое улучшение было бы заменить div_by_seven = input % 7 с div_by_seven = input % 7 == 0. Кроме того, замените is_even == true на is_even или просто input.even? и is_even == false с !input.even?.

def divisible_by_seven_and_even?(input) 
    div_by_seven = input % 7 == 0 

    if div_by_seven && input.even? 
    "is divisible by 7 and is even" 
    elsif div_by_seven && !input.even? 
    "is divisible by 7 but is not even" 
    elsif !div_by_seven && input.even? 
    "is not divisible by 7 but is even" 
    else 
    "is not divisible by 7 and is not even" 
    end  
end 
0

Если целое число даже (делится на 2) и делится на 7, то он делится на 14.

Смежные вопросы