논리 연산자 또는 조건 중첩

7664 단어 Ruby초학자tech
새해 복 많이 받으세요.
오늘 아침 루비 드릴에 대한 질문에 새로운 발견이 있어서 여기에 기록합니다.

문제.


두 개의 소문자가 있는 문자열이 존재할 때 그 중 한 문자열이 다른 문자열의 어미에 있는 경우True 출력False을 정의하는 방법입니다.

slice 방법(with range)


https://docs.ruby-lang.org/ja/latest/class/String.html
공식 참조로 슬라이스 방법에서 범위를 지정할 수 있다는 것을 알았습니다.

"abcdefg".slice(0..2)

# >> abc

"abcdefg".slice(3..-1)

# >> defg

이 방법을 사용하여 문제를 정의하는 방법.

나의 답안



def slice_range(x, y)
  if x.length >= y.length
    if x.slice(- y.length..-1) == y
      puts "True"
    else
      puts "False"
    end
  else
    if x == y.slice(- x.length..-1)
      puts "True"
    else
      puts "False"
    end
  end
end

먼저 x와 y의 문자열의 길이를 조건 표현식에 곱한다.그런 다음 길이를 긴 부분에서 짧은 부분까지 슬라이스하여 중첩합니다.

아나운서


더 간결한 작법이 있다.

def end_other(x, y)
  if y.slice(-x.length..- 1) == x || x.slice(- y.length..- 1) == x
    puts "True"
  else
    puts "False"
  end
end
자신의 대답에 이렇게 쓰지 않은 것은 슬라이스의 범위 지정이 좋지 않다고 생각했기 때문이다.
논리 연산자로 분리된 조건식 중 하나는 정상적으로 처리되지만 다른 하나는 오류가 발생한 것이 아닙니까?

그런 거 없어요.


코드를 다시 써서 검증하다.

def end_other(x, y)

  puts y.slice(-x.length..- 1)
  puts y.slice(-x.length..- 1)

  if y.slice(-x.length..- 1) == x || y.slice(-x.length..- 1) == x
    puts "True"
  else
    puts "False"
  end
end

end_other('xyabc', 'abc')
출력은 다음과 같다.
            #空値です
abc
True
짧은 쪽이 긴 length로 절단할 때 오류가 아니라nil.
이것nil == x 덕분에 처리가 순조롭게 진행될 수 있었다.

고마워요 고마워요


이번 대답에서 나는 조건의 불일치에서 빈 값을 피하지 않아도 코드를 간결하게 쓸 수 있다는 것을 배웠다.

앞으로 실패를 두려워하지 않고nil에 삽입된 인코딩에 적극적으로 도전하세요!

좋은 웹페이지 즐겨찾기