for문과if문을 한 줄로 합치다
오늘 이 문제를 풀 때 코드를 최대한 줄였다.
문제문
고교는 2로 파열된 수를 좋아한다.정수 n을 주었기 때문에 1 이상 n 이하의 정수에서 최대 2로 분할하는 횟수를 구하세요.답은 틀림없이 하나일 것이다.
또 2를 제외하고 몇 번 안 나와 파열되는 것을 2로 파열 횟수라고 한다.
입력 예
15
샘플 출력8
8은 3번 2로 나눌 수 있는데 이것은 1, 2...15중에서 가장 많다.정답: 1
정상이었어
우선 보통 쓰는 코드는 여기 있습니다.
n = int(input())
x = 1
for i in range(1,7):
if 2**i > n:
break
x = 2**i
print(x)
상당히 깔끔한 느낌.나는 단축 시스템으로 이 코드를 다시 써 보았다.
버전 단축
n = int(input())
x = 1
x = x if 2**i > n else 2**i for i in range(1,7)
print(x)
길이가 반으로 바뀌었어요.for문의 4행을 1행으로 줄일 수 있는 것은 세 가지 연산자 덕분이다.
삼원 연산자 xfor 문장
for i in range(1,7):
if 2**i > n:
break
x = 2**i
위의 네 줄을 아래의 한 줄로 바꾸다.내용이 조금 다른 경우if 2**i > n
가 트루인 경우다.x = x if 2**i > n else 2**i for i in range(1,7)
일반적으로 쓰는 사람은 빼고break
하지만 단축판에서 x는 스스로 대입한다.단축판은 전체 순환이 필요하기 때문에 처리 속도가 매우 느리다.
break
와 continue
라는 표현은 공식이 아니기 때문에 세 가지 연산자를 사용할 수 없다.Summary
이번 for문과if문의 조합 코드는 매우 짧지만 여러 가지 제한이 있다.실제로 방금 Atcorder에 단축판 코드를 제출했는데 런타임 에로르가 나온 거예요.
앞으로도 적극적으로 사용해 짧아질 수 있는 장면과 열심히 써야 할 장면을 똑똑히 보도록 하겠습니다.
Reference
이 문제에 관하여(for문과if문을 한 줄로 합치다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/swata_dev/articles/e4b83d9492dcb8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)